第3章 JESD204B链路建立过程:代码组同步、帧同步、用户数据
JESD204B的链路建立,说白了就三步:先对好眼(代码组同步),再找好帧边界(帧同步),最后才能正常传数据。很多工程师一上来就查数据对不对,其实前两步没走稳,后面全是白搭。这一章咱们就掰开揉碎,把这三个阶段吃透。
核心要点:链路建立是一个严格的握手过程——发送器和接收器必须按顺序完成CGS、ILA、用户数据三个阶段。任何一步没通过,链路都会回退重来。
3.1 代码组同步(CGS)—— 先把字节边界对齐
CGS 阶段是所有数据传递的基础。你想想看,如果接收器连字节的起始位都找不到,后面的数据怎么解?
这个阶段的核心动作很简单:发送器连续发送 K28.5 字符(也就是逗号字符 /K/),接收器在接收 bit 流中寻找这个特定的 10 位码组。
具体流程是这样的:
- 上电或复位后,接收器将 SYNC~ 信号拉低(无效状态)。
- 发送器检测到 SYNC~ 为低后,开始在所有通道上连续发送 K28.5 字符。
- 接收器持续搜索 /K/ 字符。找到第一个后,继续检查后续是否连续无误。
- 当接收器检测到至少 4 个连续无错误的 /K/ 字符时,确认字节对齐完成。
- 接收器将 SYNC~ 信号置高(有效状态),通知发送器可以进入下一阶段。
我个人习惯:在调试 CGS 阶段时,我会优先用示波器抓一下 SYNC~ 信号。如果这个信号一直拉低不动,说明接收器根本没检测到有效的 /K/ 字符。这时候别急着查配置,先看看参考时钟和差分信号质量——我在项目中遇到过好几次,都是时钟抖动过大导致 8B/10B 解码失败。
⚠ 避坑指南:我曾经在一个 4 通道的板卡调试中,3 路 CGS 都过了,就第 2 路卡死。折腾了两天才发现,是 PCB 走线时第 2 路的 CML 信号过孔太多,眼图已经闭合了。硬件基础不牢,协议层再怎么调也没用。
3.2 帧同步(ILA)—— 找到数据的“帧边界”
CGS 完成后,字节边界是对齐了,但数据帧的边界还没定。ILA(Initial Lane Alignment)阶段就是干这个活的。
SYNC~ 置高后,发送器开始发送 ILA 序列。这个序列由若干个多帧(Multi-frame)组成,每个多帧以 /R/ 字符(K28.0)开头,以 /A/ 字符(K28.3)结尾。中间还会插入 /Q/ 字符(K28.4)来携带链路配置参数。
ILA 序列的结构:
| 多帧编号 | 起始字符 | 中间内容 | 结束字符 | 作用 |
|---|---|---|---|---|
| 第 1 帧 | /R/ | 数据填充 | /A/ | 标记多帧起始 |
| 第 2 帧 | /R/ | /Q/ + 配置参数 | /A/ | 传递链路配置(LMFS 等) |
| 第 3 ~ N 帧 | /R/ | 数据填充 | /A/ | 巩固帧同步 |
接收器在 ILA 阶段会做两件事:一是识别 /R/ 和 /A/ 字符来确定多帧边界,二是检查 /Q/ 携带的配置参数是否与本地一致。如果都匹配,接收器就认为帧同步建立,准备接收用户数据。
关键点:ILA 失败最常见的原因是 LMFS 参数不匹配。发送器和接收器的 L(通道数)、M(转换器数)、F(每帧字节数)、S(每转换器样本数) 必须完全一致,否则 /Q/ 里的校验信息就对不上。
顺便说一句,ILA 阶段的多帧数量是由寄存器配置的。我一般会把它设成 4 个多帧,既保证同步可靠性,又不浪费太多时间。
3.3 用户数据传输——终于可以跑数据了
ILA 完成后,链路进入用户数据阶段。这时候发送器开始发送正常的采样数据,接收器按照之前对齐的字节边界和帧边界来解析。
用户数据以帧为单位传输,每帧包含 F 个字节。对于多通道配置,数据会在各通道间进行轮循分配。接收器需要按照相同的映射关系把数据还原回去。
这个阶段有三个监控点:
- 帧同步状态:接收器持续检查帧头是否正确,一旦发现异常立即拉低 SYNC~,触发重新同步。
- 错误计数:8B/10B 解码错误、CRC 校验错误都会被记录下来,供上层软件读取。
- 链路延迟:在用户数据传输过程中,接收器还会持续测量各通道间的延迟差,用于弹性缓冲调整。
我建议:在产品量产测试中,除了常规的功能测试外,加一个“链路稳定性测试”——在正常传输用户数据时,人为注入少量错误(比如降低某个通道的 SNR),看链路能否正确触发重同步并恢复。这能筛出不少硬件边缘问题。
3.4 常见故障速查表
下面这个表是我自己总结的,面试时也经常被问到。各位可以直接拿去做排查 checklist。
| 故障现象 | 可能原因 | 排查方向 |
|---|---|---|
| SYNC~ 始终拉低 | CGS 未完成 | 检查时钟、CML 信号质量、8B/10B 解码 |
| CGS 通过了但 ILA 失败 | LMFS 参数不匹配 | 核对发送器和接收器的配置寄存器 |
| ILA 偶尔失败 | 多帧数量不足 / 噪声干扰 | 增加 ILA 多帧数量;检查电源噪声 |
| 用户数据偶发错误 | 通道间 skew 过大 | 检查 PCB 等长设计;调整弹性缓冲深度 |
| 链路频繁重同步 | 参考时钟不稳定 | 测量时钟抖动;检查 PLL 锁定状态 |
3.5 调试中的一点心得
做了这么多年 JESD204B 调试,我有一个很深的感受:链路建立的问题,九成以上出在 CGS 阶段。为什么?因为 CGS 是纯物理层的事情,时钟质量、信号完整性、PCB 走线的问题全都会在这里暴露。
我分享一个典型的排查套路——当链路建不起来时,先看 SYNC~ 信号有没有拉高过。如果没有,直接查硬件;如果有拉高过但又掉下来了,那问题可能在 ILA 或上层配置。
⚠ 我曾经踩过一个坑:某项目在实验室调试一切正常,一到客户现场就频繁断链。查了三天,最后发现客户现场的参考时钟是从一个老旧的时钟芯片分出来的,抖动指标已经快超限了。换成专用的时钟 Buffer 后问题消失。所以,时钟是 JESD204B 的命脉——这话一点都不夸张。