☰
嵌入式板级调试第六天:信号验证的坑与套路
2026/10/12 6:01:10 网站建设 项目流程

如果你正在调一块嵌入式板子,并且到了项目的第六天,你会发现“信号相关功能验证”这几个字的分量很重。前面几天,你可能已经把板子点亮了:串口能打印、LED能闪烁、芯片能启动,一切看起来挺正常。但真正到了信号验证这一步,信号完整性、高速信号接口、CVBS这类模拟视频信号,再加上MIPI屏调试没信号、ILA抓信号没反应,任何一项突然冒出来,都能消耗掉你大半天。

做功能验证和做信号验证,心态完全不一样。功能验证是在问“这个功能能不能跑起来”,信号验证是在问“这个信号有没有达到规格、还能扛住多少恶劣条件”。同一个I2C接口,功能测试时可能连续读一百次都没问题,但上升到信号层面就会发现,上升沿已经钝得像被砍了一刀,毛刺比数据还高,若环境温度再降一点,通信随时可能中断。

这篇文章就把我第六天做信号验证时踩过的坑、用到的套路、以及一些平时文档里不会写的经验,按天复盘一遍。适合正在做嵌入式硬件、板级调试或者FPGA验证的朋友,哪怕你是刚接手第一块板子,也可以照着这个思路去搭自己的验证清单。

1. 信号验证的整体设计思路

1.1 先搞清楚这次到底验证哪些信号

很多人一听到“信号验证”就以为是拿示波器到处点一点,看看有没有波形。这是个很大的误解。第六天之前,板子上的裸机程序已经能跑,操作系统也能起来,说明绝大多数数字信号的“通断”是没有问题的。这个时候再验证,重点已经不是“有没有”,而是“好不好”。

我的习惯是把要验的信号先分成四类:

第一类是普通数字控制信号,比如GPIO、复位、中断、使能脚,还有板级低速总线I2C、SPI、UART。这一类信号要关注的是电平是否落在接收端的有效范围内,边沿是否足够陡,跨板连接或者连接器接触不良会不会引起偶发丢包。

第二类是周期性控制信号,比如PWM、定时器同步信号、看门狗喂狗信号。这类信号要关注频率、占空比、抖动的长期稳定性。尤其当PWM用来控制电机或者LED亮度时,占空比偏差1%或许感知不明显,但频率抖动会导致噪音,相位错位会导致多路输出相互干扰。

第三类是高速差分信号,包括PCIe、USB、MIPI、LVDS、千兆网。它们的特点是速率高、摆幅小、对布线寄生参数敏感。你不能用普通逻辑分析方法去测,更多要看差分电压、共模电压、眼图和误码率。

第四类是模拟信号和视频信号,像CVBS、YUV、音频输入输出、传感器模拟量。这些信号除了看幅度,还要看波形失真、谐波、信噪比。比如CVBS信号里的同步头,幅度稍微不对,显示器就可能察觉到画面滚动。

如果你在第六天之前没有把这个清单拉出来,很容易被现场问题牵着鼻子走。比如MIPI屏没信号,查了一上午,最后发现是电源纹波导致D-PHY PLL失锁,但电源问题本来应该排在前面先处理的。

1.2 为什么单独留一天做“信号验证”而不是“跑功能”

有些工程师会有疑问:程序都跑起来了,再花一整天去测波形,是不是有点浪费?我做过的项目告诉我,这往往是项目后期bug最集中的来源。

一个最经典的案例是I2C总线。功能调试时,因为手头的传感器模块和主控离得近,上拉电阻用了板载的4.7kΩ,一切正常。但到第六天整板联调,I2C要跨过排线连接远端设备,线长增加了,寄生电容也跟着增加。此时4.7kΩ上拉电阻对应的RC时间常数变大,上升沿变慢。低速读寄存器还能忍,一旦以400kHz速率连续读写,从设备可能因为建立时间不足而回NACK。功能测试跑一两次发现不了,但反复启停或者连续大批量读写时就会随机失败。

信号验证的本质是在“功能能跑”和“功能可靠跑”之间划一道清晰的线。这道线,就是数据手册里的那些时序参数。许多芯片的datasheet会给出输入信号的上升时间范围、建立时间、保持时间、输入高电平最低值、输入低电平最高值。功能验证不会逐条去对照这些,信号验证会。

