
1. 从DDR到HDMI一块国产SoC的硬件测试全链路拆解做硬件测试这行最怕的不是板子不工作而是板子“看起来能跑”但不知道哪里会埋雷。全志H618这颗芯片我前后摸了两三个月从DDR3初始化到HDMI输出踩坑不少但收获也实实在在。这篇文章就把整个硬件测试过程掰开揉碎从DDR协议的底层逻辑讲到HDMI接口的信号质量验证再到实际调试中那些让人抓狂的问题一次性说透。先交代一下背景。H618是全志面向OTT盒子、入门级平板和智能显示设备推出的四核A53处理器集成Mali-G31 GPU最高支持4K60fps解码显示输出支持HDMI 2.0。这颗芯片最大特点是性价比高、外围设计简单但“简单”不意味着可以省事。DDR3/DDR3L/DDR4的兼容性、HDMI 2.0高速信号的布线约束、电源时序的配合每一环都是测试重点。什么人适合读这篇文章如果你是刚入行的硬件测试工程师正被DDR初始化失败、HDMI无输出这类问题折磨建议逐字看完如果你是有经验的工程师可以直接跳到第4章和5.2节那些排查思路都是拿时间换来的。2. 硬件测试的前置设计DDR和HDMI的PCB关键约束很多人拿到板卡直接通电就测这是大忌。硬件测试真正的起点应该在PCB设计阶段就介入。H618平台的DDR和HDMI测试最怕的就是“设计时没管测试时全是问题”。2.1 DDR地址线等长设置的关键约束DDR布线是H618设计里的重头戏。H618支持DDR3/DDR3L/DDR4数据速率从1600MT/s到1866MT/s不等。在这个速率下DDR信号的时序容限非常有限一套等长设计做不好后面测试阶段就是无穷无尽的偶发死机、热不稳定、误码率超标。我用AD18画这块板子时DDR地址线等长设置是这么处理的首先把所有DDR信号按组分类数据组DQ[0:7]加DQS0/DM0为一组DQ[8:15]加DQS1/DM1为第二组地址线、命令线、时钟线单独一组。分组完成后每组内部做等长组与组之间做相对等长约束。这里有个特别容易翻车的点地址线和命令线是共享的它们要参考的是CK差分时钟而不是DQS。很多人刚开始接触DDR布线容易把地址线跟数据线混在一起做等长最后跑起来全是问题。正确做法是CLK差分对与地址线/命令线的组内等长误差控制在±5mil以内组间等长误差控制在±25mil以内。数据线组内等长误差控制在±5mil组间控制在±20mil且DQS必须与CLK保持特定的相位关系。另外DDR走线的参考平面必须是完整的地平面绝对不能跨分割。我用AD18做阻抗检查时发现过孔附近的参考平面不连续会产生阻抗突变反射信号叠加后会让DDR眼图质量急剧恶化。所以过孔直径、走线线宽、层叠间距都要在Layout阶段反复验证过等板子做出来再想办法就是灾难。2.2 HDMI接口电路设计的信号完整性问题HDMI 2.0的速率高达6Gbps这个量级下每一mil的走线偏差都会被放大。H618的HDMI接口有4对TMDS差分信号数据0、数据1、数据2、时钟外加DDC通道、CEC、HPD等控制信号。TMDS差分对的等长控制上组内误差控制在±5mil组间误差控制在±10mil以内。差分阻抗控制为100Ω±10%单端阻抗50Ω±10%层叠设计要确保差分对的参考平面连续。交流耦合电容的选择也是大坑。HDMI标准规定TMDS通道上必须串联交流耦合电容通常是0.1uF但实际测试中发现电容的封装尺寸会影响高频响应。0402封装的电容在6Gbps速率下的寄生电感明显如果你用的是老式的0603眼图测试结果会很难看。我在H618平台全部换成0402封装实测眼图裕量提高了8%左右。ESD保护器件的位置放置也有讲究要尽量靠近HDMI连接器摆放并且从连接器到ESD器件的走线要做短、做粗才能把静电泄放路径的阻抗降下来。H618对ESD比较敏感HPD引脚必须有钳位保护否则热插拔HDMI线时容易把芯片打坏。2.3 电源时序与纹波控制的测试基础一块板子能不能稳定跑供电是地基。H618需要多路电源内核VDD_CPU约0.9V、GPU和DDR的PHY供电、3.3V和1.8V的IO供电、DDR的VDD和VTT等。电源时序上要求必须先给VDD_CPU核电压、再给DDR供电、最后给HDMI的3.3V。时序错了轻则初始化失败重则芯片直接锁死。测试电源纹波时我用示波器探头加弹簧地线测避免环路天线引入噪声。DDR电源纹波要求控制在±3%以内HDMI的3.3V纹波要求更严格因为TMDS输出驱动器的电源噪声会直接耦合到高速信号上造成抖动恶化。实测H618平台3.3V纹波从40mVPP降到15mVPP后HDMI眼图有了肉眼可见的改善。3. DDR测试实战从初始化到手写测试用例DDR测试是H618硬件测试的第一道关卡。很多板卡卡在uboot阶段起不来DDR初始化失败至少占一半原因。这里按测试流程一步步拆解。3.1 DDR初始化流程与信号读取H618的DDR控制器是集成在SoC内部的初始化流程由固件完成。上电后固件会通过训练机制自动校准DQS门限、读写延迟等参数。如果PCB设计有问题训练过程会失败或者训练结果不稳定。测试DDR的起点是串口日志观察。我记得第一次调试时串口反复打印ddr init fail顺着代码往下查发现是电源时序问题——DDR的VDD先于VDD_CPU到来控制器根本没法正常工作。后面将电源时序调整到位初始化三分半钟内通过。信号测量这块常规做法是抓CK差分时钟波形确认频率和幅值是否符合预期。如果时钟波形存在毛刺或过冲VOH/VOL超出规范那就要回头检查端接电阻和驱动强度配置。DDR3的ODT片上端接可以在控制器寄存器里配置调试时可灵活调整但如果ODT阻值配置与实际颗粒不匹配信号振铃会压不住。3.2 DDR信号完整性与抖动测试DDR的SI信号完整性测试通常用示波器测时钟和数据线的眼图。但DDR不像HDMI那样是恒定比特流数据是DDR颗粒和控制器之间的突发传输要抓到有效的眼图需要用到示波器的DDR专用测量功能或者外部触发条件。H618平台DDR3跑1600MT/s时CK差分时钟的周期约1.25ns实际测量过冲控制在400mV以内抖动控制在100ps以内才算健康。数据信号DQS到DQ的时序关系必须满足建立保持时间要求。最有效的方法是使用带DDR触发解码功能的高速示波器比如Keysight或Tek的4GHz以上带宽产品然后设置DQS为触发源叠加多次捕获来生成眼图。不过大多数中小团队没有这么高端的设备。替代方案是用板卡的Linux系统跑memtester通过长时间压力读写来间接诊断SI问题。如果一个地址位频繁出错那基本能锁定是哪根DQ线或者数据组的等长出了偏差。3.3 DDR IDD测试与功耗评估DDR IDD测试是衡量DDR颗粒功耗的重要环节尤其对于电池供电的便携设备来说非常关键。IDD是DDR颗粒在不同工作模式下的电流消耗比如IDD0代表激活操作时的电流IDD2P是预充电掉电模式的电流IDD4是突发读写的电流。实测时我在DDR供电路径串联一个精密采样电阻比如0.1Ω/1%的2512贴片电阻用万用表或示波器测两端电压差换算电流。要注意的是采样电阻要足够大方便测量但又不能大到影响DDR供电。0.1Ω的电压降在2A电流下为200mV对1.5V的DDR3来说占比太高建议改用0.01Ω或甚至干脆用电流探头。测量方法上我跑不同的压力场景来评估IDD4的峰值电流比如用memtester单线程和大块连续读写分别记录电流波形。对比H618数据手册给出的典型值一旦实测值超出规格就需要检查供电电路的饱和裕量或者DDR配置参数是否合理比如驱动强度是否过大。3.4 DDR压力测试与稳定性验证稳定性验证是DDR测试的重头戏我一般分三步走第一步uboot自带的DDR测试比如全志平台的ddr_test工具做基础读写校验和位翻转测试这一步能快速发现地址线连接错误和颗粒损坏之类的问题。第二步Linux系统级跑memtester参数设置为memtester 512M 100即测试512MB内存迭代100轮覆盖数据线反相、随机数异或、块移动等测试模式。第三步长稳测试这个最关键但也最耗时。DDR对温度非常敏感板卡在常温下测试2小时没问题放到70℃环境箱里可能跑不到10分钟就报错。这是信号的建立保持时间余量不足的典型表现。我之前遇到一块板卡常温DDR完全正常高温下总是随机重启查了整整一周最后发现是DDR_CLK到颗粒的走线过长时序裕量临界导致温度漂移后触发错误。经验提醒DDR测试中遇到“低温好、高温挂”的情况优先检查时钟线走线长度和VREF电压精度这两个是温度漂移的放大器。4. HDMI测试实战从信号定义到4K输出验证DDR稳定了接下来就是显示链路。HDMI接口的测试相比DDR更直观但因为涉及到协议协商和高速信号问题定位起来很考验基本功。4.1 HDMI接口信号定义与HPD热插拔逻辑先梳理HDMI接口的关键信号对测试来说这是最基本的底子。标准的HDMI Type-A接口有19个引脚四组TMDS差分对D0、D1、D2、CLK、DDC通道SCL/SDA、CEC、HPD、以及5V电源引脚。HPDHot Plug Detect是实现热插拔的核心信号。显示设备这里指HDMI显示器通过HPD引脚向源端也就是H618通知连接状态。当HPD从低电平变为高电平时源端会启动DDC通信读取显示器EDID数据然后根据EDID协商分辨率、色彩空间、刷新率等参数。在实际测试中HPD是最容易出问题的地方之一。我遇到过一个典型案例H618板卡连接部分显示器无输出但连接另一台显示器完全正常。排查了好久发现是HPD引脚的上下拉电阻值偏大导致拉电流能力不足驱动不了某些显示器内部的HPD电路。换用更小阻值的下拉电阻后问题解决。4.2 HDMI 2.0 4K60Hz输出测试流程H618标称支持HDMI 2.0即18Gbps带宽可以输出4K60Hz、4:4:4、8bit色深。我在测试这块功能时先通过内核命令行强制指定分辨率测试再用modetest工具查询实际链路输出。具体流程是板卡进入Linux系统后执行modetest -M sun4i-drm -c查看当前的连接状态再执行modetest -M sun4i-drm -s 32:3840x216060强制设置为4K60Hz。如果命令执行成功并且屏幕上出现画面说明驱动链路正常。如果黑屏就需要逐步排查。有问题时先从显示器的OSD菜单确认输入源是否正确接着用dmesg | grep -i hdmi查内核日志看有没有HPD中断触发、DDC读取失败这些信息。如果内核日志正常那么问题大概率出在信号质量上需要上示波器抓TMDS信号。4.3 HDMI阻抗匹配与眼图测量的仪器使用HDMI 2.0跑6Gbps速率时眼图测量是判断信号质量最权威的手段。TMDS差分对的眼图标准要求眼高不小于200mV眼宽不小于0.6UI抖动不超过0.3UI。达不到这个标准链路随时可能出现偶发黑屏。测量工具推荐带HDMI一致性测试选件的示波器带宽至少8GHz以上再配合HDMI测试夹具。H618的HDMI输出直连连接器需要用到SMA转接板把差分信号引出来。眼图测量的另一个重点是测量点的选择。HDMI规范要求在连接器后端测量眼图也就是说要包含PCB走线和连接器的影响。你要是直接在芯片引脚附近测量测出来的眼图再漂亮也没有参考价值。4.4 HDMI电源与EMC的实测注意事项HDMI高速信号是EMC测试的重灾区。6Gbps的信号其基频达到3GHz而数字信号的谐波分量会远超这个频率如果布局布线处理不好辐射发射测试很难通过。H618的HDMI电源设计上我推荐在HDMI连接器附近的3.3V供电脚加磁珠和电容滤波一方面可以隔离板上其它模块的噪声另一方面也减少了连接器向外辐射的路径。TMDS差分对两旁建议加接地过孔墙起到屏蔽作用减少信号向板边耦合。EMC整改时我也遇到过棘手情况HDMI工作时的辐射超标3dB怎么加电容都压不下去。最后通过调整连接器外壳的接地方式将外壳通过多个过孔直接连接到地平面把共模回流路径缩短辐射值一下就降了下来。HDMI连接器的外壳接地真的不能敷衍了事。5. 常见问题与排查技巧实录这章内容是本次分享的精华。以下问题都是我实际调试H618平台时踩过的坑遇到的概率非常高记录一下给各位做个参考。5.1 H618开机卡死与DDR初始化失败开机卡死是H618最常见的问题串口只打印到bootrom阶段就没了反应。这时候不要慌先按下面步骤排查第一步查看串口日志的最后输出行。全志平台在DDR初始化阶段会打印类似DRAM CLK xxx MHz的信息。如果日志停在那之后基本就是DDR训练失败了。第二步确认DDR型号配置是否正确。H618的固件里默认DDR3参数模板如果你的板子上用的是DDR3L或者DDR4颗粒一定要在固件配置中修改型号类型和时序参数。DDR4与DDR3虽然引脚兼容但电气标准完全不同接错必挂。第三步检查DDR电源纹波。我之前遇到一个板卡总是大概率的DDR初始化失败10次里偶尔有1次能过。示波器挂上去一测发现DDR的VTT电压纹波高达80mV远超要求。换了一颗低ESR的钽电容后初始化成功率100%。5.2 HDMI无输出与显示器不识别HDMI无输出主要有三种表现完全无信号、间歇性黑屏、花屏。这里分享一个排查表现象可能原因排查方法完全无信号显示器显示无输入HPD未拉高、DDC读EDID失败、TMDS无输出测HPD电压抓SCL/SDA波形示波器看TMDS差分对间歇性黑屏几秒恢复TMDS信号裕量不足、电源纹波过大、接地不良测眼图看裕量是否不足20%检查电源纹波验证接地花屏、图像错乱TMDS时序不对、驱动配置错误检查驱动参数输出固定测试画面测量CLK频率某些显示器黑屏某些正常HPD驱动能力不足、DDC上拉电阻不匹配调整HPD电阻检查DDC上拉电压3.3V是否正常花屏问题有一个很隐蔽的触发点H618在4K60Hz输出时DDR带宽被大量占用如果此时同时跑GPU负载DDR带宽不足可能导致显示数据丢帧看起来像花屏。如果你遇到的是“跑游戏花屏、待机正常”先排除带宽问题再回头看电路。5.3 AD18的DDR等长设置经验总结很多新手用AD18做DDR等长时会发现“明明设了规则拉线时却不生效或者报警不断”。这里分享几个经验第一等长规则要按网络类NetClass设置不要在单个网络上逐个设。先把所有DDR数据线归到一个NetClass设置好Class-to-Class的长度约束后面再通过Interactive Length Tuning工具统一调整。第二用Interactive Length Tuning工具调等长时要开启“Tune by delay”模式因为等长的本质是保证传播延迟一致不是物理长度一致。DDR3的信号在PCB上的传播速度受走线层影响内层走线比表层慢约5%-10%你要是只看物理长度内层信号会比表层晚到达看似等长其实不等长。第三蛇形走线的间距至少为线宽的3倍。我见过不少新手把蛇形线拉得太密线间距小于2倍线宽导致串扰严重反而损坏了信号质量。这事在DDR这种并行同步总线上尤其致命。5.4 从RK与Zynq平台移植的DDR测试经验很多工程师之前做过RK系列或者Xilinx Zynq平台的DDR验证这里的经验可以直接借鉴到H618上。比如Zynq平台上常见的“JTAG固化flash时必须外挂DDR”问题本质上就是因为固化流程需要在内存中运行临时程序而Zynq内部OCM容量太小装不下。遇到这种情况必须事先通过JTAG初始化并验证DDR可用才能继续固化。H618虽然没有这种问题但有一个类似的坑部分H618方案为了节约成本只贴了单颗DDR颗粒没有ECC功能。这种情况下DDR数据翻转引起的随机崩溃很难复现也难以定位。如果你做的是工业级产品强烈建议在固件里打开DDR的ECC功能如果颗粒支持或者选用带内建ECC的DDR颗粒。另外从RK平台迁移过来的工程师要特别注意H618的DDR训练参数不像RK那样在设备树里可以直接修改很多参数是编译进uboot二进制中的改参数需要用全志提供的工具重编uboot。我在调试高频DDR颗粒时吃过不少“改参数无效”的亏。6. 实测经验与后续扩展思路做硬件测试这几年最大的体会是测试不是证明“板子能工作”而是证明“板子在任何条件下都能工作”。DDR和HDMI这两个外设一个是系统稳定性的地基一个是用户体验的门面二者缺一不可。最后再分享一个小技巧。在做H618的HDMI测试时我通常会在电视机上开一个秒表计时器然后用手机对屏幕拍照。这个方法在验证画面撕裂、跳帧、闪烁问题时特别有用——比一直盯屏幕盯着眼睛舒服多了而且能留下影像证据。如果是做量产验证建议在产线上加一道“DDR老化HDMI热插拔”的组合测试在高温环境下循环执行DDR压力测试与HDMI拔插动作各100次能提前暴露大量可靠性隐患。这个测试组合我用了很久稳定性筛选效果比单独做单项测试好不少。