I2S协议:特点、工作原理、差异及其应用


随着时间的推移,移动手机、计算机和家庭自动化产品中的数字系统及其音频数据需求发生了巨大变化。来自或发送至处理器的音频信号正逐渐数字化。

这些数据在不同系统中通过多种设备处理,如数字信号处理器(DSP)、模数转换器(ADC)、数模转换器(DAC)、数字输入/输出接口等。为了使这些设备之间能够相互传输音频数据,需要一种标准协议。

I2S协议便是其中之一。它是一种由飞利浦半导体公司于1986年2月设计的串行总线接口,专为设备间的数字音频接口而设计。本文探讨I2S协议的概述、工作原理及其应用。

什么是I2S协议?

I2S(Inter-IC Sound)协议 是一种用于将数字音频数据从一个设备传输到另一个设备的协议。该协议在电子设备内的集成电路(IC)之间传输脉冲编码调制(PCM)音频数据。I2S在将预录的音频文件从微控制器(MCU)传输到DAC或放大器的过程中起关键作用。此协议还可通过麦克风实现音频数字化。I2S协议不涉及压缩,因此无法播放OGG、MP3等压缩音频格式,但支持WAV文件。

特点

I2S协议的特点包括:

  • 每个样本包含8至32位数据。

  • 支持发送(Tx)和接收(Rx)FIFO中断。

  • 支持直接内存访问(DMA)。

  • 字选择周期为16位、32位、48位或64位。

  • 支持双向音频流同步传输。

  • 样本宽度为8位、16位或24位。

  • 支持多种采样率。

  • 通过64位字选择周期,数据速率最高可达96 kHz。

  • 支持交错的立体声FIFO或独立的左右声道FIFO。

  • 可独立启用Tx和Rx功能。

I2S通信协议工作原理

I2S通信协议是一种三线协议,通过包含SCK(串行时钟)、WS(字选择) 和 SD(串行数据) 的三线串行总线处理音频数据。

三线连接说明

1. SCK(串行时钟)

SCK(或称为BCLK,位时钟)是I2S协议的第一条线,用于同步数据的读取。其频率由公式定义:

2. WS(字选择)

WS(或称为FS,帧选择)用于区分左右声道:

  • • WS = 0:左声道(通道1)。

  • • WS = 1:右声道(通道2)。

3. SD(串行数据)

SD线传输以二进制补码形式编码的音频数据,最高有效位(MSB)优先传输。接收端与发送端的字长可能不同:

  • 若接收端字长大于发送端,低位补零。

  • 若接收端字长小于发送端,忽略多余低位。

发送器可在时钟脉冲的上升沿或下降沿传输数据(通过控制寄存器配置),但接收端仅在时钟上升沿锁存数据。发送器在WS信号变化后延迟一个时钟周期开始传输数据,接收端则通过WS信号同步数据。

I2S网络组件

当多个I2S组件互联时,称为I2S网络。网络中的组件分为主设备和从设备:

    1. 主设备为发送端:主设备控制SCK和WS线(如ESP NodeMCU开发板)。
    1. 主设备为接收端:接收端生成SCK和WS信号。
    1. 外部主控制器:独立主设备生成时钟和帧同步信号。

所有I2S网络仅允许一个主设备存在,其他组件根据主设备时钟同步数据传输。

I2S时序图

I2S时序图展示了SCK、WS和SD三线的信号关系:


  1. 串行时钟(SCK)
    • 频率公式:SCK频率 = 采样率 × 每通道位数 × 通道数

    • 例如,若采样率为44.1 kHz,每通道16位,双通道(立体声),则SCK频率为:

  1. 字选择线(WS/LRCLK)
    • 电平定义:

    ◦ 高电平(1):右声道数据传输

    ◦ 低电平(0):左声道数据传输

    • 时序特性:

    ◦ WS信号在最高有效位(MSB)发送前一个时钟周期切换,为接收端提供缓冲时间:

    ◦ 接收器可存储当前字并清空输入寄存器,准备接收下一字。  
    

    ◦ MSB在WS切换后的首个SCK时钟边沿开始传输。

  2. 串行数据线(SD)
    • 数据传输方式:

    ◦ 数据在每个SCK时钟的下降沿(从高电平到低电平)被采样,如图中圆点标记所示。