另一个容易忽略的点是电源信号。电源本身也是信号。第六天验证时,我一般会花一段时间专门看各路电源的纹波、上电时序和掉电时序。曾经遇到一个DDR3系统,功能测试怎么跑都稳定,后来重启测试时内存校验失败,用示波器抓DDR供电,发现复位释放之后电源还有一小段过冲,导致DDR初始化参数被破坏。这种问题,不站在信号验证的角度,几乎不可能定位。

1.3 判定标准必须先定下来,不然测了也是白测

信号验证最忌讳“先测出来再说”。没有合格判据,波形出来了你也只能“嗯,看起来差不多”。我通常是提前半天,把所有信号接口的datasheet翻一遍,把关键参数抄到表格里。

信号类型重点测量项常用工具典型判定依据
普通数字信号高/低电平、边沿时间、毛刺示波器、逻辑分析仪芯片VIH/VIL、上升/下降时间
PWM信号频率、占空比、抖动示波器、频率计应用要求的占空比精度和抖动上限
低速总线(I2C/SPI/UART)时序关系、建立/保持时间示波器、协议分析仪对应协议标准时序要求
高速差分信号差分摆幅、共模电压、眼图高带宽示波器、误码仪协议规范眼图模板、BER指标
模拟/视频信号幅度、同步头、失真、信噪比示波器、视频分析仪CVBS/YUV对应标准
电源与时钟纹波、频率偏差、相位抖动示波器、频谱分析仪芯片供电要求、器件手册

这张表不需要写得很复杂,但要能把“合格”和“不合格”量化。比如某颗芯片要求输入高电平最低是0.7×VDD,那你的信号就不能只测一次看“大概3.3V”,要记录它在满载、空载、高温、低温下的具体数值。第六天把它当成流水线来干,后面试产阶段就能少很多莫名其妙的偶发问题。

2. 常规数字接口与低速协议信号验证

2.1 I2C、SPI、UART这类信号验证的细节

低速协议往往最容易让人放松警惕。第六天验证时,我会用示波器同时抓SCL和SDA,重点看三件事:静态电平、上升沿、跨板连接处的过冲。

I2C的SDA线要求在设备释放总线后能够被上拉电阻拉到高电平。如果总线上挂的设备多,等效电容大,上升沿就会变慢。I2C协议对上升时间有明确限制,标准模式允许1μs,快速模式允许300ns。你拿普通示波器测一下,如果上升沿已经占到一位时间的30%以上,就要考虑减小上拉电阻,或者把总线速度降下来。

SPI的话,更容易出问题的往往是时钟极性和相位。功能测试时通信偶尔正常,但示波器一抓就发现,数据在时钟边沿变化的同时,主设备已经开始采样,建立时间几乎为零。这种设计在室温下能用,温度一变化,延迟变了就开始丢数据。我每次验证SPI,都会把SCK、MOSI、MISO三根线放在同一时间轴上,数出时钟边沿到数据翻转之间的时间,确保它大于从设备要求的建立时间。

UART主要看波特率误差。两边芯片如果用的都不是高精度晶振,误差叠加可能超过5%。功能测试时可能偶尔乱码,但不容易定位。此时示波器抓起始位下降沿,测量一位的宽度,换算实际波特率,对比配置值,哪个方向偏差超过正常范围就一目了然。

2.2 PWM信号验证的频率、占空比与抖动

PWM验证比很多人想的要细致。第六天我会给PWM加一个长期触发条件,连续捕获几秒钟的波形。因为PWM输出在空载和带载两种情况下的波形差异很大,尤其是驱动MOS管或者电机驱动芯片时,开关瞬间的振铃会出现在PWM边沿上。如果振铃幅度超过驱动芯片的输入阈值,就可能造成额外开关,产生EMI问题。

占空比验证也不能只看平均值。有的MCU对占空比寄存器做了舍入处理,比如定时器分频后实际输出并非精确的50%,而是50.1%。对LED调光来说50.1%看不出区别,对舵机控制来说,0.1%的差别就会造成明显的位置偏移。所以验证PWM时,我会把高电平时间、周期时间都测出来,用“高电平时间/周期时间”来算实际占空比,而不是直接读寄存器的配置值。

