第三十五章 I2S——音频传输接口
目录
I2S(Inter-Integrated Circuit Sound)是W55MH32中用于数字音频传输的重要接口,广泛应用于各种音频设备与嵌入式系统。本文将从工作原理、注意事项、应用场景以及程序设计来讲解I2S接口,和大家一起学习和使用这一技术。
1 I2S概述
1.1 简介
I2S(Inter-Integrated Circuit Sound)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,专门用于音频设备之间的高质量数字音频传输。在W55MH32中,I2S功能与SPI模块共享相同的硬件资源,通过将寄存器SPI_I2SCFGR的I2SMOD位置为'1'即可使能I2S功能,将SPI模块转换为I2S音频接口。
I2S接口与SPI接口使用大致相同的引脚、标志和中断,但专为音频数据传输优化。它采用独立的导线传输时钟与数据信号,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。I2S已成为数字音频领域的事实标准接口,广泛应用于各种消费电子和专业音频设备中。
1.2 功能特点
W55MH32的I2S接口有以下特点:
- 单工通信(仅发送或接收)
- 主或者从操作
- 8位线性可编程预分频器,获得精确的音频采样频率(8KHz到96kHz)
- 数据格式可以是16位,24位或者32位
- 音频信道固定数据包帧为16位(16位数据帧)或32位(16、24或32位数据帧)
- 可编程的时钟极性(稳定态)
- 从发送模式下的下溢标志位和主/从接收模式下的溢出标志位
- 16位数据寄存器用来发送和接收,在通道两端各有一个寄存器
- 支持的I2S协议:
- I2S飞利浦标准
- MSB对齐标准(左对齐)
- LSB对齐标准(右对齐)
- PCM标准(16位通道帧上带长或短帧同步或者16位数据帧扩展为32位通道帧)
- 数据方向总是MSB在先
- 发送和接收都具有DMA能力
- 主时钟可以输出到外部音频设备,比率固定为256xFs(Fs为音频采样频率)
1.3 工作原理
I2S接口的核心工作原理基于三个主要信号线的协同工作:
- 串行时钟(SCK/CK):也称为位时钟(BCLK),由主设备产生,用于同步数据传输。每个时钟周期对应音频数据的一位。SCK的频率计算公式为:SCK频率 = 2 × 采样频率 × 采样位数。例如,对于44.1kHz采样率、16位精度的立体声音频,SCK频率应为44.1kHz×16bits×2(左右声道)=1.4112MHz。
- 字选择(WS):也称为帧时钟(LRCK),用于指示当前传输的音频数据所属声道。在I2S飞利浦标准下,WS为'0'表示左声道数据,为'1'表示右声道数据。WS信号在发送第一位数据(MSB)前1个时钟周期即变为有效。
- 串行数据(SD):承载实际的音频数据,采用二进制补码表示。数据总是从最高位(MSB)开始传输,与SPI接口的MSB优先模式类似。
在某些需要更高精度时钟同步的系统中,还可以使用第四个信号线:
- 主时钟(MCK):为外部音频编解码器提供系统时钟参考,通常设置为采样频率的256倍(256xFs)。当寄存器SPI_I2SPR的MCKOE位为'1'时,W55MH32可输出此额外时钟信号。
I2S的数据传输遵循严格的时序关系。在I2S飞利浦标准下,发送方在时钟信号(CK)的下降沿改变数据,接收方在上升沿读取数据。WS信号也在时钟信号的下降沿变化。这种同步机制确保了数据传输的可靠性,即使在高速率下也能保持较低的误码率。
对于不同数据格式的处理,I2S硬件提供了自动的数据对齐和填充功能。例如,当16位数据扩展到32位帧时,高16位(MSB)为有效数据,低16位被硬件强制为0x0000,无需软件干预。24位数据扩展到32位帧时,高24位为有效数据,低8位由硬件置0。这种自动处理大大简化了软件开发,特别是在使用DMA传输时。
I2S的功能框图如下:

1.4 利用DMA通信的I2S
1.4.1 I2S配合DMA通信工作原理
I2S接口与DMA控制器协同工作时,形成高效的数据传输通道。通过将寄存器SPI_CR2的TXDMAEN/RXDMAEN位置1,可使能DMA传输请求。I2S模式下DMA的工作方式与SPI模式基本相同,只是没有CRC功能。当I2S接口需要发送或接收数据时,会自动触发DMA请求:
- 发送过程:TXE标志置1时触发DMA请求,DMA控制器将数据从内存搬运至SPI_DR寄存器。
- 接收过程:RXNE标志置1时触发DMA请求,DMA控制器将数据从SPI_DR寄存器搬运至内。
使用DMA发送和接收的时序图如下:


1.4.2 配置要点
数据格式处理
I2S支持多种数据格式,DMA需要相应配置:
| 数据格式 |
DMA传输次数 |
备注 |
| 16位→16位帧 |
1次 |
直接传输 |
| 16位→32位帧 |
1次 |
硬件自动补0 |
| 24位→32位帧 |
2次 |
硬件补低8位0 |
| 32位→32位帧 |
2次 |
完整32位处理 |
声道管理
- 左声道数据总是先传输
- 通过CHSIDE标志识别当前声道
- 从模式需提前准备好第一个数据
发送流程
- 配置DMA:内存→SPI_DR,设置数据宽度
- 启动传输:

最低0.47元/天 解锁文章
1万+

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



