IIS音频协议核心技术
IIS(Inter-IC Sound,也常写作 I2S)是一种由飞利浦公司(现恩智浦)制定的数字音频串行接口标准,专门用于在集成电路之间传输高质量的数字音频数据。它广泛应用于音频编解码器(CODEC)、数字信号处理器(DSP)、微控制器(如STM32)和现场可编程门阵列(FPGA)等设备间的音频数据传输。
一、 IIS协议核心详解
IIS协议主要定义了音频数据的传输时序和信号线,其核心设计目标是简化音频数据的串行传输,并实现左右声道的分离。
1. 基本信号线
一个完整的IIS接口通常包含以下三根核心信号线(有时会增加一根主时钟线):
| 信号线名称 | 全称 | 方向 | 描述 |
|---|---|---|---|
| SCLK/BCLK | Serial Clock / Bit Clock | 主->从 | 位时钟,用于同步每一位数据的传输。其频率 = 采样频率 × 位数 × 声道数。 |
| LRCK/WS | Left/Right Channel Clock / Word Select | 主->从 | 声道选择时钟(字选择)。用于指示当前传输的是左声道(通常为低电平)还是右声道(通常为高电平)数据。其频率等于音频采样频率。 |
| SD | Serial Data | 双向 | 串行音频数据。音频数据以二进制补码形式,最高位(MSB)在前进行传输。 |
| MCLK | Master Clock | 主->从 | 主时钟(可选)。为音频CODEC等设备提供系统参考时钟,通常是采样频率的256倍或384倍,以保障内部模数/数模转换的精度。 |
2. 数据传输时序与模式
数据传输在SCLK的下降沿或上升沿进行,具体取决于配置。根据LRCK和SD信号的相对时序,IIS有三种主要的数据传输模式:
| 模式 | 标准IIS模式 | 左对齐模式 | 右对齐模式 |
|---|---|---|---|
| 时序图特征 | LRCK变化后,延迟1个SCLK周期,SD数据开始传输。 | LRCK变化的同时,SD数据开始传输。 | SD数据在LRCK周期结束前完成传输。 |
| 数据对齐 | 数据在LRCK边沿后第二个SCLK上升沿开始。 | 数据与LRCK边沿对齐。 | 数据尾部与LRCK边沿对齐。 |
| 常见应用 | 最通用,飞利浦标准。 | 部分CODEC。 | 部分DSP或旧式设备。 |
标准IIS模式时序要点:
- LRCK(WS)信号指示当前传输的声道。一个LRCK周期对应一个声道的数据字(Word)。
- 数据总是在LRCK发生跳变(表示声道切换)后的第二个SCLK上升沿开始传输(对于部分设备可能是下降沿)。
- 数据字(Word)的长度可以配置(如16位、24位、32位),但传输时可能占用固定的时间槽。例如,配置为24位数据时,在32位的时间槽内传输,高位在前,低位在后,未使用的低位在传输周期内补零。
3. 主从模式
IIS接口设备可以配置为主模式(Master)或从模式(Slave),这决定了由谁提供时钟信号:
- 主模式设备:负责产生并输出SCLK和LRCK(以及可选的MCLK)时钟信号。
- 从模式设备:接收外部提供的SCLK和LRCK时钟信号,并依据此时钟来发送或接收SD数据。
例如,在一个由STM32微控制器(主)连接INMP441麦克风(从)的系统中,STM32需要配置其IIS接口为主模式,生成BCLK和WS时钟,INMP441则作为从设备,在STM32提供的时钟下输出数字音频数据。
二、 IIS协议实现方法
IIS协议的实现依赖于硬件控制器和正确的软件配置或逻辑设计。
1. 在微控制器(如STM32)上的实现
以STM32通过IIS采集INMP441麦克风音频数据为例,通常结合DMA以减轻CPU负担并确保实时性。
关键配置步骤:
- 初始化IIS外设:配置IIS为主模式发射器(若驱动扬声器)或接收器(若接收麦克风数据)。设置数据格式(16/24/32位)、音频采样率(如16kHz)、时钟极性等。
- 配置DMA:将IIS的数据寄存器与一个内存缓冲区通过DMA通道关联。设置为循环模式,使得缓冲区填满后自动从头开始,实现连续采集。
- 使能IIS和DMA:启动DMA传输,然后使能IIS外设,开始接收数据。
// 示例:STM32 HAL库 IIS接收初始化代码框架(部分关键代码) I2S_HandleTypeDef hi2s2; DMA_HandleTypeDef hdma_i2s2_rx; // 1. IIS外设初始化 hi2s2.Instance = SPI2; // 假设IIS复用至SPI2 hi2s2.Init.Mode = I2S_MODE_MASTER_RX; // 主模式接收 hi2s2.Init.Standard = I2S_STANDARD_PHILIPS; // 标准IIS模式 hi2s2.Init.DataFormat = I2S_DATAFORMAT_24B; // 24位数据 hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; // 不输出MCLK hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_16K; // 16kHz采样率 hi2s2.Init.CPOL = I2S_CPOL_LOW; // 时钟极性 HAL_I2S_Init(&hi2s2); // 2. 关联DMA __HAL_LINKDMA(&hi2s2, hdmarx, hdma_i2s2_rx); // 配置DMA:从IIS数据寄存器到内存,半字/字传输,循环模式 HAL_DMA_Init(&hdma_i2s2_rx); // 3. 启动DMA接收 uint32_t audio_buffer[BUFFER_SIZE]; HAL_I2S_Receive_DMA(&hi2s2, audio_buffer, BUFFER_SIZE);数据传输瓶颈与优化:如参考案例所述,通过UART将实时音频数据发送到上位机时,需注意UART波特率可能成为瓶颈。例如,16位、16kHz立体声音频的数据率为16bit * 2 * 16000Hz = 512kbps,若使用115200bps的UART,必然丢失数据。解决方案包括提高UART波特率(如到921600bps)、使用USB或网络传输,或在MCU端进行压缩、降采样等预处理。
2. 在FPGA/Verilog中的实现
在FPGA中实现IIS接收端,本质上是设计一个符合IIS时序的数字逻辑电路,将串行数据流转换为并行的PCM音频数据。
核心设计思路:
- 时钟域处理:IIS的SCLK和LRCK通常由外部主设备提供,属于FPGA的外部异步时钟。需要使用寄存器进行同步处理,避免亚稳态。
- 数据恢复:在Verilog中,通常检测SCLK的边沿(如上升沿),并在该时刻对SD数据进行采样。
- 串并转换与对齐:根据LRCK的状态(左/右声道),将连续采样的位数据拼接成完整的音频数据字。需要特别注意标准IIS模式下数据起始的1个SCLK延迟。
// 示例:Verilog IIS接收器核心逻辑代码框架 module iis_receiver ( input wire mclk, // 主时钟(可选,用于内部逻辑) input wire sclk, // 位时钟(来自外部主设备) input wire lrck, // 字选择时钟 input wire sdata, // 串行数据 output reg [23:0] pcm_data_left, // 并行左声道PCM输出 output reg [23:0] pcm_data_right, // 并行右声道PCM输出 output reg data_valid ); reg [4:0] bit_counter; // 假设接收24位数据,用5位计数器(0-23) reg [23:0] shift_reg; reg lrck_d1; always @(posedge sclk) begin lrck_d1 <= lrck; // 检测lrck边沿,表示一个声道数据开始或结束 if (lrck != lrck_d1) begin bit_counter <= 5'd0; // 开始新的声道数据计数 shift_reg <= 24'd0; data_valid <= 1'b0; end else begin if (bit_counter < 5'd24) begin // 标准IIS模式:第一个SCLK不采样,从第二个开始 if (!(lrck != lrck_d1 && bit_counter == 0)) begin shift_reg[23-bit_counter] <= sdata; // MSB first end bit_counter <= bit_counter + 1; end // 当计数到24位(或配置的字长)时,锁存数据并产生有效信号 if (bit_counter == 5'd23) begin if (lrck_d1 == 1'b0) begin // 根据lrck电平判断声道 pcm_data_left <= shift_reg; end else begin pcm_data_right <= shift_reg; end data_valid <= 1'b1; end end end endmodule此Verilog模块实现了IIS串行数据到并行PCM数据的转换。关键点在于准确处理LRCK边沿后的延迟,并正确计数以捕获完整的数据字。
三、 相关协议对比
IIS常用于芯片间短距离板级通信。其他常见音频协议包括:
- PCM:与IIS类似,但定义更宽泛,LRCK(帧同步FS)信号的位置和极性更灵活,常用于电话系统。
- PDM:使用单线传输1位高速数据流,通过密度表示幅度,常用于数字麦克风,接口更简单但需要后端数字滤波器。
- S/PDIF:一种单线串行传输协议,同时传输音频数据和时钟,并加入纠错和状态信息,用于消费电子设备间长距离数字音频传输。
参考来源
- STM32 使用IIS实现INMP441模块全速音频采样(附python上位机)
- 基于verilog实现IIS音频数据接收
- 音频常用协议说明 IIS TDM PDM PCM SPDIF协议解析
- 【通信协议】I2S/IIS总线介绍
- 音频硬件基础
- 数字音频接口之I2S总线协议详解
