UFS概述与链路均衡的重要性

1.1 什么是UFS?我为什么选择它?

UFS,全称Universal Flash Storage,说白了就是给手机、平板用的高速存储接口规范。它接替了eMMC的位置,让数据读写快了一个量级。

我记得最早接触UFS是在2016年,那时候还是UFS 2.0,速度也就1.5GB/s左右。现在回头看,确实不算快。但到了UFS 3.0,单通道速率飙到11.6Gbps,再到如今的UFS 4.0,单通道已经跑到23.2Gbps了。翻了两番都不止。

为什么会这么快?因为UFS用了SerDes(串行器/解串器)技术。不像eMMC那种并行总线,UFS走的是高速差分串行链路。信号差分的,速率上去了,但问题也来了——链路均衡。

核心要点:UFS的高速传输本质上是SerDes链路,信号速率每提高一倍,信号完整性挑战增加三倍不止。

1.2 UFS标准演进简史

我习惯把UFS标准的演进画成一张表,这样大家一眼就能看明白。

版本 发布年份 单通道速率 关键特性
UFS 1.1 2012 1.5 Gbps 基础版,替代eMMC 4.5
UFS 2.0 2013 5.8 Gbps HS-G2,全双工,性能翻倍
UFS 2.1 2016 5.8 Gbps 增加了链路训练,开始重视均衡
UFS 3.0 2018 11.6 Gbps HS-G3,引入M-PHY v4.1
UFS 3.1 2020 11.6 Gbps 优化功耗,完善均衡算法
UFS 4.0 2022 23.2 Gbps HS-G5,PAM3调制,均衡难度再升级

你想想看,从1.5Gbps到23.2Gbps,速率翻了15倍。信号在PCB上走同样的距离,但眼睛睁开的大小却越来越小。这就是为什么要搞链路均衡。

1.3 M-PHY与UniPro:UFS的分层结构

UFS的物理层叫M-PHY,链路层叫UniPro。这两层的分工非常清晰:

  • M-PHY:负责物理信号传输,包括差分信号、时钟恢复、预加重、去加重等
  • UniPro:负责链路的建立、训练、均衡参数协商

我遇到过不少工程师,只关心M-PHY,觉得UniPro是软件的事。嗯,这里要注意:链路均衡的参数配置,恰恰是UniPro在管理。你不懂UniPro,均衡调起来就是瞎蒙。

1.4 链路均衡:为什么要做?

高速信号在PCB上传播,会遇到各种麻烦:趋肤效应、介质损耗、阻抗不连续、反射、串扰……这些都会让信号变形。信号变形了,接收端就判断不了0和1,误码率(BER)就上去了。

链路均衡,说白了就是在发送端和接收端做一些补偿,把变形的信号拉直。我习惯把它比作眼镜:信号原本是清晰的,但传输过程让它模糊了,眼镜(均衡器)帮它重新对焦。

重要提醒:千万不要以为速率低就不用做均衡。我见过UFS 2.0的项目因为layout走线太长,信号衰减严重,最后不得不加均衡。速率越低,能容忍的margin越大,但一旦接近极限,均衡就是救命稻草。

1.5 链路均衡的核心方法

UFS链路均衡主要有三种手段,我按照实际使用的顺序列出来:

  1. 预加重(Pre-emphasis):发送端在信号跳变时增加幅度,补偿高频损耗
  2. 去加重(De-emphasis):发送端维持跳变幅度,压低非跳变幅度,效果和预加重类似
  3. 接收端均衡(CTLE/DFE):接收端用模拟或数字滤波器恢复信号

我曾经在调试一个UFS 3.0的项目时,发送端预加重怎么调都没用,眼图就是打不开。后来发现是PCB过孔阻抗偏大,反射太严重。加了接收端的CTLE才稳住。所以说,均衡不是万能的,layout基础没打好,均衡也救不回来。

1.6 链路均衡的信号处理流程

下面这张图可以帮助你理解整个流程:

UFS链路均衡信号处理流程 发送端 M-PHY + 预加重 传输链路 PCB走线 + 过孔 接收端 CTLE + DFE 链路训练(Link Training)—— 均衡参数自动协商 发送端预加重系数 接收端CTLE增益 DFE抽头系数 链路训练在每次上电或主机复位时进行,自动匹配最优均衡参数 若训练失败,链路降速重训或报告主机

整个流程闭环的思路是:发送端通过预加重把信号推出去,经过有损链路后,接收端再用CTLE和DFE把信号捞回来。至于预加重要加多少、CTLE要设多高,全靠链路训练阶段协商出来。

1.7 为什么要关注均衡?— 一个测试案例

我手头有个UFS 3.0项目的实测数据,分享给大家:

条件 眼高(mV) 眼宽(UI) 误码率 结论
无均衡 80 0.25 1e-6 眼睛接近闭合,不可用
仅发送端预加重 180 0.42 1e-9 改善明显,但仍有抖动
发送端预加重 + CTLE 280 0.58 1e-12 眼睛完全打开,裕量充足
完整均衡(预加重+CTLE+DFE) 320 0.65 <1e-15 最优状态,满足UFS 3.0标准

你看,没有均衡的时候,眼高只有80mV,眼宽0.25UI,误码率1e-6。这是什么概念?UFS标准要求接收端误码率必须低于1e-12。差了整整6个数量级。加了均衡之后,直接拉到1e-15以下。

实战小贴士:我在调均衡的时候,习惯先把发送端预加重调到最大,看眼图有没有改善。如果有改善但还不够,再加CTLE。如果CTLE边际效益递减了,才启用DFE。DFE功耗大、复杂度高,能不用就不用。

1.8 本章小结

UFS的链路均衡,说白了就是高速信号传输的保命手段。速率越高,信号越容易变形,均衡就越重要。从UFS 2.0到UFS 4.0,均衡已经从“可选”变成了“必备”。

我个人觉得,一个合格的UFS工程师,至少要懂三件事:第一,知道均衡的原理;第二,会看眼图;第三,能通过配置均衡参数优化信号质量。

接下来的章节,我会带着大家把这三件事逐个击破。别急,一步步来。