一.I2S总线介绍
I2S(Inter-IC Sound)是飞利浦公司专门为数字音频设备之间的音频数据传输而设计的一种总线标准,专门用于音频设备之间的通信。需要注意的是,虽然I2S与I2C的名字极为相似,但二者之间并无关系。
I2S是比较简单的数字接口协议,没有地址或设备选择机制。在I2S总线上,只能同时存在一个主设备和发送设备,支持全双工和半双工。
I2S 是一种同步串行通信,标准的I2S总线是有三根串行导线组成的:一根是时分多路复用数据线;一根是字选择线;一根是时钟线。
这具体是什么意思呢?以MAX9857A(一个功放模块,连接喇叭可以放大音频功率)举例,时分多路复用数据线(SD)指的是将把左、右两个声道的音频数据,按时间先后顺序复用到同一根数据线上传输,靠 “字选择线” 区分不同声道的数占据用的时间片,实现单根数据线传立体声,极大节约单片机的资源。字选择线(LRC/WS)是帧时钟 / 声道选择线,作用在采集一个“字”的时间内,同时区分左右声道数据,协助SD线传输数据。时钟线(BCLK),因为I2S 是同步串行通信,所有数据的发送 / 接收都以 BCLK 的时钟脉冲为基准,时钟线告诉设备什么时候该读取数据。这点到和I2C一样。
时序是通信协议的灵魂,学习任何通信协议少不了看时序图
BCLK,即对应数字音频的每一位数据,一个周期内采集一比特位的数据
帧时钟LRCK,用于切换左右声道的数据,拉低为“0”表示正在传输的是左声道的数据,为“1”表示在传输的是右声道的数据。
SD,传输的是用16 位的二进制补码表示的音频数据 。其中先传输的是高位,而且在传输过程中如果低位不足会自动补零
由这个简单时序图可以推算采样率与各个线路的频率的关系:
SCK的频率 = 采样率 x 采样位数(位宽)x声道数
WS的频率 = 采样率
采集到的数据代表什么?把搜集到的16为数据转换为二进制数后,数值的绝对值大小一定程度上反应声音的响度,正负则表示震动的方向,而在采样率相同的情况下,数值变化的频率越快,则表示声音的频率越高,具体计算可以再去研究,主包这里只提供大概的描述。
二.ESP32的I2S模块
Esp32内置两个I2S接口,即I2S0跟I2S1。每个I2S模块都具有分别独立的接收单元跟发送单元,发送跟接受单元各有一组三线接口,分别为上面提到的时钟线(BCLK),声道选择线(WS)跟串行数据线(SD),I2S模块可通过GPIO矩阵映射到任意的引脚。下面是结构示意图:(了解即可),我们在使用中配置成单独接收或者发送就可以了。
ESP32的I2S模块具有三种模式
I2S模式:可以配置高精度的输出时钟,可以全双工或半双工收发数据,支持多种音频标准,内嵌a滤压缩解压缩模块,支持pdm信号的输入输出,可以配置接收到的数据模式的;
LCD模式,可以外接LCD将I2S模块复用为LCD接口,也可以连接片上的ADC/DAC模块,支持外接相机;
I2S中断:支持I2S接口中断以及I2S的DMA接口中断
下一期我将写ESP3S3的I2S的开启和MAX9857A的驱动代码。

2222

被折叠的 条评论
为什么被折叠?