传播延迟与同步设计

  • 传输过程中,发送端与接收端间存在传播延迟,其计算公式为:

传播延迟=(外部时钟与接收器内部时钟的相位差)+(接收器内部时钟到数据接收完成的时延)

最小化延迟的时钟约束

  • 为确保收发同步,需满足以下条件:

发送端时钟周期(T):

示例参数(传输速率2.5 MHz)

  1. 发送端(主设备):

    • 时钟高电平时间(t_HC):最小值 > (0.35T)

    • 时钟低电平时间(t_LC):最小值 > (0.35T)

  2. 接收端(从设备):
    • 时钟高电平时间(t_HC):最大值 < (0.35T)

    • 时钟低电平时间(t_LC):最大值 < (0.35T)

    • 建立时间(t_su):最小值 < (0.20T)


关键说明
• 上述约束确保信号在接收端建立/保持时间窗口内稳定,避免亚稳态问题。

• 设计时需通过时序仿真验证实际延迟是否满足协议要求。

(注:此为技术文档级翻译,保留原文公式与参数单位,必要时可补充注释。)

I2S协议与Arduino

项目示例:使用Arduino MKR Zero和I2S库构建简易电子琴(Theremin)。

  • 组件:Arduino MKR Zero、Adafruit MAX98357A I2S DAC、3W扬声器、滑动电位器。

  • 连接:

    SD线接引脚A6,SCK接引脚2,WS接引脚3。

  • 工作原理:滑动电位器调节音高和音量,I2S DAC输出正弦波音频。

代码示例

#include <I2S.h>  
const int maxFrequency = 5000;  // 最大频率  
const int minFrequency = 220;   // 最小频率  
const int sampleRate = 44100;   // 采样率  
short sine[256];                // 正弦波缓冲区  

void setup() {  
  I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16);  
  generateSine();  // 生成正弦波数据  
}  

void loop() {  
  float frequency = map(analogRead(A0), 0, 1023, minFrequency, maxFrequency);  
  int amplitude = map(analogRead(A1), 0, 1023, 0, 100);  
  playWave(frequency, 0.1, amplitude);  // 播放音频  
}  

void generateSine() {  
  for (int i = 0; i < 256; i++) {  
    sine[i] = 100 * sin(2 * PI * i / 256);  
  }  
}  

void playWave(float freq, float sec, int amp) {  
  unsigned int iterations = sec * sampleRate;  
  float delta = (freq * 256) / sampleRate;  
  for (unsigned int i = 0; i < iterations; i++) {  
    short pos = (i * delta) % 256;  
    short sample = amp * sine[pos];  
    I2S.write(sample);  // 左右声道同步输出  
    I2S.write(sample);  
  }  
}  

I2C与I2S协议的区别

I2CI2S
用于IC间通用通信专用于数字音频传输
使用SDA和SCL两线使用SCK、WS、SD三线
支持多主多从仅单主设备
含起始/停止位无额外控制位
适用多种低速外设专为音频设计

优缺点

优点:

  • 时钟与数据分离,简化接收端设计。

  • 支持全数字麦克风接口,无需模拟前端。

缺点:

  • 不适合长距离电缆传输。

  • 无纠错机制,易受干扰。

  • 缺乏统一连接器标准。

应用场景

  • 连接数字音频设备(如DSP、ADC、DAC)。

  • 用于CD播放器、无线麦克风、家庭影院系统。

  • 微控制器与音频编解码器之间的数据传输。

总结

I2S是一种三线同步串行协议,专为集成电路间的数字音频传输设计。其核心功能是通过SCK、WS和SD线实现高效音频数据流传输,广泛应用于消费电子和嵌入式音频系统。

I3C是I2C的升级版,由MIPI联盟制定,融合I2C和SPI优点,支持更高速度、更低功耗和动态地址分配。)

TDM(时分复用)、SPI(串行外设接口)


传输脉冲编码调制(PCM)音频数据

之前也提到PCM,这里补充一点这个!


通过上述机制,PCM实现了高保真、低延迟的音频数据传输,成为数字音频系统的基石。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TrustZone_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值