调试准备:工具与环境
做LTSSM调试,说白了就是一场“捉鬼”游戏。鬼在哪里?你不知道。鬼什么时候出现?你也不知道。但如果你家伙事儿带齐了,至少能在它出来时一把揪住它。
我个人习惯把调试准备分成三块:工具、连接、环境。缺哪一块,后面都可能白忙活。今天我就把自己这些年摔过的跟头、总结的经验,掰开了跟你说。
逻辑分析仪:搞清状态机在干嘛
逻辑分析仪是我最常用的家伙。它的核心任务就是告诉你——LTSSM现在在哪个状态,下一步要去哪儿。
有个项目我记得特别清楚。一块板卡插上后,链路永远停在Detect状态。示波器看波形啥都正常,就是进不了Polling。后来用逻辑分析仪抓了一下LTSSM输出信号,发现状态机根本没收到来自对端的“Detect完成”标志。查了半天,原来是中间某个电平转换芯片虚焊了。
选逻辑分析仪时,我建议你注意这么几点:
- 通道数:至少16通道起步。PCIe的LTSSM信号、控制信号、再加上几条数据线,10个通道转眼就用完了。
- 采样率:别低于200MS/s。我见过有人拿50MS/s的去抓PCIe Gen3的链路训练……抓回来的波形就像马赛克,啥也看不出来。
- 触发深度:至少64M点。链路训练过程可能持续好几毫秒,浅了抓不全。
我的个人习惯:先把逻辑分析仪的触发条件设成“进入Recovery状态”,然后逐渐缩小范围。这样不用每次从头看到尾,省时间也省存储空间。
示波器:盯着信号的“气色”看
逻辑分析仪管状态,示波器管信号质量。说白了,逻辑分析仪告诉你“对不对”,示波器告诉你“好不好”。
你想想看,LTSSM训练失败很多时候不是逻辑错,而是信号太差。眼图都快闭了,对端根本解不出来正确的码流,那状态机当然没法往前走。
用示波器时,我重点关注三个东西:
- 差分信号摆幅:PCIe Gen3要求差分摆幅在800~1200mV之间。太低了对端检测不到,太高了可能损害发送器。
- 上升/下降时间:这个直接影响眼图睁开程度。PCIe Gen3的上升时间一般在50~100ps之间。
- 时钟抖动:总抖动(TJ)超过0.3UI,基本可以宣告链路训练失败。
注意:探头的带宽一定要够。测PCIe Gen3至少用2.5GHz的探头。我曾经图省事,拿了根800MHz的探头去测……结果测出来的眼图全是探头信号失真,根本不是芯片的问题。
协议分析仪:看报文里都说了什么
协议分析仪是个好东西,但很多人不会用。它就像是给PCIe链路装了个“监听器”——两边发的每一个TLP和DLLP,它都能给你一字不落地记下来。
协议分析仪和逻辑分析仪有什么区别?我打个比方:逻辑分析仪看的是“红绿灯变没变”,协议分析仪看的是“车里的人说了什么话”。
举个例子:链路训练里有个很常见的坑——ACK/NAK协议出问题。逻辑分析仪上你只能看到状态在Recovery和L0之间来回跳,但为啥跳?看不到。协议分析仪一抓,发现是对端发的ACK包一直没被回应,接收端只好不断重传。这种问题,没有协议分析仪,你能排查到崩溃。
用协议分析仪时,我建议你:
- 先设过滤:只抓LTSSM相关的报文(如TS1/TS2、SKP OS、ACK/NAK),别把所有流量都灌进来。
- 看时序戳:每个报文的到达时间戳必须精准。如果两个报文间隔异常,往往就是问题的线索。
- 注意重传次数:一旦发现某条报文重传超过3次,基本可以断定链路有信号质量问题。
环境设置:搞定硬件连接
工具再好,连不到被测设备上也是白搭。环境设置这块,看着是体力活,但很多坑就埋在这儿。
硬件连接:差分信号要用差分探头测,不要用单端探头去测单独一根线。PCIe的差分对是100欧阻抗匹配的,你单端测一根,负载变了,波形直接变形。
接地问题:示波器和逻辑分析仪要共地。我见过有人接了两个不同的电源插座,结果地环路导致50Hz工频干扰全进来了。那波形丑得,跟心电图上三级房颤似的。
探头位置:测量点尽量靠近芯片管脚。别在走线中途或者连接器上搭探头,那些地方的信号可能已经被过孔或走线损耗“蹂躏”过了。
| 元件 | 推荐测量点 | 不推荐测量点 |
|---|---|---|
| PCIe差分对 | 芯片管脚处 | 连接器焊盘处 |
| 参考时钟 | 靠近时钟缓冲器输出 | PCB边缘走线 |
| 复位信号 | 目标芯片复位管脚 | 电源轨上分压后 |
| 电源 | 去耦电容两端 | 大电解电容正极 |
聊聊我的调试初体验
第一次上手调LTSSM时,我就犯了所有新手都会犯的错——工具全接上,一股脑儿开始抓数据。结果呢?逻辑分析仪抓了半小时的数据,一看:95%都是正常通信,真正的故障波形只有几个微秒。我愣是找了三天才找出来。
避坑指南:先想清楚再接线,先规划好再开机。每个工具都有它的定位,别指望一把螺丝刀干所有活。
说白了,准备工作做得好,后面调链路的时间至少能省一半。磨刀不误砍柴工,这话一点不假。