3、UFS协议基础:物理层、链路层、传输层、应用层的基本架构与关键术语

UFS(Universal Flash Storage)并不是一条简单的“高速串行总线”,而是一套分层协议栈。它把电气信号、链路可靠性、命令语义和上层应用抽象拆成四层:物理层(M-PHY)、链路层(UniPro)、传输层(UFS Transport Protocol)和应用层(UFS Application Layer)。理解这四层的分工与接口,是后续做硬件设计、信号完整性验证和协议调试的基础。

核心记忆:M-PHY 负责“怎么把比特送出去”,UniPro 负责“怎么可靠地送到对端”,UTP 负责“送的是什么命令”,UFS 应用层负责“这条命令对存储设备意味着什么”。

3.1 四层架构总览

从主机 SoC 到 UFS 设备,数据和控制信息自上而下逐层封装,自下而上逐层解封装。每一层只关心自己的职责,并通过明确定义的接口与相邻层交互。下图展示了四层协议栈的纵向关系以及各层的关键对象。

UFS 四层协议栈与关键对象 主机侧 (Host) 设备侧 (Device) 应用层 UAP SCSI 命令集 · UPIU 封装 · 逻辑单元 LUN · 任务标签 命令语义 读写/查询/任务管理 传输层 UTP UTP 传输头 · 数据段 · 响应 UPIU · 流量控制 端到端传输 命令/数据/响应 链路层 UniPro L1.5 PHY适配 · L2 数据链路 · L3 网络 · L4 传输 可靠传输 重传/流控/多路复用 物理层 M-PHY HS-G1~G5 · PWM-G1~G7 · Lane · 差分对 · 8b/10b 编码 电气信号 速率/功耗/同步 封装方向:应用层 → 传输层 → 链路层 → 物理层 解封装方向:物理层 → 链路层 → 传输层 → 应用层

3.2 物理层 M-PHY:速率、Lane 与信号状态

M-PHY 是 UFS 的电气基础,定义了差分信号、时钟嵌入方式、编码规则和功耗状态。UFS 使用 M-PHY 而非传统并行总线,关键参数包括:

  • Lane(通道):UFS 通常使用 1 条或 2 条 Lane,每条 Lane 由一对差分线组成,支持双向通信。
  • HS 模式:高速模式,HS-G1 为 1.25 Gbps/lane,HS-G4 为 11.6 Gbps/lane,HS-G5 可达 23.2 Gbps/lane。
  • PWM 模式:低速模式,用于初始化、命令传输和低功耗场景,速率从 PWM-G1 到 PWM-G7。
  • 信号状态:LINE RESET、SLEEP、STALL、BURST 等,用于控制链路启停和功耗切换。
硬件设计提示:M-PHY 的差分对阻抗通常要求 100Ω 差分,走线等长误差需控制在 5 mil 以内;HS-G4/G5 对过孔、连接器和 PCB 材料损耗非常敏感,建议使用低损耗板材并做 S 参数仿真。

3.3 链路层 UniPro:可靠传输与流控

UniPro 是 UFS 的链路层协议,源自 MIPI 的 UniPro 规范。它把 M-PHY 的原始比特流组织成可靠的帧传输,主要职责包括:

  1. 数据链路层(L2):负责帧同步、CRC 校验、确认与重传,保证数据无差错传输。
  2. 网络层(L3):提供多路复用和路由,区分不同的逻辑通道。
  3. 传输层(L4):提供端到端的连接管理,包括 CPort 和 CPort 之间的数据流。

UniPro 使用 CPort(Connection Port)作为通信端点,每个 CPort 有唯一的 ID。UFS 中常见的 CPort 包括:

CPort 名称 方向 用途
CPort 0 双向 UFS 命令与响应 UPIU
CPort 1 双向 任务管理 UPIU
CPort 2 设备→主机 设备发起的通知与异常
CPort 3 双向 数据读写传输

3.4 传输层 UTP:UPIU 与命令语义

UTP 层定义了 UFS 的UPIU(UFS Protocol Information Unit),这是主机与设备之间交换信息的基本单元。UPIU 分为三类:

  • 命令 UPIU:主机向设备发送操作请求,如读、写、查询、任务管理。
  • 数据 UPIU:承载实际读写数据,与命令 UPIU 配对使用。
  • 响应 UPIU:设备返回执行结果,包含状态码和必要参数。

一个典型的读操作流程如下:

主机发送 Command UPIU (READ)
  → 设备返回 Data UPIU (数据)
  → 设备返回 Response UPIU (状态)

UPIU 头部包含 Transaction Type、Flags、LUN、Task Tag、Data Segment Length 等字段。其中 Task Tag 用于匹配命令与响应,LUN 用于区分不同的逻辑单元。

常见误区:把 UPIU 当成“包”来理解,忽略其头部字段的严格顺序和字节对齐要求。实际调试中,UPIU 头部字段错位会导致设备直接返回错误响应,甚至链路挂死。

3.5 应用层:SCSI 命令集与逻辑单元

UFS 应用层采用 SCSI 命令集作为上层语义,常见的命令包括:

  • READ (10/16):从指定 LUN 读取数据。
  • WRITE (10/16):向指定 LUN 写入数据。
  • INQUIRY:查询设备信息。
  • TEST UNIT READY:检查设备是否就绪。
  • REQUEST SENSE:获取错误详情。

每个 UFS 设备可以包含多个逻辑单元(LUN),例如 LUN 0 通常用于系统数据,LUN 1 用于用户数据。主机通过 LUN 字段区分访问目标。

3.6 案例:一次 UFS 读操作的完整路径

假设主机要读取 LUN 0 的 4KB 数据,协议栈的协作过程如下:

  1. 应用层构造 SCSI READ 命令,指定 LUN=0、LBA、传输长度。
  2. UTP 层将 SCSI 命令封装为 Command UPIU,填入 Task Tag 和 LUN。
  3. UniPro 将 UPIU 分段、加 CRC,通过 CPort 0 发送。
  4. M-PHY 将数据串行化,以 HS-G4 速率通过差分对发送。
  5. 设备侧逐层解封装,执行读操作,返回 Data UPIU 和 Response UPIU。
  6. 主机根据 Task Tag 匹配响应,完成一次读事务。

3.7 关键术语速查清单

术语 所属层 含义
M-PHY 物理层 UFS 物理接口,定义电气特性与速率模式
Lane 物理层 一对差分信号线,构成一个双向通道
UniPro 链路层 可靠传输协议,负责帧同步、重传和流控
CPort 链路层 UniPro 通信端点,用于区分不同数据流
UPIU 传输层 UFS 协议信息单元,命令/数据/响应的载体
Task Tag 传输层 命令与响应的匹配标识
LUN 应用层 逻辑单元号,区分设备内的不同存储区域
SCSI 应用层 上层命令集,定义读写、查询等操作语义
复盘要点:UFS 协议栈的分层设计让硬件工程师可以聚焦 M-PHY 的电气性能,固件工程师聚焦 UniPro 和 UTP 的状态机,而系统工程师关注应用层的命令调度。排查问题时,先定位故障发生在哪一层,再向下或向上追溯,能显著缩短调试周期。