另外要留意多路PWM之间的相位关系。如果三个半桥需要互为120°输出,单看每一路都正常,但相位不对,电机就会抖动。我习惯用示波器的多个通道同时触发,或者用逻辑分析仪做长时间连续记录,检查各路上升沿之间的间隔是否稳定。实测过程中曾遇到一个很隐蔽的问题:只要系统负载升高,PWM的相位就会跳变十几个微秒,最后定位到是某路电压跌落导致MCU内部时钟短暂失锁。这种问题不验证相位关系,单看波形根本发现不了。

2.3 APB总线中strobe和data的关系,别小看这组信号

第六天验到寄存器读写这一块时,APB总线经常会成为拦路虎。很多人只关心PADDR、PWDATA、PRDATA,却忽略了PSTRB。PSTRB是写字节使能信号,指示数据总线上哪些字节是有效的。如果只有PSTRB[0]有效,那PWDATA[7:0]上的数据才算数,其他字节数据即使有值,也不能写入寄存器。

之前做一颗带有APB接口的芯片验证时,我拿着0x5A写到寄存器低字节,结果读到完整寄存器值却是0x00005A,说明低字节正确,高字节没有被动过。但换了一种测试方式,只把PWDATA设为0x0000005A,却发现PSTRB拉了整整四位,此时高字节也被写成0了。这其实不是芯片bug,是我们没按总线的数据有效性规则去激励。把PSTRB和PWDATA的关系拎清楚之后,寄存器验证的失败率立刻降了下来。

还有一个容易踩的坑是“读取之前先写一次相同值”。如果寄存器默认值就是0xFF,你写0x00再读回,可能只看到PSTRB没生效,实际上因为APB写操作在时钟上升沿采样,PSTRB必须提前至少一个建立时间准备好。用手动触发时,如果激励信号在写操作的同一拍才变化,就会错过这一拍。严谨的做法是,把地址、数据、PSTRB分别在相邻的时钟沿上准备好,再拉PENABLE,这样才能完整覆盖APB协议里的写数据阶段。

2.4 用ILA抓信号没反应,问题多半出在这几点

如果你做FPGA验证,遇到ILA抓信号没有反应,不要先怀疑探针坏了。高频次出现的原因有三个。

第一,信号被综合工具优化掉了。如果被探测的信号只是一个中间寄存器,而且后续没有实际逻辑扇出,综合时会把它优化成常数或者直接删除。解决办法是加综合约束,比如在Verilog里写:

(* KEEP = "TRUE" *) wire sig_debug;

这样综合工具才会保留这个网络。还有一种情况是信号在跨时钟域时被名字重新映射了,你在ILA里看到的信号名和RTL里的不一致,抓自然是抓不到的。

第二,触发条件设错了。ILA默认是等触发条件满足才开始记录,如果你把触发值设成一个不可能出现的组合,那无论怎么运行都看不到数据。我会在调试初期把触发条件设为“任意变化”,先把波形抓回来,再逐步缩小触发条件。看到数据之后再条件触发,效率会高很多。

第三,时钟域不对。ILA的采样时钟必须和被测信号同属于同一个时钟域。如果被测信号来自异步FIFO读侧,而你用写侧时钟去采样,看到的数据自然不稳定,甚至抓不到。这时候要检查ILA的时钟连接是不是真接到了预期时钟网络的叶节点上,有些情况下时钟经过BUFG之后,名字变了,工具默认接了另一个叶子节点的时钟。

第六天验证时我习惯把ILA和外部逻辑分析仪同时接上,相互印证。ILA适合看片内逻辑状态,外部示波器看管脚实际电压。两者一起看,才能判断到底是逻辑问题还是物理信号问题。

3. 高速接口与视频信号验证

3.1 差分信号验证,关键是分清差模和共模

高速接口普遍使用差分信号,一组差分对内两条线互为参考,接收端关心的是两条线之间的电压差,这就是差模分量。而两条线相对地的平均电压,是共模分量。共模分量本身不携带有效信息,但在实际PCB上,地弹、外部干扰、串扰都会叠加到共模上。如果共模噪声太大,接收端的共模抑制能力再强也会被拖垮。

因此验证差分信号时,不能只看单端波形,必须用差分探头测量。普通示波器探头点其中一根线,看到的只是“单端对地”的波形,里面包含了共模噪声,这不能代表接收端实际看到的差分信号。我通常会在高速信号输入端的参考电阻前和后各测一次,确认连接器和过孔对信号的影响。

