当前位置: 首页 > news >正文

IIS音频协议核心技术

IIS(Inter-IC Sound,也常写作 I2S)是一种由飞利浦公司(现恩智浦)制定的数字音频串行接口标准,专门用于在集成电路之间传输高质量的数字音频数据。它广泛应用于音频编解码器(CODEC)、数字信号处理器(DSP)、微控制器(如STM32)和现场可编程门阵列(FPGA)等设备间的音频数据传输。

一、 IIS协议核心详解

IIS协议主要定义了音频数据的传输时序和信号线,其核心设计目标是简化音频数据的串行传输,并实现左右声道的分离。

1. 基本信号线

一个完整的IIS接口通常包含以下三根核心信号线(有时会增加一根主时钟线):

信号线名称全称方向描述
SCLK/BCLKSerial Clock / Bit Clock主->从位时钟,用于同步每一位数据的传输。其频率 = 采样频率 × 位数 × 声道数。
LRCK/WSLeft/Right Channel Clock / Word Select主->从声道选择时钟(字选择)。用于指示当前传输的是左声道(通常为低电平)还是右声道(通常为高电平)数据。其频率等于音频采样频率。
SDSerial Data双向串行音频数据。音频数据以二进制补码形式,最高位(MSB)在前进行传输。
MCLKMaster 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负担并确保实时性。

关键配置步骤:

  1. 初始化IIS外设:配置IIS为主模式发射器(若驱动扬声器)或接收器(若接收麦克风数据)。设置数据格式(16/24/32位)、音频采样率(如16kHz)、时钟极性等。
  2. 配置DMA:将IIS的数据寄存器与一个内存缓冲区通过DMA通道关联。设置为循环模式,使得缓冲区填满后自动从头开始,实现连续采集。
  3. 使能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音频数据。

核心设计思路:

  1. 时钟域处理:IIS的SCLK和LRCK通常由外部主设备提供,属于FPGA的外部异步时钟。需要使用寄存器进行同步处理,避免亚稳态。
  2. 数据恢复:在Verilog中,通常检测SCLK的边沿(如上升沿),并在该时刻对SD数据进行采样。
  3. 串并转换与对齐:根据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总线协议详解
http://www.jsqmd.com/news/738911/

相关文章:

  • CSS 终极指南:5 种水平垂直居中的完美方案
  • 3步永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失终极指南
  • 03-判断语句
  • 如何永久保存微信聊天记录?WeChatMsg为你打造个人专属的数字记忆库
  • Ubuntu Server 24.04 安装todesk【先联网】
  • 教育科技产品集成多模型AI能力时的Taotoken接入方案
  • JavaScript 柯里化:把“大餐”拆成“小炒”的艺术
  • 不止是关灯:H3C NX30 Pro+OpenWrt的LED玩法,还能当状态指示灯用
  • 教育机构构建AI辅助教学系统时利用Taotoken实现多模型调度与成本控制
  • Honey Select 2完整优化指南:200+插件一键安装免费增强游戏体验
  • 告别重复点击!MouseClick鼠标连点器:3分钟掌握自动化神器
  • 手把手图解:用Python从零实现Lloyd-Max量化器,并可视化它与均匀量化的效果差异
  • 别再死记硬背命令了!用eNSP模拟真实企业网,手把手带你搞懂RIP和OSPF到底怎么选
  • 即梦AI视频怎么去水印?2026年去除水印方法和工具全盘点 - 科技热点发布
  • 轻量化扩散模型LongCat-Image:手机端高效图像生成方案
  • SAP MM ERS自动清账实战:手把手教你配置采购信息记录和供应商主数据(避坑日期问题)
  • NISQ时代量子电路优化技术与实践
  • TlbbGmTool天龙八部GM工具使用指南:从零开始掌握游戏数据管理
  • 多语言日期处理技术:标准化与LLM时间推理
  • 如何配置PotPlayer字幕实时翻译插件实现双语观影体验
  • 舞蹈动作生成评估:生物力学约束与时序分析
  • I2C上拉电阻如何选型
  • 即梦怎么去水印?2026 最全去水印手机方法和工具盘点 - 科技热点发布
  • 天赐范式第29天:算子流重构全息经济学——从美联储加息到个人消费的全链路白盒推演
  • 如何免费快速下载百度网盘文件?8大网盘直链解析终极指南
  • WEAVE项目:多模态上下文交织理解与生成新基准
  • DDrawCompat完整指南:如何在Windows 11上轻松修复经典游戏兼容性
  • Scroll Reverser完整指南:为macOS设备设置独立滚动方向的最佳方案
  • 基于MCP协议的PDF文本提取服务:从原理到工程实践
  • 避开这3个坑,轻松下载NREL Wind Toolkit风速数据(新手避雷指南)