最通俗理解SAI接口 – TaterLi 个人博客

STM32的新片子的音频外设叫SAI了,S就是Serial,A就是Audio,I就是Interface,还是挺好记的.究竟新在哪里,就是支持音频各种了,但是实际上用到的,还不是I2S.为了不要让大家蒙圈,我总结下我理解的经验,SAI配置其实非常简单.
看下图,初始化,才4个寄存器:

我们要拆分难点,首先,回想下SPI协议,要用硬件SPI来发东西,要想从机能收到信息,需要做哪些配置:

  1. 打开SPI外设时钟
  2. 修改引脚复用
  3. 设置SPI分频,模式等等
  4. 发数据

是的,看起来非常简单,SAI也是一样,要打开外设时钟,修改引脚复用,设置时钟,发数据,就这么就完成了.但是音频跟SPI的最明显区别是什么?

  1. 音频是不断流的,SPI发完可以休息.
  2. 音频是没CS的,他CS相当于左右声道,都有用.
  3. 音频他频率跟SPI不一样,通常不是整数的.

首先第一,我们要用DMA的双缓冲,或者DMA的半传输中断不断填Buffer,才能做到不断流.这是DMA的作用.也就是你要学习SAI,先学DMA吧.是用半空还是双Buffer,看你的器件设计了.注意Buffer还不能太小,不然在你填Buffer过程,另一个Buffer就完成发送了.
音频的CS,就是左右声道,都是硬件控制的,不担心之.
因为频率原因,所以他不是从总线分频,而是有自己的PLL,多么奢侈.不过就算是这样,STM32的SAI一样做不到完全标准频率.
在SAI上,还有几个让人蒙圈的概念,slot和frame.为了方便理解,我用最通俗方式讲,但不是最科学.我们把slot等效为byte,一byte就是一个声道的数据,一frame就是一次完整的表达,比如2声道的音乐,那么需要2byte(slot)才能构成一次传输,也就是1frame,8声道就是8个byte(slot)构成一个frame了,这下好理解啦吧.
但是此处byte不一定是8bit,如果是32bit音乐,这个byte就是32bit,是16bit音乐,这个byte就是16bit,32bit的立体声,一次frame要传64bit的数据.slot的长度相当于SPI的发送位数.而frame,就是多个slot构成,想象成一个SPI要公平给多个不同设备发送数据.那么只能来回切CS.一个设备CS高有效,一个CS低有效.
之前说过SAI时钟跟别的时钟不同,那么他就有他的独立时钟发生器.他的名字就叫PLLSAI,对就是SAI专用的.复习一下I2S,I2S有四条线(精简情况3条,不是此时讨论的.),为了方便讨论,我代入192KHz的音频fs来说,而MCLK引脚,要256倍fs,也就是要49.152MHz,我们PLL就是要配到这个频率,然后输出到MCLK引脚.
这下,我们PLLSAI就克服了,当49.152MHz时候,分频0,就是192k音频了.
那么,那4个寄存器呢?分别是CR1,CR2,FRCR,SLOTR,看名字CR就是控制寄存器,很好理解.因为SAI是支持输入音频的,所以寄存器也多了点.
先看看1号寄存器.

MCKDIV就是刚才说的要得到192K的音频,那么分频是0,记住分频是0哦,因为你要PLLSAI/256/分频 = 音频频率,而实际上不能设置为0,因为为0时候,ST为了不出现除0错误,输入0等于1,所以要设置成NODIV允许.如果要分,NODIV就禁止,然后设置分频数值.
DMAEN和SAIEN就是开关,这肯定在最后才打开他们.打开后就相当于SAI在工作了.
OUTDRIV就是是否开驱动,如果不开,那么只有SAIEN开了,驱动才有,否则驱动可以一直存在,一般选驱动一直在就行,因为经常变换fs时候,重写初始化要失能SAIEN,然后驱动丢了电平就不确定了.
MONO单声道双声道,很好理解.
SYSCEN设置,我们工作在I2S模式,仅仅输出时候不用设置同步,如果要同时输入输出,就是要同步,这样可以节省MCLK,CS(其实是声道选择),FSCLK三根,只要多一根线,当然同步是跟自己内部模块同步还是内部其他SAI同步分多钟情况.
CKSTR就像我们SPI的CPOL模式,我们一般设置为1,下降沿时候生成数据.也有可能有其他DAC不同,没见过.
LSBFIRST和我们SPI的MSB/LSB一样道理.
DS和我们SPI一次发多少Bit同样道理,我们发16bit,这里设置了slot还得设置,因为SAI还有一种叫slot不对齐模式(为什么要这么干?不明白)
PRTCFG是设置协议,类似SPI的摩托罗拉模式,TI模式,我们用的是I2S,是开源模式.
MODE是设置模式,跟SPI一样,是主机还是从机,只不过他多了方向,因为SAI一旦初始化,通信方向就确定.
我们每次变换fs,就是换歌,只需要换CR1寄存器的设置就行了,跟其他没关系.
接下来再看看二号配置寄存器:

只关心最后一个,就是FTH,系统一个一个Byte给东西是很累的,可以设置一个FIFO等级,FIFO低于这个阈值就告诉系统/DMA来给我丢一堆数据,数据量就塞满我FIFO为止.我们可以设成1/4空时候提醒,那么一次可以丢更多东西进去,设置为空有可能因为DMA仲裁不到总线,然后就GG.如果用主设备多,吃总线,那么可能FIFO还要调整.

接下来看FRCR寄存器:

