DS90Ux92x FPD-Link III SerDes芯片I2S音频接口配置与调试全指南
1. 项目概述与核心价值
在汽车座舱电子、高端显示屏驱动以及需要长距离、高带宽音视频信号传输的嵌入式系统中,工程师们常常面临一个经典难题:如何在有限的线缆和连接器资源下,同步传输高质量的视频和复杂的多通道音频信号?传统的方案往往需要为音频单独铺设一组LVDS或差分线,这不仅增加了系统成本、布板复杂度和EMC风险,更在信号同步和延迟控制上带来挑战。德州仪器(TI)的DS90Ux92x系列FPD-Link III串行器/解串器(SerDes)芯片,正是为解决这一痛点而生。它巧妙地将I2S数字音频流与RGB视频数据流复用到一对同轴电缆或双绞线上进行传输,实现了真正的“一线通”。
我接触这个系列芯片已经有好几年了,从早期的信息娱乐系统到现在的多屏互动与高级音响系统,DS90Ux92x几乎是高清视频与多声道音频共缆传输的“标配”。其核心价值在于,它不仅仅是一个物理层转换芯片,更在链路层集成了对I2S协议的完整支持,包括时钟恢复、数据缓冲和格式转换。这意味着,作为系统设计者,你无需在SoC端和音频编解码器端之间额外增加复杂的音频桥接或异步采样率转换(ASRC)芯片,大大简化了系统架构。本文将深入拆解DS90Ux92x的I2S音频接口,从协议基础、硬件配置到寄存器级实操,并结合我在多个量产项目中积累的经验,为你呈现一份可直接“抄作业”的详细指南。无论你是正在评估该方案,还是已经进入调试阶段遇到了时钟抖动、通道错位或延迟异常等问题,相信都能在这里找到答案。
2. I2S协议基础与DS90Ux92x的实现框架
在深入芯片配置之前,我们必须对I2S协议本身以及DS90Ux92x如何在其SerDes链路上承载这一协议有一个清晰的认识。很多调试问题根源在于对协议和芯片工作模式理解不透彻。
2.1 I2S协议核心三线制与主从时序
I2S本质上是一个同步串行通信协议,专为传输两路(立体声)PCM音频数据而设计。其基础三线包括:
- 串行时钟(SCK / I2S_CLK):每一位数据的变化都以此时钟为基准。其频率由采样率(fs)、位深(M)和通道数(N)共同决定,计算公式为
I2S_CLK = fs * M * N。例如,对于48kHz采样率、24位位深的立体声(2通道)信号,I2S_CLK = 48k * 24 * 2 = 2.304 MHz。 - 字选择(WS / I2S_WC):用于指示当前传输的是左声道还是右声道数据。通常,WS为低电平时传输左声道,高电平时传输右声道。其频率等于音频采样率(fs)。
- 串行数据(SD / I2S_DATA):承载实际的PCM音频数据,由最高位(MSB)开始传输,在WS边沿后的下一个SCK时钟沿开始有效。
注意:I2S协议的一个关键灵活性在于,发送和接收设备的字长(位深)可以不同。接收端通过检测WS的边沿来识别一个新数据字的开始,并只读取其需要的位数。DS90Ux92x内部缓冲区需要根据你系统的实际位深进行合理配置,否则可能导致数据截断或对齐错误。
DS90Ux92x系列巧妙地将自身嵌入到这个主从架构中。通常,系统中的音频主设备(如应用处理器或音频DSP)产生I2S_CLK和I2S_WC。串行器(Serializer, 如DS90Ux925/927)作为I2S从设备,接收这些时钟信号和音频数据。然后,它将音频数据与视频数据打包,通过FPD-Link III串行链路发送出去。在链路的另一端,解串器(Deserializer, 如DS90Ux926/928)则扮演I2S主设备的角色,它从串行流中恢复出音频数据,并利用其内部的高性能锁相环(PLL)重新生成一个低抖动的I2S_CLK和I2S_WC(以及可选的MCLK),输出给下游的音频从设备(如功放或DAC)。
2.2 FPD-Link III链路上的音频传输模式
这是理解芯片功能的关键。DS90Ux92x提供了两种将I2S数据嵌入到视频流中的方法,选择哪种模式直接影响系统延迟和配置复杂度。
2.2.1 数据岛传输模式(Data Island Transport)这是默认且最常用的模式。在这种模式下,输入的I2S音频样本被缓存在串行器内部的FIFO中。当视频信号进入消隐期(尤其是垂直消隐期V-Blanking)时,这些缓存的音频数据被打包成特殊的“数据岛”包,插入到视频流帧中传输。解串器接收到这些包后,先存入自己的缓冲区,当缓冲区达到半满时,再开始以恢复出的时钟节奏输出I2S数据。
- 优点:对视频时序无侵入性,兼容性最好。音频传输独立于视频有效像素区域,更稳定。
- 缺点:引入了固定的缓冲延迟。典型延迟在100-200微秒之间,具体取决于消隐期长度和I2S_CLK频率。
- 配置关键:此模式对应寄存器
0x12[1] = 0(默认)。同时,为了确保视频数据在消隐期能被正确识别以便插入音频包,通常需要设置0x04[4] = 1(Gate RGB with DE),即让数据使能信号DE来门控RGB数据的有效性。
2.2.2 前向帧传输模式(Forward Channel Frame Transport)这是一种更低延迟但更“激进”的模式。音频数据不再等待消隐期,而是被拆分成更小的块,嵌入到每一个前向通道帧中(每个帧包含视频数据和辅助数据)进行传输。
- 优点:理论上延迟更低,因为音频数据无需等待漫长的垂直消隐期。
- 缺点:占用了原本用于传输视频数据的带宽,可能对视频链路余量有影响。并非所有操作模式都支持此方式(例如环绕声模式仅支持数据岛模式)。
- 配置关键:此模式对应寄存器
0x12[1] = 1。同时,需要设置0x04[4] = 0(Pass RGB independent of DE),以避免视频时序门控对音频数据嵌入造成干扰。
实操心得:在绝大多数汽车座舱应用中,100-200微秒的音频延迟人耳完全无法察觉,且不会造成音画不同步的问题(视频处理流水线通常有数帧延迟)。因此,除非有极苛刻的低延迟要求,否则建议优先使用默认的“数据岛传输模式”。它的配置更简单,系统行为也更可预测。我曾在一个项目中为了追求“理论最低延迟”启用了前向帧模式,结果在视频分辨率切换的瞬间,偶尔会出现音频爆音,排查很久才发现是模式切换时的时序扰动导致的,换回数据岛模式后问题消失。
2.3 多通道扩展与TDM模式
标准I2S一条数据线只能传输两声道(立体声)。为了支持4声道、8声道乃至更多的音频通道,DS90Ux92x提供了两种扩展方式:
多数据线并行:这是最直观的方式。DS90Ux925/926提供2条I2S数据线(I2S_DA, I2S_DB),可支持4声道。DS90Ux927/928则提供4条数据线(I2S_DA, DB, DC, DD),可支持8声道。所有数据线共享同一组I2S_CLK和I2S_WC信号。这种方式硬件连接简单,逻辑清晰,每条数据线独立承载一个立体声流。
时分复用模式:这是更高效利用单一线缆的方式。TDM允许将多个音频通道(如8个)复用到一条I2S数据线上。它通过将I2S_WC的一个周期(对应一个采样周期)划分为多个“时隙”,每个时隙分配给一个音频通道。例如,一个256个I2S_CLK周期的WS周期内,可以用32个时钟周期传输一个24位的通道数据,从而容纳8个这样的通道。
- TDM的优势:在需要传输通道数很多(>8),但SerDes芯片数据线数量有限时,TDM是唯一选择。它可以用最少的物理连线实现多通道传输。
- TDM的挑战:需要音频源和接收端(如DSP和ADC/DAC)都支持相同的TDM格式(时隙数、位宽、对齐方式)。配置不当会导致所有通道数据错乱。DS90Ux92x本身不负责TDM的编解码,它只是透明地传输这条高速串行数据流。因此,确保链路上所有音频设备的TDM格式完全匹配是调试成功的前提。
3. 器件选型与硬件设计要点
不同的DS90Ux92x型号在I2S支持能力上有显著差异,选型错误会导致无法实现预期功能。同时,硬件设计上的疏忽会直接导致信号完整性问题,给调试带来噩梦。
3.1 串行器与解串器型号对照与能力矩阵
首先,必须分清“x”代表的子系列和具体型号后缀。这直接决定了你的音频通道上限。
| 器件型号 | 类型 | I2S数据线数量 | 最大支持音频通道数 (立体声) | 关键特性与区别 |
|---|---|---|---|---|
| DS90UB925 | 串行器 | 2 (DA, DB) | 4 | 基础型号,支持BCC(双向控制通道)。 |
| DS90UH925 | 串行器 | 2 (DA, DB) | 4 | 带HDCP内容保护功能,用于受保护内容传输。 |
| DS90UB927 | 串行器 | 4 (DA, DB, DC, DD) | 8 (或7.1环绕声) | 高端型号,支持最多4条I2S线,是实现环绕声的关键。 |
| DS90UH927 | 串行器 | 4 (DA, DB, DC, DD) | 8 (或7.1环绕声) | 927的HDCP版本。 |
| DS90UB926 | 解串器 | 2 (DA, DB) | 4 | 与925配对,提供MCLK输出。 |
| DS90UH926 | 解串器 | 2 (DA, DB) | 4 | 926的HDCP版本。 |
| DS90UB928 | 解串器 | 4 (DA, DB, DC, DD) | 8 (或7.1环绕声) | 与927配对,支持完整的4线I2S和环绕声模式。 |
| DS90UH928 | 解串器 | 4 (DA, DB, DC, DD) | 8 (或7.1环绕声) | 928的HDCP版本。 |
选型核心原则:
- 通道数需求:如果需要传输超过4个音频通道(即2条立体声流),必须选择927/928配对。925/926最多只支持4通道。
- 内容保护:如果传输的音视频内容需要HDCP加密(如播放蓝光电影),必须选择带“H”后缀的型号(如DS90UH927/928)。
- 功能完整性:只有927/928配对才支持环绕声模式,该模式专门优化了多通道音频的传输。928解串器还提供了额外的控制位,如全局禁用I2S输出 (
0x28[2]) 和辅助I2S通道 (0x28[3]),灵活性更高。
3.2 关键硬件设计注意事项
原理图和PCB设计是保障链路稳定的基石。以下是我在多次硬件调试中总结出的“血泪教训”。
3.2.1 时钟与信号完整性
- I2S_CLK频率限制:文档中明确要求,I2S_CLK频率必须低于
PCLK/2和12.288 MHz两者中的较小值。PCLK是像素时钟。例如,对于720p@60Hz(像素时钟约74.25MHz),PCLK/2约为37MHz,因此12.288MHz是更严格的限制。务必在系统设计初期核算。过高的I2S_CLK会导致数据采样错误。 - MCLK输出:解串器(926/928)可以输出一个独立的MCLK(主时钟),通常为I2S_CLK的整数倍(1x, 2x, 4x),用于驱动需要独立主时钟的音频编解码器。这个时钟由芯片内部的I2S PLL产生,抖动很小(典型值±2ns)。如果下游设备不需要MCLK,可以不连接,但建议在PCB上预留测试点以便调试。
- 端接与布线:虽然I2S是单端信号,但在高速(>6MHz)和长走线情况下,仍需考虑信号完整性。确保时钟线(I2S_CLK, I2S_WC)和数据线(I2S_Dx)长度匹配,避免过大的时序偏移。远离噪声源(如开关电源、高速数字总线)。
3.2.2 电源与去耦
- 模拟电源(AVDD):为芯片内部的PLL和高速模拟电路供电,必须极其干净。建议使用高性能LDO,并在靠近芯片引脚处放置一个1μF的X7R/X5R陶瓷电容和一个10nF的高频去耦电容。
- 数字电源(DVDD, IOVDD):同样需要良好的去耦。特别是IOVDD,它决定了I2S输出信号的电压摆幅,需与接收端逻辑电平匹配(通常为1.8V或3.3V)。
- AC耦合电容:FPD-Link III的串行差分线对(DOUT+/-, RIN+/-)必须串联AC耦合电容,典型值为0.1μF。电容的耐压和材质(建议用C0G/NP0)需仔细选择,其位置应尽可能靠近串行器的输出引脚。
3.2.3 配置引脚与上电时序
- MODE_SEL引脚:这个引脚通过外部分压电阻来配置芯片的初始工作模式,例如视频数据位宽(18-bit vs 24-bit RGB)。重点:如果你计划通过I2C寄存器来动态配置模式(比如在18-bit RGB模式下启用第二路I2S),那么硬件上必须将MODE_SEL配置为“寄存器控制模式”(具体电阻值查数据手册)。如果硬件配置为了24-bit模式,则寄存器无法启用18-bit模式下的额外I2S数据线。
- GPIO/I2S引脚复用:在DS90Ux927/928上,I2S_DC和I2S_DD与GPIO引脚是复用的。默认上电后,它们可能处于GPIO状态。你必须通过寄存器明确地将它们配置为I2S功能,否则音频信号无法输入/输出。这是一个非常常见的疏忽点。
4. 寄存器配置详解与实战步骤
理论清晰后,我们进入实战环节。DS90Ux92x的I2S功能几乎完全通过寄存器控制。以下配置步骤基于最常见的场景:使用DS90UB927+DS90UB928实现4通道音频传输(数据岛模式)。
4.1 基础通信与寄存器访问准备
在操作任何功能寄存器前,确保主控MCU可以通过I2C总线正常访问SerDes芯片。
- 确认I2C地址:查阅芯片数据手册,确认串行器和解串器的I2C从机地址。通常需要通过引脚配置。
- 检查链路锁定:读取解串器的状态寄存器(例如
0x4D),确认LOCK位为1,表示FPD-Link III串行链路已经建立并稳定。在链路未锁定前,配置许多寄存器是无效的。 - 禁用自动加载:为了确保配置的确定性,建议在解串器端禁用从串行器自动加载配置的功能。设置解串器寄存器:
0x22[7] = 1:禁用对Data Path Control 1寄存器的自动加载。0x28[7] = 1:禁用对Data Path Control 2寄存器的自动加载(仅928有此寄存器)。 这样,我们就可以独立地配置解串器,避免因串行器配置未完成而导致的冲突。
4.2 配置4通道音频传输(DS90UB927 -> DS90UB928)
目标:使用I2S_DA和I2S_DB两条数据线,传输4通道音频(2组立体声)。采用默认的数据岛传输模式。
步骤一:配置串行器(DS90UB927)
启用第二路I2S数据线(I2S_DB):
- 寄存器
0x12(Data Path Control 1) Bit[3] (I2S Channel B Enable Override): 设置为1。这意味着我们将通过寄存器(而不是MODE_SEL引脚)来控制第二路I2S的使能。Bit[0] (I2S Channel B Enable): 设置为1。使能I2S_DB通道。- 操作:向地址
0x12写入值0x09(二进制0000 1001)。
- 寄存器
确保为数据岛传输模式:
- 寄存器
0x12(Data Path Control 1) Bit[1] (I2S Transport Select): 确保为0(默认值)。0 = 数据岛传输,1 = 前向帧传输。- 由于我们只改了Bit3和Bit0,Bit1默认是0,所以这步通常无需额外操作,但读取确认一下是好习惯。
- 寄存器
配置视频数据门控(关键!):
- 寄存器
0x04(Port Configuration) Bit[4] (DE_GATE): 设置为1。这会使能数据使能信号DE对RGB数据的门控。在数据岛模式下,这有助于芯片准确识别视频消隐期,从而插入音频数据包。- 操作:假设其他位保持默��,向地址
0x04写入值0x10。
- 寄存器
步骤二:配置解串器(DS90UB928)
本地配置使能(如果之前没做):
- 寄存器
0x22(Data Path Control 1 - Des) Bit[7]: 设置为1,禁用自动加载,使用本地配置。- 寄存器
0x28(Data Path Control 2 - Des) Bit[7]: 设置为1,禁用自动加载,使用本地配置。
- 寄存器
镜像串行器的I2S通道配置:
- 寄存器
0x22 - 我们需要让解串器知道它应该输出两路I2S数据。
Bit[3]: 设置为1(Override)。Bit[0]: 设置为1(Enable Channel B)。- 操作:向地址
0x22写入值0x89(二进制1000 1001)。注意Bit7我们之前已设为1。
- 寄存器
(可选)配置MCLK输出:
- 假设我们需要为外部音频DAC提供一個256fs的MCLK(例如,对于48kHz系统,MCLK=12.288MHz)。
- 寄存器
0x3A(MCLK Frequency Select) Bit[7]: 设置为1,使能MCLK分频器覆盖。Bit[6:4] (MDIV): 设置分频系数。我们需要MCLK = 2 x I2S_CLK。查表可知,MDIV=2对应Bit[6:4] = 100或101。- 操作:向地址
0x3A写入值0x90(二进制1001 0000, 即Bit7=1, Bit[6:4]=100)。 - 寄存器
0x2B(I2S Control) - 确保
Bit[6] (I2S PLL Enable)为0(默认),使能I2S PLL以清洁时钟抖动。
步骤三:系统检查与验证
- 物理连接:确保音频源(如SoC)的I2S_CLK, I2S_WC, I2S_DA, I2S_DB正确连接到串行器的对应引脚。
- 上电与初始化:按顺序给系统上电。先给SerDes芯片供电,稳定后再启动音频源和视频源。
- 测量与观测:
- 用示波器测量解串器输出的I2S_CLK和I2S_WC,确认频率和波形正确(无过冲、振铃)。
- 测量MCLK输出(如果启用),确认频率符合预期。
- 在I2S_DATA线上,观察是否有随音频信号变化的串行数据。
- 连接音频接收端(如功放),播放测试音,验证所有通道发声正常且没有杂音。
4.3 环绕声模式(8通道)配置要点
环绕声模式是DS90Ux927/928独有的高级功能,用于传输5.1或7.1声道音频。其配置逻辑与多通道类似,但有特殊要求:
- 强制数据岛模式:在环绕声模式下,前向帧传输模式不可用。必须使用数据岛模式。因此需确保
0x12[1]=0,且0x04[4]=1。 - 启用环绕声模式:
- 在串行器(927)上,设置寄存器
0x1A[0] = 1。这个操作会自动启用所有四条I2S数据线(DA, DB, DC, DD)。这意味着,即使你之前没有单独配置0x12[3]和0x12[0],这些线也会被激活用于音频传输。
- 在串行器(927)上,设置寄存器
- 解串器配置:在解串器(928)上,同样需要设置
0x28[0] = 1来启用环绕声模式,并确保0x22[7]=1进行本地配置。 - GPIO引脚冲突:由于I2S_DC和DD与GPIO复用,一旦启用环绕声模式,这两个引脚将无法作为通用GPIO使用。如果你的硬件设计将它们用于其他功能(如控制背光),需要在软件初始化序列中注意配置顺序,避免启动瞬间的冲突。
注意事项:环绕声模式对链路稳定性要求更高,因为数据量更大。务必确保FPD-Link III链路的信号质量(眼图)良好,电源噪声低。建议在启用环绕声前,先以立体声或4通道模式完成基础链路调试。
5. 典型问题排查与调试技巧
即使按照手册配置,在实际调试中仍会遇到各种问题。以下是几个最常见的问题场景和我的排查思路。
5.1 问题一:完全无音频输出
- 现象:视频显示正常,但解串器后端的音频设备无声。
- 排查步骤:
- 查电源与复位:测量SerDes芯片的所有电源引脚电压是否稳定且在容差范围内。检查复位信号是否已释放。
- 查I2C通信:用逻辑分析仪或示波器抓取I2C总线,确认能成功读写芯片寄存器,且写入的值正确。一个常见错误是I2C地址不对,或上拉电阻值不合适导致波形畸变。
- 查链路锁定:读取解串器状态寄存器(如
0x4D),确认LOCK位为1。如果未锁定,检查串行差分线对是否连接正确、AC耦合电容是否焊接、线缆是否完好。 - 查时钟与使能:
- 用示波器测量串行器端的I2S_CLK和I2S_WC输入是否存在,频率是否符合预期。
- 检查解串器端的I2S_CLK和I2S_WC输出是否存在。如果没有,检查解串器的I2S PLL是否使能(
0x2B[6]=0)。 - 确认I2S通道已使能(如
0x12[0]=1,0x22[0]=1)。
- 查模式配置:确认芯片未处于向后兼容模式。向后兼容模式下I2S功能是禁用的。检查相关配置引脚或寄存器。
5.2 问题二:音频有周期性“咔嗒”声或断音
- 现象:音频能播放,但伴随规律的噪声或中断。
- 排查步骤:
- 查缓冲区与延迟:这通常是数据岛模式下的缓冲区上溢或下溢的典型症状。原因可能是音频主从设备时钟不同步的累积误差。
- 检查I2S_CLK频率是否严格符合公式
fs * M * N。用高精度频率计测量。 - 尝试微调音频源的时钟精度(如果可能)。
- 最有效的办法:在解串器端,尝试调整其内部音频缓冲区的读取策略(如果芯片支持)。对于DS90Ux92x,主要是确保视频时序稳定,为数据岛提供足够长的消隐期。
- 检查I2S_CLK频率是否严格符合公式
- 查电源噪声:用示波器探头(带宽足够)的AC耦合档,观察芯片的模拟电源(AVDD)和数字电源(DVDD)引脚,看是否有与“咔嗒”声同频率的噪声毛刺。如有,加强电源滤波。
- 查地平面:确保音频部分(SerDes和音频编解码器)有完整、单一的地平面,避免数字噪声串扰到模拟/音频地。
- 查缓冲区与延迟:这通常是数据岛模式下的缓冲区上溢或下溢的典型症状。原因可能是音频主从设备时钟不同步的累积误差。
5.3 问题三:只有部分声道有声音(例如,4通道中只有2通道响)
- 现象:配置了多通道,但只有I2S_DA对应的两个声道有声音,I2S_DB无声。
- 排查步骤:
- 查寄存器配置:这是最高发的原因。反复确认串行器和解串器上关于第二路I2S(Channel B)的使能位是否都已正确设置。对于925/926,需要同时设置
0x12[3]=1和0x12[0]=1。对于927/928,在非环绕声模式下也是如此。 - 查硬件连接:检查I2S_DB对应的输入/输出引脚是否虚焊,走线是否损坏。用示波器对比测量I2S_DA和I2S_DB在串行器输入端的信号,看数据是否不同。
- 查视频模式:对于DS90Ux925/926,有一个关键限制:第二路I2S(I2S_DB)仅在18-bit RGB视频模式下可用!如果你配置了24-bit RGB模式,I2S_DB在硬件上是无效的。检查MODE_SEL引脚配置或寄存器
0x12[2]是否设置为18-bit模式。 - 查引脚复用:对于927/928,检查I2S_DB、DC、DD引脚是否被错误地配置为了GPIO模式。确保相关寄存器(如GPIO控制寄存器)已将其设置为I2S功能。
- 查寄存器配置:这是最高发的原因。反复确认串行器和解串器上关于第二路I2S(Channel B)的使能位是否都已正确设置。对于925/926,需要同时设置
5.4 问题四:TDM模式数据错乱
- 现象:使用单根I2S数据线传输TDM格式的多通道数据,下游设备收到的所有通道数据都是错误的。
- 排查步骤:
- 格式严格匹配:这是TDM调试的核心。逐项核对音频发送端(DSP)、SerDes链路、音频接收端(DAC)三者的TDM配置:时隙数、每个时隙的位宽、数据对齐方式(左对齐、右对齐、I2S格式)、WS脉冲宽度。必须完全一致。SerDes是透明传输,它不纠正格式。
- 用逻辑分析仪抓取:在串行器的I2S数据输入引脚和解串器的I2S数据输出引脚,分别用逻辑分析仪(带I2S/TDM解码功能)抓取波形。对比两者,看数据是否在传输过程中发生了任何变化。如果输入正确但输出错误,检查SerDes的I2S时钟沿采样配置(
0x2B[0]),尝试切换上升沿或下降沿采样。 - 检查WS/I2S_WC关系:确认TDM格式下的WS信号是否符合芯片的识别要求。有些TDM格式使用一个脉冲来标识帧开始,而DS90Ux92x可能期望一个标准的50%占空比方波。查阅芯片数据手册中对I2S_WC的时序要求。
调试是一个系统工程,从电源、时钟、配置到信号质量,需要一步步缩小范围。养成先查配置、再测信号、最后分析数据的习惯,能帮你快速定位绝大多数问题。对于DS90Ux92x这类复杂SerDes芯片,准备一个能可靠抓取I2C和I2S波形的逻辑分析仪,是提高调试效率的必备工具。