物理层 M-PHY 简介:速率、模式、线缆归纳总结

M-PHY 是 UFS 物理层的核心,说白了它就是数据在芯片间跑的那条“路”。你想想看,没有这条路,UFS 协议栈再牛也传不了数据。我刚接触 M-PHY 时也觉得它只是一堆参数,直到在调试链路训练时遇到速率协商失败,才真正理解这些参数有多重要。下面我把速率、工作模式和线缆规范揉碎了讲给你听。

速率等级:从 Gear 到 HS/PWM

M-PHY 的速率不是简单的一个数字,而是按 Gear(档位) 划分的。每个 Gear 下又分两种模式:高速模式 HS 和 低功耗模式 PWM。我习惯把 Gear 想象成汽车的档位——挂到不同档,跑的速度就不一样。

Gear HS 速率 (Gbps/lane) PWM 速率 (Mbps/lane) 典型场景
Gear 1 1.248 3.9 初始化、链路训练
Gear 2 2.496 7.8 低功耗数据交互
Gear 3 3.744 11.7 普通传输
Gear 4 5.808 15.6 高性能传输
Gear 5 9.600 23.4 UFS 3.1+ 高速

嗯,这里要注意:HS 模式 是差分信号,功耗高但速度快;PWM 模式 是单端信号,功耗极低但速度慢。我记得有一次在低功耗场景下忘切到 PWM,导致待机电流超标,后来改成 Gear 1 PWM 才过。

我的小技巧: 链路启动时先以 Gear 1 HS 做训练,等稳定后再升档。别一上来就冲 Gear 5,有些 host CPU 跟不上线速率。

工作模式详解

M-PHY 的工作模式不止 HS 和 PWM 这两种状态。实际上每个 Gear 下还有 子状态,比如 HS-G1A、HS-G1B 之类。但咱们做实操时,只需要掌握三个关键模式:

  • HS-BURST:数据爆发传输,速率最高,必须差分线。
  • PWM-BURST:慢速但省电,常用于控制命令或空闲期。
  • STALL / HIBERN8:链路挂起或休眠,不传输数据,功耗几乎为零。

我曾经踩过一个坑:在 STALL 状态下发命令唤醒,结果忘记先切回 PWM-BURST 模式,导致链路超时。所以状态切换的顺序一定要记牢。

核心要点: 任何速率切换都必须经过 SAVE 帧确认,硬件自动完成,但软件侧要等待 ready 标志。

线缆与差分信号约束

M-PHY 物理层依赖 差分对(D+ / D-)传输。一条 lane 就是一对差分线。UFS 通常用 2-lane 或 4-lane 配置。线缆方面,我建议重点关注以下几点:

  1. 差分阻抗:必须是 100 Ω ±10%,否则回波损耗会把眼图压坏。
  2. 对间 skew:同一 lane 的两根线长度差不能超过 5ps(约 0.5mm),我那年就因为 PCB 走线差了 1mm,导致 HS 模式训练不过。
  3. 屏蔽:差分对之间建议加地线隔离,否则串扰会让误码率飙升。

警告: 不要把差分对跨过分割的电源层!我在一个项目中见过,结果 HS 速率从 Gear 4 直接掉到 Gear 1,找了两天才发现是参考平面不连续。

一张图看懂 M-PHY 知识结构

下面这张图把速率、模式和线缆的关系串起来了,每个节点都对应一个实操要点。

M-PHY 物理层知识体系 M-PHY 物理层 速率等级 (Gear) 工作模式 线缆与差分对 Gear 1 ~ Gear 5 HS / PWM HS-BURST PWM-BURST 差分对 100Ω 屏蔽 & skew Gear 越高 → HS 速率越高 PWM 速率低但省电 HS vs PWM 切换需 SAVE 帧 STALL/HIBERN8 是休眠态 差分线长度差 < 0.5mm 参考平面连续 实操提醒 1. 链路启动时从 Gear 1 HS 开始,没必要直接上最高档。 2. 差分对必须等长,我吃过亏,2mm 的误差就让 Gear 4 眼图闭合。 3. 不要忽略 PWM 模式,它在待机功耗上能省几十毫安。

避坑指南:我亲手踩过的三个坑

  1. 速率协商顺序错乱:建立链路时不要直接发 HS-BURST 命令,必须先走 SAVE 帧 + Gear 1 PWM 握手。我曾经跳过了这一步,结果 host 和 device 的速率表对不上,链路直接挂死。
  2. 差分线走线跨分割:如上面 warning 所说,参考平面断裂会导致阻抗突变。我建议在 PCB 布局阶段就把差分对包在完整 GND 层上,宁可绕一点路也别跨缝。
  3. 忽视 PWM 模式时序:PWM 模式虽然慢,但上升沿/下降沿时间要求比 HS 更严。有一次我盲目延长了线缆长度,结果 PWM 模式下的头跳变丢失,训练超时。后来按 M-PHY 规范把线长控制在 15cm 以内才稳定。

一句话总结: M-PHY 物理层你只需要记住 Gear 决定速度上限,HS/PWM 决定实时功耗,差分线质量决定能不能跑上去。三者缺一不可。