还要注意差分对内的等长问题。理论上差分对两条线的长度差会导致时序偏移,把差模信号的一部分转成共模,从而辐射更多噪声。第六天如果时间充裕,我会拿网络分析仪或者高带宽示波器看TDR曲线,检查差分阻抗是否在目标值附近。像PCIe、USB3.0这类接口,差分阻抗一般是85Ω到100Ω左右,偏差超过10%就容易出反射,眼图质量肉眼可见地变差。

3.2 PCIe M.2接口的信号定义与建链过程

PCIe M.2接口的验证,第一件事是翻信号定义表。M.2接口上,除了电源和地之外,让人容易搞混的是收发差分对。以PCIe为例,PETp/PETn是发送,PERp/PERn是接收,REFCLKp/REFCLKn是被测设备参考时钟。还要注意PERST#复位信号和CLKREQ#时钟请求信号。每次做M.2转接板的时候,我都把PE发送和接收检查两遍,因为用错一对线,电脑根本识别不到设备,更别提建链了。

PCIe建链过程其实可以分几步看。设备上电后,接收端会检测发送端送过来的接收检测信号,然后进入链路训练状态机,进行速度协商、位宽协商和均衡参数调整。功能正常时,这个过程一瞬间就完成了,看不到什么现象。但如果链路有问题,或者用示波器触发CRP模式,能看到设备反复发送训练序列,始终无法进入L0态。

我一般先量REFCLK。PCIe参考时钟通常为100MHz,要求频率精度在±300ppm以内,摆幅也有限制。REFCLK进芯片之后还要经过PLL,如果时钟本身有明显抖动,后面的收发数据必然不会稳定。用高带宽示波器测参考时钟的上升沿和周期抖动,再通过软件算出峰峰值和RMS抖动,对照规范里的限值。参考时钟干净了,再去看PERST#的上电时序。PCIe规范对复位信号的释放时间、释放后稳定时间都有要求,很多“插上偶尔识别不到”的故障,都是因为复位释放时间落在了参考时钟还没稳定的区间。

3.3 MIPI屏调试没信号,和CVBS、YUV视频信号验证

MIPI屏调试没信号,是第六天最常见的问题。很多人第一反应是“驱动配置不对”,但我建议先量物理层。MIPI D-PHY在高速数据传输之前,会有一段LP状态,也就是低压差分通道处于低电平。用示波器抓时钟通道,能看到先是从LP切换到HS,然后高速时钟连续翻转。如果示波器一直抓不到这个HS跳变,说明主控压根没往屏端发高速数据,问题大概率出在驱动配置或者MIPI D-PHY寄存器上。

如果看到CLK有高速时钟,但数据通道没有对应内容,那就要查分辨率、数据格式和虚拟通道配置。比如屏支持RGB888,但驱动配置成了RGB666,屏要么黑屏,要么花屏。还有一个特别容易被忽略的点:MIPI发射端的数据通道数和屏要求的通道数不一致。接了4-lane屏,但配置里只使能了2-lane,屏时序会一直等待剩下两个通道,表现为“没信号”而不是“花屏”。

再说CVBS和YUV的区别。CVBS是复合视频信号,亮度和色度调制在同一条模拟信号线上,再用同步头区分每一行。YUV则是亮度Y和两个色差分量U、V分开的信号。CVBS的好处是布线少,缺点是对信号完整性更敏感,色度信号频率较高,稍微衰减就会偏色。YUV分开走之后,每一路带宽要求相对低,但需要三路同时对准时序。验证CVBS时,我会重点看同步头幅度和色同步信号的位置;验证YUV时,重点看三路信号的行场同步是否对齐,以及每一路的幅度是否在ADC输入范围内。

之前在RK3588平台上调试MIPI输入1080i信号时,踩过一个典型的坑。MIPI-CSI接口本质上接收的是已经数字化的图像数据,而1080i是隔行扫描格式,需要把奇数场和偶数场分别传输,再由后端去隔行。当时屏端能拿到画面,但画面总是“梳齿”状,最后确认是CSI驱动没有把场序信息正确传给去隔行模块。这类问题不是单纯物理信号问题,而是信号语义问题,但只要用示波器把MIPI通道上的垂直消隐区数据抓出来,配合软件打印场中断,就能定位。

