第3章 JESD204B链路建立过程:代码组同步、帧同步、用户数据

JESD204B的链路建立,说白了就三步:先对好眼(代码组同步),再找好帧边界(帧同步),最后才能正常传数据。很多工程师一上来就查数据对不对,其实前两步没走稳,后面全是白搭。这一章咱们就掰开揉碎,把这三个阶段吃透。

核心要点:链路建立是一个严格的握手过程——发送器和接收器必须按顺序完成CGS、ILA、用户数据三个阶段。任何一步没通过,链路都会回退重来。

JESD204B 链路建立三阶段流程 初始状态(上电/复位) 阶段一:代码组同步 (CGS) 发送器连续发送 K28.5 接收器检测 ≥4 个无错误 /K/ → SYNC~ 置高 阶段二:帧同步 (ILA) 发送 /R/ /A/ /Q/ 多帧序列 接收器确认帧边界 → 同步 阶段三:用户数据传输 正常传输用户数据 持续监控链路状态 ⚠ 链路建立完成后,任何阶段检测到错误都会触发重新同步(回退到 CGS) SYNC~ 信号全程参与握手,是排查链路状态的“第一把手” 检测失败 帧同步失败

3.1 代码组同步(CGS)—— 先把字节边界对齐

CGS 阶段是所有数据传递的基础。你想想看,如果接收器连字节的起始位都找不到,后面的数据怎么解?

这个阶段的核心动作很简单:发送器连续发送 K28.5 字符(也就是逗号字符 /K/),接收器在接收 bit 流中寻找这个特定的 10 位码组。

具体流程是这样的:

  1. 上电或复位后,接收器将 SYNC~ 信号拉低(无效状态)。
  2. 发送器检测到 SYNC~ 为低后,开始在所有通道上连续发送 K28.5 字符。
  3. 接收器持续搜索 /K/ 字符。找到第一个后,继续检查后续是否连续无误。
  4. 当接收器检测到至少 4 个连续无错误的 /K/ 字符时,确认字节对齐完成。
  5. 接收器将 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 的命脉——这话一点都不夸张。