3、M-PHY 协议层基础:数据包结构、8b/10b编码、符号映射、速率等级(Gear1-Gear4)

各位工程师朋友,大家好。今天我们聊聊M-PHY的协议层基础。

说实话,很多做硬件的兄弟一听到「协议层」就头大,觉得那是软件工程师的事。我以前也这么想,直到有一次调试MIPI接口,示波器抓出来的波形怎么看怎么对,但设备就是不通。折腾了两天,最后发现是数据包里的符号映射搞错了。嗯,从那以后,我再也不敢跳过协议层了。

3.1 数据包结构:M-PHY怎么「说话」

M-PHY的数据传输,说白了就是发「包」。每个包就像一封信,有信封、有正文、有落款。

一个典型的数据包长这样:

| 前导码 | 帧头 | 数据载荷 | CRC校验 | 帧尾 |
  • 前导码:告诉接收端「我要发数据了,准备好」。我习惯把它理解成敲门声。
  • 帧头:包含包的类型、长度、目标地址等信息。相当于信封上的收件人信息。
  • 数据载荷:真正要传的数据,长度可变。
  • CRC校验:循环冗余校验,用来检查数据在传输过程中有没有出错。
  • 帧尾:表示包结束。

重要提醒:M-PHY的包结构是分层的。物理层只管发比特流,协议层才负责解析这些包。你画PCB时不用管包结构,但做信号完整性分析时,必须知道哪些是关键的跳变沿。

我在项目中遇到过一种情况:某款SoC的MIPI接口在高速模式下偶尔丢包。查了半天,发现是前导码的时序没满足要求。接收端还没准备好,数据就来了,自然就丢了。所以,前导码的长度和时序,一定要严格按照规格书来。

3.2 8b/10b编码:为什么多花25%的带宽?

8b/10b编码,就是把8位数据变成10位来传输。你可能会问:这不是浪费带宽吗?

没错,带宽利用率只有80%。但为什么还要用?

原因有三:

  1. 直流平衡:8b/10b编码保证发送的0和1数量大致相等。这样信号的平均电平是稳定的,不会出现直流偏移。我在做高速差分线设计时,最怕的就是直流偏移,它会直接导致眼图闭合。
  2. 时钟恢复:编码后的数据有足够的跳变沿,接收端可以从中恢复出时钟信号。你想想看,如果连续发一串0,接收端怎么知道什么时候该采样?
  3. 错误检测:某些非法码字可以用来检测传输错误。

个人经验:8b/10b编码后的数据,频谱能量更均匀。这对EMI设计有好处。我曾经在一个项目中,用了8b/10b编码后,辐射发射直接降了3dB。当然,代价是有效数据速率降低了20%。

3.3 符号映射:比特流里的「摩斯密码」

8b/10b编码后的数据,还要映射成物理层能识别的「符号」。M-PHY使用多种符号:

符号类型 用途 编码示例
数据符号 (D) 传输普通数据 D.x.y
控制符号 (K) 帧定界、同步 K28.5, K28.1
空闲符号 无数据传输时保持链路活跃 连续D0.0

这里有个坑,我踩过:K28.5符号是同步用的,它的编码是特殊的。如果你在PCB走线时,让K28.5符号的跳变沿受到了严重衰减,接收端就找不到同步头了。整个链路就会失锁。

说白了,符号映射就是把数字世界的「0和1」翻译成物理世界的「高和低」。翻译规则错了,或者翻译过程中信号失真了,通信就会失败。

3.4 速率等级:Gear1到Gear4

M-PHY定义了多个速率等级,从低速到高速:

速率等级 数据速率 (Gbps/lane) 典型应用
Gear1 1.248 低速控制、初始化
Gear2 2.496 摄像头、显示屏
Gear3 4.992 高分辨率显示
Gear4 9.984 超高清、多摄像头

每个Gear的速率是前一个的两倍。为什么?因为M-PHY使用倍频技术,通过调整PLL的倍频因子来实现。

注意:Gear越高,对PCB走线的要求越苛刻。Gear4的速率接近10Gbps,差分阻抗控制、串扰抑制、过孔优化,一个都不能少。我曾经见过一个项目,Gear1和Gear2都跑得好好的,一上Gear3就报错。最后发现是走线长度不匹配,差了5mil都不行。

我个人习惯,在设计初期就按最高Gear来约束走线。这样即使后期降速使用,也有足够的裕量。你想想看,如果按Gear1设计,后期想升级到Gear3,那PCB基本要重做。

3.5 知识体系总览

下面这张图,是我自己总结的M-PHY协议层知识体系。你可以把它当成一张地图,随时回来看看。

M-PHY 协议层知识体系 数据包结构 8b/10b编码 符号映射 速率等级 前导码 | 帧头 | 数据 | CRC | 帧尾 直流平衡 | 时钟恢复 | 错误检测 D符号 | K符号 | 空闲符号 Gear1 ~ Gear4 核心关系:协议层 → 编码 → 映射 → 物理层 物理层:差分走线、阻抗控制、端接 ⚠️ 避坑提示 协议层问题往往表现为物理层症状。先查协议层,再查物理层,能少走弯路。

这张图把四个核心模块串起来了。数据包结构是「骨架」,8b/10b编码是「血液」,符号映射是「语言」,速率等级是「速度」。四者缺一不可。

我的建议:做M-PHY设计时,先把协议层搞清楚,再动手画PCB。否则,你画出来的差分线再漂亮,协议层不匹配,也是白搭。我曾经见过一个团队,花了两周优化走线,结果发现是协议层的符号映射配错了。嗯,这种冤枉路,咱们不走。

专注资料整理