第二章:UFS物理层:M-PHY介绍、UniPro层概述、链路速率
好,咱们正式开始啃UFS的物理层。这一章不会让你打瞌睡,毕竟链路能不能跑起来,全看这层硬功夫。我当年最早接触M-PHY时,也觉得各种速率、子类型让人头晕,但搞明白之后再看UFS启动流程,就像看一张通明的路线图,心里踏实多了。
2.1 物理层到底管什么?
简单说,物理层就是UFS设备之间那条“公路”。它负责把上层协议的数据转换成电信号,在差分管线上跑。
UFS的物理层基于M-PHY标准,这不是UFS独享的,MIPI联盟下好多接口都用它。M-PHY本身是一个高速、低功耗、差分串行接口,专门为移动设备设计。
你可能要问:为什么不用USB PHY?原因其实很简单——功耗和面积。M-PHY能在极低功耗下跑出高带宽,这对手机这种电池供电的设备来说太关键了。我参与的第一个UFS项目,主机侧就因为功耗预算卡得很死,最后全靠M-PHY的省电模式才过了认证。
2.2 M-PHY的物理层特性
M-PHY使用两条差分信号线:MIPI_D_[P/N] 和 MIPI_M_[P/N]。前者是主通道,后者管理控制信号。不过UFS实际只用了主通道,管理功能由UniPro层接管了。
| 参数 | 说明 |
|---|---|
| 信号类型 | 差分信号,抗干扰能力强 |
| 工作电压 | 0.2V ~ 1.2V,取决于子类型和速率模式 |
| 数据编码 | 8b/10b 编码(HS模式),保证直流平衡 |
| 时钟方案 | 嵌入时钟,无需额外时钟线 |
| 链路拓扑 | 点对点,一对一连接 |
M-PHY 的子类型:M-PHY定义了多个子类型(Gear),就像一个变速箱有不同的档位。UFS通常使用以下两种:
- HS-GEAR(高速档):用于大数据传输,速率高,功耗相对大一点。
- PWM-GEAR(脉宽调制档):用于控制命令和小数据传输,功耗极低。
每个子类型下又分 A系列 和 B系列。A系列使用低速摆幅,适合短距离;B系列信号摆幅稍大,可以走更远的距离。我在调试一块开发板时,就因为PCB布线稍长,HS-GEAR的A系列信号眼图不过关,被迫换成了B系列才能稳定通信。这种坑,你早晚也会踩到。
2.3 UniPro层概述
物理层只负责送比特流,那谁来决定这些比特怎么组织、哪些是命令、哪些是数据?这就是UniPro层的事。
UniPro(Unified Protocol)是MIPI联盟定义的链路层和网络层协议。它跑在M-PHY上面,给上层(UFS应用层)提供一个可靠的点对点通信通道。
UniPro内部很有意思,它分了好几个子层:
- CPORT(通信端口):上面UFS命令、数据、任务管理请求都是通过CPORT传下来的。
- DME(设备管理实体):负责配置链路参数,比如速率、电源模式。
- PHY适配层:直接和M-PHY硬件打交道。
- 传输层/数据链路层:负责分包、重传、流量控制。
说起来有些抽象,我画个简化图你就明白了。
上图很清晰地展示了UFS协议栈的三层架构:UFS应用层、UniPro层、M-PHY层。链路启动时,DME会在UniPro内部协商参数,再通过PHY适配层告诉M-PHY该用哪个Gear、哪个速率。
说白了,UniPro是“交通警察”,M-PHY是“高速公路”。没有UniPro的调度,M-PHY只能盲目地传比特,根本连不上。
2.4 链路速率
终于说到大家最关心的性能数据了。链路速率直接决定了UFS能跑多快。
M-PHY的速率不是固定的,它有一个范围。UFS设备启动时会通过协商机制确定双方都支持的最高速率。具体的速率等级如下:
| M-PHY 子类型 | 单通道速率(Gbps) | 有效数据速率(注1) |
|---|---|---|
| HS-GEAR1 | 1.248 Gbps | 约 1248 MB/s × 0.8 = 约 998 MB/s |
| HS-GEAR2 | 2.496 Gbps | 约 2496 MB/s × 0.8 = 约 1997 MB/s |
| HS-GEAR3 | 4.992 Gbps | 约 4992 MB/s × 0.8 = 约 3994 MB/s |
| HS-GEAR4 | 9.984 Gbps | 约 9984 MB/s × 0.8 = 约 7987 MB/s |
注1: 8b/10b编码的有效载荷是80%,因为每10个bit有2个是控制/编码位。所以理论极限速率要打八折。
这里有个常识:UFS链路是全双工的,收发可以同时进行。所以理论上一条HS-GEAR3通道就有接近4 GB/s的吞吐能力。加上UFS支持多通道(通常1条或2条),整体带宽非常可观。
但注意,理论上限和实际体验是两码事。我遇到过很多次,链路协商速率是HS-GEAR3,但实际跑性能测试时,读写带宽就是上不去。
避坑指南:别只盯着链路速率!我曾经调试过一款UFS 3.1设备,链路协商跑到HS-GEAR4,但实际读写只有700 MB/s。最后定位发现是UniPro层流量控制参数没调对,导致了频繁重传。链路速率只是基础,协议栈的每一层都可能成为瓶颈。
2.5 链路启动时的速率协商
UFS上电后,主机和从机并不是直接就干到最高速。它们会经历一个链路启动流程:
- 上电复位:双方进入初始状态,使用最低速的PWM-GEAR1通信。
- UniPro 初始化:通过DME交换配置信息,互相告诉对方“我支持哪些Gear”。
- 速率升级:从低速PWM逐渐切换到高速HS模式。这个过程叫 PA_Init,是关键步骤。
- 进入工作状态:选定双方都支持的最高速率,开始正常传输。
每次切换到更高速率时,M-PHY都要重新训练,调整均衡器参数。如果PCB走线质量不好或者噪声太大,训练就会失败,链路回退到低速模式。这种现象我在量产验证时见过太多次了——多亏了链路启动日志分析,才能快速定位硬件设计缺陷。
好了,这一章就到这。记住,物理层是UFS的基石,M-PHY负责传比特,UniPro负责管交通,链路速率是性能的门票。后面讲链路启动流程时,你会反复回到这一章的内容。