3. UFS 链路组成:发送端(TX)、接收端(RX)、通道(Channel)

在做 UFS 误码率排查时,有个问题我经常问团队:你到底是在测谁?是发端的问题,收端的问题,还是中间通道的问题?搞不清楚这个,测 BER 就像在黑屋子里找黑猫。所以这一章,咱们把 UFS 链路的三个核心角色拆开来看。

我个人习惯把链路比作一套高速对讲系统:发送端(TX)是说话的人,接收端(RX)是听的人,通道(Channel)就是中间的空气和电线。任何一个环节出毛病,对方就听不清——对应到数字世界,就是误码。

UFS 链路组成架构 发送端(TX) 数据编码 串行器 驱动电路 通道(Channel) PCB 走线 连接器 阻抗匹配 接收端(RX) 均衡器 时钟恢复 解码器 三个环节环环相扣,任一环节的缺陷都会直接反映在 BER 上

3.1 发送端(TX)— 信号质量的起点

TX 的核心任务,就是把芯片内部并行的数据转换成高速串行信号,然后推出去。你想想看,这个信号要是从源头就不干净,后面再怎么补救都有限。

TX 的内部一般走三步:数据编码(比如 8b10b 编码)、串行化、驱动输出。编码是为了保证 DC 平衡和足够的跳变沿;串行器把宽位宽数据压成高速比特流;驱动电路决定信号的摆幅、上升时间和预加重。

我个人习惯把 TX 的预加重参数看得特别紧。为什么?因为在高速下,通道的损耗会把高频分量吃掉,预加重相当于提前给高频分量"加量",让信号到了 RX 那边不至于太塌。

关键参数速查:TX 摆幅(典型 200–600 mV 差分)、预加重(0–6 dB)、上升时间(通常 < 50 ps)。这些参数直接决定眼图的张开度。

我在项目中遇到过一件事:某款 UFS 产品在 Gear 4 速率下 BER 死活过不去,眼图跟眯着眼似的。查了一圈发现是 TX 的预加重设成了 0 dB。后来调到 3.5 dB,眼图立马就张开了,BER 从 1e-6 降到了 1e-12。说白了,源头的一个小参数,就能让结果天差地别。

下面是一个 TX 参数配置的示例,我在调试时经常用这类脚本快速验证:

# UFS TX 参数快速配置(寄存器映射)
tx_config = {
    'gear': 4,               # UHS Gear 4
    'swing_mv': 400,         # 差分摆幅 400 mV
    'pre_emphasis_db': 3,    # 预加重 3 dB
    'de_emphasis_db': 0,     # 去加重 0 dB
    'rise_time_ps': 48       # 上升时间 48 ps
}
# 写入 M-PHY 寄存器
for reg, val in tx_config.items():
    print(f"  TX_{reg} <- {val}")

3.2 接收端(RX)— 信号恢复的关键

信号经过通道传输后,到了 RX 这边往往已经面目全非了。RX 的工作,就是把这个"半残"的信号恢复成干净的数据。

RX 内部主要靠三个环节:均衡器(CTLE / DFE)、时钟恢复(CDR)和解码器。均衡器负责补偿通道的损耗,把被衰减的高频分量抬起来;CDR 从数据里提取时钟,保证采样位置正确;解码器把串行比特流还原成并行数据。

这里有个坑:均衡器不是越强越好。我在项目中见过有人把 CTLE 的增益拉到最高,结果低频噪声和高频信号一起放大,BER 反而更差。均衡器的设置要和通道的损耗曲线匹配,这需要看 S 参数来定。

避坑指南:我曾经遇到一个案例,RX 的 CDR 环路带宽设得太窄了,导致锁相环跟不上输入数据中的低频抖动,CDR 频繁失锁。调宽带宽后,BER 从 1e-7 降到了 1e-12。记住:CDR 带宽要和链路的抖动特性对齐,不是随便抄一个默认值就能用的。

你可能会问:怎么判断 RX 有没有正常工作?我习惯看两个指标:眼图在 RX 端的张开度和CDR 的锁定状态。眼图张不开,说明均衡没调好;CDR 频繁失锁,多半是带宽或抖动出了问题。

3.3 通道(Channel)— 信号的"高速公路"

通道是 TX 和 RX 之间的物理介质。UFS 链路的通道通常包括 PCB 走线、过孔、连接器 和 柔性电缆。每一个不连续点,都是信号反射的源头。

通道对信号的影响,可以用三个词概括:损耗、反射、串扰。

  • 插入损耗:信号幅度随频率升高而衰减,频率越高损耗越大。
  • 回波损耗:阻抗不连续导致信号反射,反射回来的信号会干扰主信号。
  • 串扰:相邻走线之间的耦合,会引入额外的噪声。

我记得有一次在产线上排查 BER 问题,发现同一条 PCB 上不同通道的 BER 差异很大。用 TDR 一测,好通道的阻抗是 85Ω ± 3Ω,差的那个通道因为过孔设计不合理,阻抗掉到了 72Ω。就这一个不连续点,BER 差了整整两个数量级。

我的建议:在做通道设计时,一定要控制好阻抗公差(±5% 以内),尤其是过孔和连接器区域。能用仿真提前看一下 S 参数就别省这一步。通道的损耗预算,建议留 2–3 dB 的裕量。

3.4 链路协同与 BER

TX、Channel、RX 三个环节不是孤立的。你想想看:TX 输出很好,但通道损耗太大,RX 再强也救不回来。反过来,通道设计得不错,但 TX 的预加重没开,信号本身就很差,RX 也无力回天。

我把三者之间的关系整理成了一张对比表,方便你排查时对照:

环节 核心指标 对 BER 的典型影响 排查优先级
发送端(TX) 摆幅、预加重、上升时间 信号幅度不足 → 眼图闭合 → BER 升高 ★ 第一优先
通道(Channel) 插入损耗、回波损耗、阻抗 信号衰减 + 反射 → 码间干扰 → BER 劣化 ★ 第一优先
接收端(RX) 均衡增益、CDR 带宽、抖动容限 均衡不足或过均衡 → 采样误判 → BER 上升 ★ 第二优先

排查 BER 问题时,我习惯先锁定 TX 和通道。为什么呢?因为这两个环节的问题通常更"硬"——要么硬件设计没做好,要么参数没调对。RX 的问题有时候会和前两个环节的表现重叠,所以放到后面再细查。

一句话总结:UFS 链路的 BER 是 TX、Channel、RX 三者的"合力结果"。找到短板,比盲目调参数重要得多。