FSOFF是帧t要不要偏移的决定位,明显我们帧不偏移.
FSPOL类似SPI的CPOH,设置FS的低有效还是高有效,根据实际来设置了,因为为0,低有效.
FSDEF配置帧起始信号,而I2S协议起始信号是SOF+通道识别号的,所以设置为1.
FSALL和FRL是互相制约关系,其中FRL是帧长度,比如要发32bit,那么这里设置31,设置的数值一定是基数,并且是2的倍数,最小是8,就是9bit音频,我们的slot长度16bit,两个声道,所以就是32bit,而FSALL是帧同步有效长度,一般设置为一半的FRL,也就是15.
最后最后,就是SLOT配置寄存器了.

SLOTEN,第一次看到EN这么长是吧,这个EN意思是使能多少个slot,我们有2声道,所以要2个slot,他这里最多配置16个slot,如果BIT0设置1,就是1个slot,BIT0+BIT1设置1就是2个slot,所有BIT设置就是16个slot.我们设置0x03,就是2个.
SLOTSZ是slot的size,01就是16bit,10就是32bit配置,如果要兼容32bit和16bit,就要设置成32bit配置.
NBSLOT就是要告诉他多少个slot,最少一个,1个时候填0,两个填1,我们都放立体声,填2,就算要放非立体声的时候,我们也可以左右声道放一样内容,做到单声道效果.不然除了改这里,还要改DAC配置呢.
FBOFF跟之前的FSOFF差不多意思,不过这里偏移的是slot,之前是偏移帧,我们都不需要,设置为0就行.
为什么音频调试让人感到困难,主要克服问题,不要断流,DAC和I2S都要正确才能发生.所以感觉可能比较难.不能拆开调试.

(0)

相关推荐

  • CP AUTOSAR CAN 网络管理简介

    前言 在上一篇公众号里已经对Communication的管理模块ComM做了详细的介绍, ComM是整个通信的服务管理模块,掌控整个AutoSAR的通信,在通信协议栈中除了ComM之外,网络管理也是主 ...

  • nRF24L01 使用心得

    为了方便大家测试程序,先将程序开发环境说明一下,程序是在 STC15W4K56S4 上开发的,开发板,nRF24L01 无线模块都是某宝淘来的. 原理图 PDF: https://download.c ...

  • NUC970 外设资源

    NUC970外设资源FunctionNUC972DFNUC973DFNUC976DKNUC977DKPKGLQFP216LQFP216LQFP128LQFP128EBIVVXXSAR_ADCTP(4W ...

  • STM32无线通信——nRF24L01通信模块

    不同型号STM32的无线通信--基于一样的nRF24L01芯片模块 在此声明一下全部代码均不允许转发以及在商业上的行为等,-Mannix声明. 本次讲解主要内容 1.实验目的 2.实验硬件 3.芯片模 ...

  • SPI协议,MCP2515裸机驱动详解,收藏吧用得着

    SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...

  • GD32VF103 I2C从机模板 – TaterLi 个人博客

    作为I2C从机程序,关键变量aReceiveBuffer以及关键常量I2C0_SLAVE_ADDRESS7,第一个是I2C设备寄存器内容,第二个是I2C地址. 当上位机读写寄存器时候,实际上读写的是a ...

  • 如何通俗理解线性回归? | 30天学会医学统计与SPSS公益课(Day16)

    30天打卡学习医学统计与SPSS本课程是高校医学统计学教授的公益.免费公开课!如假包换!我将每天推送视频和文字教程,讲授基于医学数据的各种统计分析策略.如果你能跟得上节奏,我相信在一个月后,您将会掌握 ...

  • 三阴三阳深度解析!(附通俗理解版六经开阖枢)

    足太阳膀胱经解析  足太阳膀胱经,就是足三阳经的"开".<素问·灵兰秘典论>曰:"膀胱者,州都之官,津液藏焉,气化则能出矣."什么意思呢? 州都:州 ...

  • 通俗理解乳腺癌:男人也会患病吗?

    乳腺癌乍一听可能都会觉得这是一种只可能发生在女性身上的一种疾病.其实不然,男性也是等同可能发生的,但对比性别发病率,男性比女性是要低很多(乳腺癌男性患者占总病例1%). 通俗理解乳腺癌:病发部位在哪里 ...

  • 风云博客:我对赚钱的一点儿理解

    关于赚钱这事儿,很多时候,没法一步到位. 我是习惯性能往前走一步便往前走一步. 类似买房,买不起大的买小的,买不起学区房买郊区的. 总之,先上车再说. 不要等着房价跌了再买,说这话的专家手里有那么多房 ...

  • C社解读:政府补助应用指南(内含纠错、拟上市公司案例、财政贴息实际利率法处理通俗理解)

    新准则下,对于政府补助出现了总额法和净额法的两种会计处理,一经选定不得随意变更. 总额法即,补助不影响原资产成本或发生费用,单独针对补助金额确认递延收益(后续摊销进其他收益)或直接进其他收益或营业外收 ...

  • 从碧桂园年报通俗理解房地产企业对新收入准则的运用

    首先感叹一下PWC的专业,做第一个吃螃蟹的人,出具了这份新收入准则下房地产开发企业的审计报告,过程中肯定少不了与监管机构的沟通,形成的收入确认相关底稿都是严格保密,就连PWC内部也难以获得. 今天我们 ...

  • 资产证券化(ABS)通俗理解

    图片来源于网络 [目前我国资产证券化有三种形式,包括央行和银监会主管的金融机构信贷资产证券化.证监会主管的企业资产证券化以及交易商协会主管的资产支持票据.我们今天主要说说证监会监管的资产证券化,全称资 ...

  • 【视频】Excel函数每日一讲(12):通俗理解Excel函数

    以上视频的所有教学内容,选自教材<玩转Office轻松过二级>(第3版) 书上包含所有方法.技巧.题目,可以自己看书自学. 字都认识,为啥要让别人念呢? 选自本书第9章前言 公式和函数,E ...