3.4 DTMB信号、信号调理与热力图的应用

除了视频接口信号,模拟前端也要验证。比如DTMB这类数字电视地面广播信号,射频前端收到的信号经过低噪声放大、滤波、下变频后进入解调器。第六天验证时,可能没有专业广播信号源,我会用一个简易的调制器发固定码率的信号,在射频输入口先量信号功率,再在下变频中频口用频谱仪看频谱形状。DTMB信号是OFDM调制,频谱有点像平顶噪声,如果看到频谱有明显塌陷或单音干扰,基本可以预判接收灵敏度会差。

“信号调理”这个概念也经常在第六天遇到。传感器输出的微弱电压,先要经过放大、滤波、偏置,才能进ADC。调理电路里的每一级运放,都会引入噪声和相位偏移。我习惯把信号调理链路拆成“传感器输出端”“一级放大输出端”“滤波输出端”“ADC输入端”四个测量点,逐级测量幅度和噪声,看哪一级引入的噪声最大。很多时候,ADC采样数据跳动,不是因为PCB布线不好,而是某个反馈电容选得太大,造成带宽下降,有用信号被削波。

热力图是和信号验证配套的一个辅助手段。高速接口的端接电阻如果布局不合理,电流密度过大,局部温度会明显升高。用热成像仪扫一圈板子,能看到差分对附近的端接电阻是否比其他区域热。这个信号相关设备的关键故障点,用热乎乎的趋势排查,往往比拿示波器在几十个测试点里一个个找要快得多。不过要注意,热成像仪看到的是结果,不是原因。某个端接电阻过热,可能说明差分走线阻抗不匹配,反射能量集中消耗在端接处,最终还是要回到波形测量去确认。

4. 功能验证实操过程

4.1 测试环境与仪器准备

第六天开始之前,先把仪器准备好,否则中途会被反复打断。示波器带宽至少要达到被测信号基频的五倍以上。比如测100MHz的MIPI时钟,如果示波器只有200MHz带宽,测出来的上升沿已经被探头和前端滤波抹平了,没法用来判断真实信号质量。测PCIe、USB这类高速信号,最理想的是带眼图功能和时钟恢复的示波器,单凭手动触发看波形也能看出大概,但要做判定,还是需要专用软件。

探头的接地方式同样重要。测量高速信号时,我习惯用探头自带的接地弹簧,而不是那根长长的鳄鱼夹线。长接地线会形成一个很大的回路电感,测出来的信号自带振铃,看起来像板子有问题,其实是测量方法引入的噪声。低速数字信号还好,差分信号测量时几乎一定要用差分探头,而且探头尖和地针的距离要尽量短,不然你测到的就不再是芯片管脚上的真实信号。

示波器通道校准也不能跳过去。多个通道之间如果存在时间偏斜,在测量建立时间、保持时间时会产生纳秒级误差。第六天刚开始时,我会把两个通道同时接在一个已知的方波源上,调节通道延迟,让两个通道的上升沿完全对齐。这一步花五分钟,后面能省下好几个小时。

4.2 上电时序、复位和时钟信号的验证顺序

信号验证不能从头到尾一路乱抓,我的习惯是先电源、再复位、再时钟,最后再看协议数据。原因很简单,后面每一类信号都要依赖前面的条件。如果DDR供电还没稳定,你先去测DDR的DQ眼图,测出来的结果没有任何意义。

上电时序验证需要用示波器的多通道同时记录。我一般会把主电源、IO电源、DDR电源、复位信号、主时钟这五六个信号同时接到示波器上,用上升沿触发,记录上电瞬间各通道的变化顺序。很多芯片手册里会写“内核电源和IO电源之间的上电顺序不能违反,否则可能损坏芯片”,这种要求靠眼睛看电压表根本看不出来,只有同时触发才能发现某个电源落后了十几毫秒,导致IO电源先起来、内部ESD保护结构反偏。

复位信号验证要注意释放沿的质量。复位释放应该是一个干净的单边沿,如果复位信号上有毛刺或者跌落,芯片可能被复位两次。我曾在一天验证里遇到过复位信号上叠加了约1.2V的噪声,大小刚好超过芯片的复位阈值,导致芯片每隔几百毫秒就自动复位一次。功能测试时由于看门狗一直在喂狗,系统重启后又被拉起来,现象非常隐蔽。

