I2S协议解析

概念

I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。

特点

1. 支持半双工\全双工

2. 支持主从模式

3. 和PCM相比,I2S更适合立体声系统。当然,I2S的变体也支持多通道的时分复用,因此可以支持多声道

信号线

1. 串行时钟SCLK,也叫位时钟BCLK,对应数字音频的每一位数据,该时钟都有一个脉冲。SCLK的频率 = 声道数 * 采样频率 * 采样位数

2. 帧时钟LRCK(也称WS),用于切换左右声道的数据。LRCK为1表示传输右声道数据,为0则是左声道。LRCK的频率 = 采样频率

3. 串行数据SDATA,就是用二进制补码表示的音频数据。先传输最高位

4. 主时钟MCLK,也是以上两个时钟的参考时钟,一个系统应该使用同一的MCLK以保证时钟同步要求。常见频率256fs或384fs。有时为了使系统间能够更好地同步,当I2S配置为主模式(并且SPI_I2SPR寄存器中的MCKOE位置1)时,使用此时钟,该时钟输出频率 256×fs,fs即音频信号采样频率(frequency of sample)

对于系统而言,能够产生SCK和WS的信号端就是主设备,用MASTER表示

IIS包括两个声道(Left/Right)的数据,在主设备发出声道选择/字选择(WS)控制下进行左右声道数据切换。通过增加IIS接口的数目或其它IIS设备可以实现多声道(Multi-Channels)应用

操作模式

1. 标准模式 Phillips Standard

IIS模式是标准左对齐格式再延迟一个时钟位变化来的。

左右通道的数据MSB均是在WS变化后第二个SCK/BCLK上升沿有效。使用WCLK/LRCLK信号来指示当前正在发送的数据所属的声道,为0时表示左声道数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。LRCLK信号在BCLK的下降沿变化。发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。

对于这种标准I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在WCLK/LRCK变化(也就是一帧开始)后的第2个BCLK/SCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

时序图如下:

2. 左对齐模式 Left Justified Standard

标准左对齐格式的数据的MSB没有相对于BCLK延迟一个时钟。左对齐格式的左右声道数据的MSB在WS边沿变化后SCK/BCLK的第一个上升沿有效。

时序图如下:

3. 右对齐模式 Right Justified Standard

也叫日本格式,sony格式。

与左对齐区别就是有效数据在LSB。

时序图如下:

 延迟

在I2s总线中,任何设备都可以通过提供必需的时钟信号成为系统的主导装置,而从属装置通过外部时钟信号来得到它的内部时钟信号,这就意味着必须重视主导装置和数据以及命令选择信号之间的传播延迟,总的延迟主要由两部分组成:

1. 外部时钟和从属装置的内部时钟之间的延迟;

2. 内部时钟和数据信号以及命令选择信号之间的延迟;

对于数据和命令信号的输入,外部时钟和内部时钟的延迟不占据主导地位,它只是延长了有效的建立时间(set—up time)。延迟的主要部分是发送端的传输延迟和设置接收端所需的时间。

版权声明:本文为CSDN博主「野猪赖皮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hhx123456798/article/details/122775909

生成海报
点赞 0

野猪赖皮

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

驱动led --GPIO控制

GPIO引脚操作方法概述 硬件知识_LED原理图不同主芯片控制GPIO引脚的方法概述具体单板控制GPIO引脚的方法详解具体单板LED程序的编写与实验汇编与机器码编程知识_进制编程知识_字节序_位操作编写C程序控制LED解析C程序的内部机制完善

将音频编解码器添加到嵌入式系统的 5 个技巧

嵌入式系统播放音频的能力正在成为一个相当普遍的功能。音频为用户提供了很好的反馈,但如今有如此多的高保真音频可用,使用哔哔声和啁啾声不再削减它。开发人员当然可以使用分立组件和 DAC 从系统中获得不错的音频&#xff0