1. 项目概述与核心价值
在嵌入式视频系统,尤其是汽车座舱、工业控制面板或者医疗显示设备里,工程师们常常面临一个头疼的问题:如何把主处理器生成的高清视频、多声道音频以及一堆控制信号,稳定可靠地送到几米甚至十几米开外的显示屏上?传统的并行RGB接口线缆又粗又硬,抗干扰差,走线困难,而标准的HDMI接口虽然通用,但其协议复杂、功耗高,且不适合严苛的电磁环境。这时候,像德州仪器(TI)的FPD-Link III这类专用高速串行解串(SerDes)技术就成了救星。DS90UH949A-Q1正是这个技术家族中的一员“悍将”,它本质上是一个高性能的串行器(Serializer),专门负责把并行的视频、音频和控制数据“打包”成高速串行差分信号,通过一对或两对双绞线就能传出去,极大简化了系统设计。
我自己在多个车载中控屏项目里都用过这颗芯片。它的核心价值远不止是“把线变少”。它内置了完整的HDMI/DVI接收功能,可以直接对接标准的HDMI信号源;它预烧录了EDID,免去了外挂EEPROM的麻烦;它支持HDCP 1.4内容保护,能满足版权视频播放的需求;它还提供了丰富的音频接口(I2S/TDM)、灵活的GPIO和SPI控制通道,以及强大的内置自测试(BIST)功能。可以说,这是一颗为嵌入式高清视频传输量身定制的“全能型”接口芯片。理解它的工作原理和配置细节,对于设计稳定、高性能的远程显示系统至关重要。接下来,我就结合手册和实际调试经验,把它掰开揉碎了讲清楚。
2. 核心架构与数据流拆解
要玩转DS90UH949A-Q1,首先得在脑子里建立起它的数据流全景图。这颗芯片不是一个简单的电平转换器,而是一个复杂的协议转换与信号处理中心。
2.1 FPD-Link III链路本质:不止是串行化
很多人会把FPD-Link III简单理解为“把28根线变成1对线”。这说法对,但不全对。它的核心是在单一差分对上,通过高速串行流,同时传输前向通道(Serializer到Deserializer)和后向通道(Deserializer到Serializer)的数据。
前向通道(High-Speed Forward Channel):这是数据的大动脉。在每个像素时钟周期内,芯片会将多达35比特的数据封装成一帧进行发送。这35比特里都装了啥?不仅仅是RGB像素数据(通常24位),还包括行场同步信号(HSYNC, VSYNC)、数据使能(DE)、音频数据包(如果采用HDMI模式下的Data Island传输)、I2C通信数据、HDCP加密流以及4位通用GPIO的状态。手册里提到的最高3.675 Gbps的串行速率,就是针对这个通道的。为了实现长距离可靠传输,数据在发送前经过了随机化、DC平衡和加扰处理。随机化打散数据中的长串0或1,避免能量集中在某个频点;DC平衡确保信号直流分量稳定,方便接收端交流耦合;加扰则进一步降低电磁干扰(EMI)。这是FPD-Link III在汽车电子这种恶劣EMC环境下依然稳定的关键。
后向通道(Back Channel):这是链路的“神经网络”,负责双向通信。它以前向通道的“搭便车”方式存在,速率较低(5, 10或20 Mbps可配置),但作用巨大。后向通道承载着I2C控制命令、HDCP认证信息、CRC校验码以及另外4位GPIO的状态。这意味着,主机可以通过I2C,经过串行器、链路、解串器,最终访问到显示屏端的DDC存储器(如EDID)或其他I2C设备,实现了完整的双向控制。
2.2 与HDMI/DVI接口的对接:角色转换
DS90UH949A-Q1的输入端是一个标准的HDMI/DVI接收器。这意味着它可以直连SoC或FPGA的HDMI输出端口。
- HDMI模式:在此模式下,芯片会解析HDMI信号中的TMDS(最小化传输差分信号)数据流,提取出视频数据、音频数据包(存储在消隐期)以及CEC、DDC等控制信号。音频可以按HDMI规范打包传输,也可以在解串器端转换为I2S或TDM格式输出。
- DVI模式:此模式下仅传输视频数据。如果系统需要音频,则需要利用芯片的独立I2S音频接口(I2S_D[A..D])输入多声道音频,并将其嵌入到FPD-Link III的帧结构中传输。
- 关键信号引脚:
- TMDS Clock (25-105 MHz):决定视频像素时钟。单链路模式支持25-105 MHz,对应常见的480p到720p/1080i分辨率。双链路模式可支持更高时钟。
- DDC (I2C):用于读取EDID。芯片内部预编程了256字节的EDID,上电后加载到SRAM,可通过此接口被源端读取。
- HPD (Hot Plug Detect):这是一个由显示屏端(Sink)控制的关键信号。源端(Serializer)先提供5V电源,显示屏准备好后,会释放HPD信号(拉高),告知源端可以开始发送视频信号。调试时如果点不亮屏,首先就要查HPD信号的电平状态。
- CEC:消费电子控制总线,用于设备间联动。芯片支持使用外部时钟或内部25MHz振荡器来实现CEC协议。
2.3 内部预编程EDID:开箱即用的兼容性
手册中花了很大篇幅列出了一个256字节的EDID数据块。这个内置的EDID是个非常实用的功能。它定义了一个通用的显示能力,支持480p、720p等基本视频格式和2声道音频。对于大多数嵌入式显示屏,这就足够了,省去了额外设计EEPROM电路和编程的步骤。
实操心得:虽然内置EDID方便,但在定制化项目中,如果显示屏有特殊的时序或分辨率需求,就需要通过I2C总线重写内部的EDID SRAM。注意,这个SRAM是易失性的,每次上电会从内部eFuse重新加载默认值。如果需永久更改,需要联系TI支持,他们可能在生产时为你烧录定制的eFuse镜像,但这通常涉及最小订单量和额外成本。因此,在项目初期就要明确显示需求。
3. 关键功能模块深度配置指南
理解了架构,我们深入到几个最容易出问题也最强大的功能模块,看看具体怎么配置。
3.1 音频子系统:I2S、TDM与HDMI音频的抉择
音频处理是DS90UH949A-Q1的一大亮点,支持模式多,配置不当容易导致无声或杂音。
1. 工作模式选择:
- HDMI嵌入式音频:最简单。直接将HDMI源(如处理器)的音频包透传过去。在解串器端,需要通过配置将其提取到I2S引脚或转换为TDM格式。
- DVI + 独立I2S:当视频源是DVI或只有并行RGB时使用。你需要外接音频编解码器,将I2S信号输入到串行器的
I2S_D[A..D]、I2S_CLK、I2S_WC引脚。 - AUX音频通道:这是一个独立的附加音频流,与主音频流分开,通过GPIO[1:0]复用。适用于需要传输系统提示音等次要音频的场景。
2. I2S传输模式与“Surround Sound”陷阱:I2S数据有两种方式在链路上传输:
- 数据岛传输(Data Island Transport):默认模式。音频数据被封装成数据包,在视频的消隐期传输。这是支持多声道“环绕声”(Surround Sound,使用全部4个I2S_Dx引脚)的唯一模式。此模式支持HDCP加密。
- 前向通道帧传输(Forward Channel Frame Transport):将I2S数据直接嵌入到前向通道的35比特帧中。这种方式延迟更低,但只能使用I2S_DA(和I2S_DB,当对接DS90UH926Q-Q1解串器时),且不支持HDCP音频加密。
这里有个大坑:手册提到,当与老款解串器DS90UH926Q-Q1配对且使用24位视频时,如果使能了I2S环绕声模式,串行器会自动降级到18位视频传输!因为926Q在24位模式下无法接收超过2声道的音频。解决方法是:如果你需要24位色深,必须通过写寄存器0x1A[0]=0来禁用I2S环绕声模式。
3. TDM模式配置:当需要传输超过2个声道的音频时,TDM是更高效的选择。它通过一根数据线,分时复用多个声道。配置TDM的关键是理解帧结构:
I2S_WC(字选通)的周期定义了TDM帧长。I2S_CLK(位时钟)的频率和I2S_WC的周期共同决定每个声道可分配的比特数。 例如,如果I2S_WC周期 = 256 *I2S_CLK周期,那么一帧可以容纳8个声道32位,或者4个声道64位。你需要根据音频编解码器的要求,精确配置芯片内部的TDM格式寄存器(通常通过间接寄存器访问),确保声道顺序、对齐方式匹配。
3.2 控制与通信:I2C、SPI与GPIO的灵活运用
芯片提供了丰富的控制接口,理解其层次关系很重要。
1. I2C主从与端口选择:DS90UH949A-Q1有两个独立的FPD-Link III下行端口(Port0, Port1)。因此,很多控制寄存器有两套。
TX_PORT_SEL寄存器:这是访问端口特定寄存器的钥匙。通过设置TX_PORT0_SEL或TX_PORT1_SEL位,你可以选择读写哪个端口的寄存器。如果两位都置位,则访问Port1。写操作时,如果两位都置位,可以同时写入两个端口,方便批量配置。PORT1_I2C_EN位:这是一个更高级的功能。使能后,芯片会响应第二个I2C从机地址。这意味着你的主控制器可以用两个不同的I2C地址,分别访问Port0和Port1的寄存器集,逻辑上更清晰。此时,TX_PORT_SEL寄存器会被忽略。
2. 高速SPI控制通道:这是FPD-Link III的一个高级特性,允许在视频链路之外,开辟一个专用的高速SPI通道,用于传输其他数据(如触摸屏数据、传感器数据)。
- 方向:分为前向(SPI主设备在串行器端)和反向(SPI主设备在解串器端)。方向由解串器的
HSCC_MODE寄存器配置。 - 速率不对称性:非常重要!前向SPI(主在Serializer)的速率可以很高,因为数据流向与视频一致。但反向SPI(主在Deserializer)的读操作速率受限于链路往返延迟,必须降低SPI时钟频率。手册强调,SPI不能用于访问串行器/解串器本身的配置寄存器,那是I2C的活。SPI通道是给用户自定义数据传输用的。
- SS信号释放时间:在反向SPI模式下,SPI片选(SS)信号在无效后,必须保持高电平至少一个后向通道帧周期(根据BC频率,为1.875µs到7.5µs)。不遵守这个时序会导致数据丢失。
3. GPIO与D_GPIO配置:芯片提供了多达8个GPIO(GPIO[3:0]和GPIO_REG[8:5]),功能极其灵活。
- GPIO[3:0]:可以配置为前向通道输出(控制解串器端设备)或后向通道输入(读取解串器端状态)。具体配置在寄存器
0x0D-0x0F。 - D_GPIO[3:0]:这是GPIO[3:0]在双链路模式下的高速版本,采样率更高。其有效频率取决于后向通道速率和
HSCC_MODE。例如,在HSCC_MODE=001(快速模式)且后向通道20Mbps时,D_GPIO0的有效采样率可达2MHz!这对于传输脉冲信号非常有用。 - GPIO_REG[8:5]:这是纯寄存器映射的GPIO,状态不通过链路传输,仅用于本地控制或状态读取。它们与I2S引脚复用,配置为GPIO模式时会覆盖I2S功能。
配置示例:将GPIO0配置为后向通道输入(读取远端按钮状态)
- 确定操作哪个端口(假设Port0)。设置
TX_PORT_SEL寄存器,仅置位TX_PORT0_SEL。- 配置GPIO0控制寄存器:向地址
0x0D写入值0x05(二进制0101)。[3:0]=0101表示后向通道输入模式。- 读取GPIO状态:读取寄存器
0x1C,其bit 0 (0x1C[0]) 就反映了GPIO0(后向通道)的输入电平。
3.3 链路诊断与测试:BIST功能实战
内置自测试(BIST)是调试和生产的利器。它能在不接视频源和显示屏的情况下,验证FPD-Link III链路本身的完整性。
BIST工作流程:
- 启动:在解串器端,通过拉高
BISTEN引脚或配置相应寄存器,使能BIST模式。解串器会通过后向通道通知串行器。 - 同步:关键一步!手册明确指出,在解串器使能BIST后,需要在串行器本地通过I2C操作寄存器
0x04[5],先置1再清0,进行一次触发。很多工程师忘了这一步,导致BIST无法启动。 - 测试:串行器内部生成一个全零测试图案,经过加扰、平衡后发送。解串器接收后,与预期的全零图案对比。
- 结果指示:
- 实时指示:解串器的
PASS引脚会在测试期间动态反映错误。每检测到一个帧错误,PASS引脚就会拉低半个像素时钟周期。用示波器观察这个引脚,可以看到脉冲式的错误指示。 - 最终结果:测试结束后(
BISTEN拉低),PASS引脚电平锁存。高电平=测试通过(无错误);低电平=测试失败(有错误)。这个状态会保持到下一次BIST或断电。
- 实时指示:解串器的
如何人为制造错误以测试BIST?在实验室,你可以通过以下方式验证BIST的敏感性:
- 大幅度增加电缆长度(接近或超过规格书极限)。
- 在差分线上并联电容或对地接电阻,恶化信号质量。
- 降低解串器端的接收均衡(Rx Equalization)强度。
前后向通道错误检查:BIST不仅检查前向通道(视频数据),也检查后向通道的CRC错误。后向通道的CRC错误会计数在解串器的一个8位寄存器中。这有助于诊断双向通信的可靠性。
4. 电源、复位与故障排查
4.1 上电时序与掉电控制(PDB)
PDB引脚是芯片的总开关,控制不当会导致启动失败或损坏。
- 上电顺序:必须确保所有电源(如VDDIO, VDD)都稳定达到最终电压后,才能将
PDB引脚拉高。通常的做法是使用电源管理芯片的Power Good信号来驱动PDB,或者利用VDDIO通过RC电路延时上拉(如手册建议的10kΩ上拉电阻和>10µF对地电容)。 - 掉电与复位:拉低
PDB会关闭芯片并复位所有控制寄存器到默认值。拉低时间必须至少维持3ms,以确保完全复位。在需要软件复位整个链路时,操作PDB引脚是最彻底的方法。
4.2 链路故障检测(Link Fault Detect)
芯片能自动检测7种常见的链路故障:
- 电缆开路
- DOUT+与DOUT-短路
- DOUT+对地短路
- DOUT-对地短路
- DOUT+对电池(高压)短路
- DOUT-对电池(高压)短路
- 电缆接反(DOUT+/-反接)
检测结果体现在寄存器0x0C的bit 0(Link Detect Status)。但请注意,它只报告“链路故障”这个状态,而不会具体指出是7种中的哪一种。定位具体故障仍需依靠示波器测量差分信号幅度、共模电压等。
4.3 中断系统(INTB和REM_INTB)
中断引脚INTB(低有效)用于通知主控制器发生事件。
- 本地中断:如芯片内部错误。
- 远程中断:更常用。当解串器端的
INTB_IN引脚被拉低(例如,由显示屏板的某个芯片触发),这个中断信号会通过后向通道传递到串行器,并导致串行器的INTB引脚拉低。 - 配置流程:
- 使能远程中断:设置串行器寄存器
0xC6[5] = 1(使能远程中断传递)和0xC6[0] = 1(使能INTB引脚输出)。 - 远端设备拉低解串器的
INTB_IN。 - 串行器
INTB引脚变低。 - 主机MCU检测到
INTB低电平,通过I2C读取串行器的中断状态寄存器(如HDCP_ISR)来确定中断源。读取操作会清除串行器侧的中断标志,INTB引脚随之��放(变高)。 - 主机MCU还需通过I2C访问远端设备(经解串器),清除其触发中断的原因,使解串器的
INTB_IN引脚释放。系统等待下一次中断。
- 使能远程中断:设置串行器寄存器
REM_INTB引脚则直接镜像解串器INTB_IN引脚的状态,无需清除,可用于简单的状态监控。
5. 高级功能与调试技巧
5.1 内部图案生成器(Pattern Generator)
这个功能在屏厂调试或系统自检时非常有用。它可以在无视频输入的情况下,让显示屏显示特定的测试图案,快速判断链路和屏体是否正常。
- 模式选择:有17种预设图案(如全白、全红、颜色渐变、棋盘格、彩条等)和1种用户自定义颜色图案。通过
PGCTL寄存器选择。 - 颜色深度:支持24位和18位模式(18位模式下,每种颜色低2位强制为0)。
- 时序源:
- 外部时序:芯片检测输入视频的DE/HS/VS信号,并依此生成图案。即使输入无信号,只要有时钟,也能根据检测到的空白期确定帧率。
- 内部时序:完全由寄存器配置生成视频时序,可用于独立测试。
- 自动滚动:可以配置一个最多包含16种图案的序列,让屏幕自动循环播放,方便全面检测。
调试技巧:当系统点不亮屏时,可以首先启用内部图案生成器(使用内部时序)。如果屏能显示测试图案,说明FPD-Link III链路和显示屏本身是好的,问题出在视频源或输入接口部分。如果仍无显示,则问题很可能在链路、解串器或屏的驱动板上。
5.2 HDCP内容保护
对于需要播放版权内容的设备,HDCP是必须的。DS90UH949A-Q1集成HDCP 1.4加密引擎。
- 密钥存储:HDCP密钥由TI在生产时直接烧录到芯片内部的NVM中,无法从外部读取或修改,安全性高。
- 认证流程:认证和密钥交换通过嵌入在前/后向通道中的HDCP控制通道自动完成,对用户透明。
- 音频加密:需要注意,只有采用“数据岛传输”模式的HDMI嵌入式音频才会被加密。通过“前向通道帧传输”的I2S音频不会被加密。设计时需要根据内容来源的版权要求选择合适的音频传输模式。
5.3 向后兼容性
DS90UH949A-Q1可以与老款的FPD-Link III解串器(如DS90UH926Q-Q1)协同工作,在TMDS时钟25-85 MHz范围内自动降级为单链路模式。无需额外配置,提高了系统设计的灵活性。
6. 常见问题排查与实战心得
以下是我在项目中总结的一些典型问题及解决方法,手册里不一定有:
问题1:系统上电后,显示屏无任何显示,HPD信号已经为高。
- 排查步骤:
- 查电源和PDB:测量芯片所有电源引脚电压是否正常稳定。确认
PDB引脚时序,是否在所有电源稳定后才拉高。 - 查参考时钟:测量TMDS输入时钟是否正常,频率是否在25-105 MHz范围内。
- 查链路锁定:通过I2C读取串行器的状态寄存器(如
0x0C),检查链路检测状态位是否为1。同时读取解串器端的LOCK引脚或状态寄存器,确认链路已同步。 - 启用BIST:使用BIST功能测试链路物理层是否正常。如果BIST失败,检查电缆、连接器,以及串行器/解串器的配置(如是否为相同的链路模式、速率)。
- 启用内部图案:如果BIST通过但仍无显示,启用内部图案生成器。如果图案能显示,问题在视频源或输入接口配置(如颜色格式、同步极性)。如果图案也不能显示,重点检查解串器输出端到显示屏的电路。
- 查电源和PDB:测量芯片所有电源引脚电压是否正常稳定。确认
问题2:音频输出有噪声或完全无声。
- 排查步骤:
- 确认模式:首先确认系统工作在HDMI音频模式还是DVI+I2S模式。配置错误是无声的最常见原因。
- 检查I2S时钟:精确测量
I2S_CLK和I2S_WC的频率和相位关系,确保符合音频编解码器要求。参考手册中的表格,核对采样率、位宽与时钟频率是否匹配。 - 检查环绕声模式:如果使用多声道且视频是24位,确认是否错误使能了环绕声模式导致视频被降为18位。检查寄存器
0x1A[0]。 - 检查传输模式:确认音频是通过“数据岛”还是“前向通道帧”传输。如果是前者,检查解串器端是否正确配置了音频提取;如果是后者,确认使用的数据引脚(I2S_DA等)是否正确。
- 测量模拟地:音频噪声往往与地平面干扰有关。确保音频编解码器的模拟地与SerDes芯片的数字地之间采用单点连接,并检查电源去耦。
问题3:I2C访问远端显示器EDID失败。
- 排查步骤:
- 检查HPD:确保HPD信号已由显示屏端拉高,这是源端发起DDC通信的前提。
- 检查内部/外部EDID:确认串行器是否被配置为使用内部EDID(上电默认)。如果你外挂了EEPROM,需要配置寄存器切换EDID源。
- 检查I2C上拉电阻:DDC总线需要上拉电阻(通常3.3kΩ-10kΩ)到3.3V。确保电阻值合适,且电源正常。
- 用逻辑分析仪抓包:这是最直接的方法。抓取串行器输入端的I2C波形,看读EDID的命令(0xA1)是否发出,以及是否有ACK响应。如果没有响应,可能是链路后向通道不通,或者显示屏的DDC接口有问题。
问题4:GPIO控制不响应。
- 排查步骤:
- 确认方向:再次核对寄存器配置,GPIO[3:0]是配成了前向输出还是后向输入?方向配反了肯定没反应。
- 确认端口:如果你使用了双端口芯片,是否通过
TX_PORT_SEL或第二个I2C地址选对了要操作的端口? - 对于后向GPIO:确认链路已建立。后向GPIO的状态是通过后向通道传输的,如果链路没锁住,状态无法更新。
- 对于D_GPIO:确认芯片工作在双链路模式(2-lane),并且后向通道频率和
HSCC_MODE配置正确,否则D_GPIO可能无法工作。
设计心得:
- 电源去耦是生命线:每个电源引脚(特别是高速模拟电源)都必须紧贴芯片放置一个0.1µF和一个1-10µF的陶瓷电容。这是保证信号完整性的基础。
- 差分走线要严格:DOUT+/DOUT-差分对必须等长、等距、紧密耦合,阻抗控制到100Ω。避免在差分线附近走高速数字线。
- 重视ESD保护:HDMI接口和FPD-Link输出接口都是对静电敏感的部位,必须添加TVS二极管阵列进行保护。
- 预留测试点:一定要把关键的信号引出来测试,如
PDB、INTB、LOCK(解串器端)、PASS(BIST)、HPD以及I2C总线。调试阶段会省下大量时间。 - 仔细阅读勘误表:TI的芯片通常有配套的勘误表(Errata),里面会列出已知的硬件或软件问题及规避方法。在设计前务必查阅。