时钟验证主要看频率和抖动。晶振本身输出波形可能不是特别干净的方波,尤其是振荡电路里反馈电阻和负载电容选得不对时,起振时间会变长,幅度会下降。第六天我一般会在最后一个时钟信号上验证晶振输出和芯片内部时钟输出,看看是否有倍频后的杂散。

4.3 动态信号监测与随机信号分析

静态定点测量之外,第六天还应该安排动态监测。比如某些信号平时不走,只有在上电、下电、deinit、异常触发时才有短脉冲,这正是“deinit触发序列发送信号”这类场景比较难验证的地方。我的做法是给示波器设置一个边沿触发条件,捕获取消初始化过程中那几个特定控制信号,对比软件时序图和实际波形是否一致。这样做的好处是,能在短时间内确认固件里的触发序列是不是真的按预期发出去了。

随机信号分析也是一项容易被忽略的工作。很多数字信号本身是连续活动的,比如数据总线、视频数据、网络流量,它们不会出现规律波形。此时单纯看示波器屏幕上的亮度和形状,只能得到“信号有活动”这样一个模糊结论。更实用的做法是打开示波器的频谱分析模式,或者用逻辑分析仪做长时间连续采集,统计信号活动密度。举个之前做视频采集的例子:当摄像头被遮挡时,某些行的数据几乎不翻转,逻辑分析仪上会看到一段较长的固定电平,这就和信号异常很相似。把一段时间里信号翻转的次数做一个简易分布图,可以快速判断是不是数据有效但画面全黑。

“持续一段时间内信号信噪比”这类问题也是同理。验证模拟前端时,我会截取一段无信号输入的时间,测量ADC输入噪声的均方根值,再截取一段有信号输入的时间,计算信号幅度和噪声幅度的比值。只要这个比值在容差范围内,就算通过。这里要注意的是,测试周期不能太短,至少覆盖几十个信号周期,才能避免偶然误差的影响。

4.4 测试记录模板与现场记录习惯

第六天最大的敌人其实是记忆。测了一大堆点,如果你没有记录,到下午复盘时根本分不清上午那个异常波形是在什么条件下抓的。所以我强烈建议准备一个简单的测试记录表,按信号名、测试点、测量条件、标准值、实测值、结果、备注这七列来填。

信号名测试点测量条件标准值实测值结果备注
I2C_SCL连接器PIN3400kHz,满载上升时间<300ns312ns不通过需减小上拉
PWM_CH1MCU引脚50%占空比频率误差<1%0.2%通过空载测试
MIPI_CLK屏端插座4-lane 1080p摆幅±200mV±220mV通过保持稳定
DDR_PWRDDR芯片去耦点正常工作时纹波<50mV45mV通过连续记录10s
PCIE_REFCLKM.2插座100MHz周期抖动<50ps62ps不通过需要检查晶体走线

现场记录不需要写得很整洁,但要能让自己在几天后还能看明白。每个异常波形旁边最好贴上当时的触发条件、探头衰减倍数、垂直刻度、时基。因为示波器截图如果没有这些参数,回头再看根本没法判断幅值和频率是否可信。这个习惯让我在项目评审和返修分析时省了很多事。

5. 信号验证常见问题与排查技巧实录

5.1 示波器测量高速信号时容易犯的低级错误

第一个低级错误是拿普通无源探头点差分信号,只测其中一根线。前面说过,差分信号的定义是两根线之间的差值,只看单端信号会把共模噪声当信号看。尤其在电源干扰大的板子上,两根线的对地波形可能都带很大的干扰,但它们之间的差值可能很干净。所以测差分信号,要么用差分探头,要么就老老实实把两路单端信号相减。

第二个低级错误是忘记调整探头衰减比。示波器探头上有一个1X/10X切换开关,如果探头打在10X位置,却忽略衰减比,示波器默认按1X计算,测出来的幅度会大十倍。这种情况看着像是信号过冲严重超标,实际上只是计算错误。第六天验证时如果连续出现离谱读数,先检查探头衰减比。

第三个问题是带宽不够还要硬测。低频示波器测高频信号时,看到的是一个被平滑过的小幅度波形。例如用100MHz的示波器去测100MHz时钟,示波器本身在-3dB带宽位置,测出来的幅度只是真实幅度的70%左右。当你拿这个数据去对芯片手册的阈值,很可能误判为“信号幅度不足”。测高速信号必须确认示波器带宽至少是信号频率的三到五倍,并且打开带宽限制功能时要注意是否已经影响波形让他开。

5.2 MIPI屏、PCIe这类接口突然不识别,先量“静默期”信号

这一类高速接口有一个共同特点:它们不是持续发送信号,而是有大量空闲状态。PCIe在没有数据传输时会进入电气空闲,MIPI在传送图像间隙会切换回LP状态。排查“之前好好的,现在突然不识别”这类问题时,我习惯抓一段相对较长的信号记录,看从空闲态到激活态的跳变是否正常。

一个真实的排查案例:某块板子用M.2 SSD时,系统有时能识别,有时识别不到。用示波器抓M.2插座上的PERST#、CLKREQ#和REFCLK,发现每次开机时,REFCLK比PERST#释放晚了大约30ms,而SSD固件对复位释放时间要求比较严格,导致它有时能锁定,有时锁不住。这个故障单纯从软件角度看会发现“有时初始化失败”,但错误日志里没有任何有效信息,只有把时序抓出来才定位到问题。

MIPI屏调试没信号,也可以按同样思路排查。我会先用示波器抓MIPI_CLK和第一数据通道,观察开机瞬间是否有从LP到HS的跳变。如果有,说明主控在发数据,问题在屏配置;如果没有,说明主控根本没有送数据,问题在上游驱动或者初始化时序。这个判断点能把排查范围缩小一大半。剩下的再查分辨率、虚拟通道、lane数、时钟频率是否匹配,基本都能解决。

5.3 偶发性故障不要迷信长波形,要善于触发和统计

第六天验证时,最容易让人抓狂的是随机故障。明明重启一次就好了,但没法解释为什么。这种情况下,示波器停留在“自动触发”档位用处不大,因为异常波形跳得很快,等你眼睛看到,事件已经过去了。

我惯用两个方法。第一个是示波器的“逐帧”或“分段存储”功能。把存储深度分成几百段,每段抓一个触发事件,这样一次记录里能抓到几十上百次异常波形,回放时统计异常出现的规律。差模和共模干扰的间歇性问题,这样统计几次就能看出是不是跟某个信号的活动同步出现。

第二个方法是把逻辑分析仪和示波器联动起来。现在很多示波器支持逻辑分析仪模块,可以用逻辑条件触发。比如你想找“总线发出0x55引起电源下降”的条件,可以在逻辑通道上设置0x55为触发,再让示波器在触发前后抓模拟通道。这样做能把数字事件和模拟波形对应起来,定位噪声从哪里来。第六天之后如果再遇到随机重启,我一般都会建议客户用这个思路去抓信号,而不是靠“把板子打一顿”来碰运气。

5.4 从“有没有信号”升级到“信号良率”的思维

第六天做完整轮验证后,我最大的体会是:信号验证不是一天就能结束的工作,它更像给整块板子建立一套“信号健康档案”。功能验证只关心“这次能不能通过”,信号验证关心“换一个电源、换一块PCB、换一批物料之后,还能不能通过”。

所以在第六天的收尾阶段,我会把几个关键信号在不同电压、不同温度下的表现都测一组。较低供电电压下,信号幅度降低;较高温度下,边沿变慢。如果某个信号在临界条件下已经不达标,趁早跟硬件同事提出来做布局调整或者加端接,比试产后再去改PCB省太多成本。

这里还有一个小手段:用热成像仪扫一遍关键信号路径上的器件。高速信号总是有损耗的,损耗会转化成热量。如果某个电阻或芯片的局部温度明显高过同类型器件,这条信号链路很可能存在阻抗失配或者异常功耗,值得继续深挖。

我自己每次做完第六天验证,都会把记录表里“不通过”的项目单独列出来,按风险等级排序。低风险的是调参数能解决的,比如改上拉电阻、改软件时序;高风险的是要改PCB或换料才能解决的,比如高速信号插入损耗过大、差分阻抗偏了。把风险排序理顺,后面项目的节奏就会稳得多。信号验证的快感,不在于能按出一堆漂亮波形,而在于提前把那些平时看不见、摸不着、一出问题就要浪费两周的隐患,按死在调试阶段。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询