UFS协议完整学习文档(入门→进阶)
1 UFS协议概述
1.1 定义
UFS(Universal Flash Storage,通用闪存存储)是JEDEC制定的嵌入式高速闪存标准,基于MIPI M-PHY物理层 + UniPro链路层构建双通道全双工串行接口,上层复用SCSI存储命令模型,用于替代并行半双工的eMMC,广泛用于手机、平板、车载ADAS、VR设备。
1.2 核心优势(对比eMMC)
| 特性 | UFS | eMMC 5.1 |
|---|---|---|
| 传输模式 | 双通道全双工,读写同时进行 | 8线并行半双工,读写互斥 |
| 命令模型 | SCSI,支持32深度命令队列、乱序执行 | 简单块命令,仅单命令串行执行 |
| 物理信号 | 差分串行,抗干扰,高频高速 | 并行总线,速率受走线干扰限制 |
| 低功耗 | 多级电源状态、Hibernate8、DeepSleep | 仅简单睡眠,功耗更高 |
| 随机性能 | 数十万IOPS,APP多任务流畅 | 万级IOPS,多任务卡顿 |
1.3 UFS版本演进与性能参数
主流商用版本带宽、关键升级一览:
| 协议版本 | 发布年份 | M-PHY Gear | 单Lane速率 | 双通道理论带宽 | 核心新增特性 |
|---|---|---|---|---|---|
| UFS 2.1 | 2016 | HS-G3 | 5.84Gbps | 11.6Gbps(1.45GB/s) | 完善命令队列、RPMB加密 |
| UFS 3.0 | 2018 | HS-G4 | 11.6Gbps | 23.2Gbps(2.9GB/s) | 带宽翻倍,链路稳定性优化 |
| UFS 3.1 | 2020 | HS-G4 | 11.6Gbps | 23.2Gbps | Write Booster写缓存、DeepSleep深度睡眠、性能节流通知 |
| UFS 4.0 | 2022 | HS-G5 | 23.2Gbps | 46.4Gbps(5.8GB/s) | 带宽再次翻倍、Barrier命令、FBO文件块优化、增强RPMB |
1.4 硬件电气基础
UFS器件两组供电:
- VCC:闪存颗粒主电源(2.5V)
- VCCQ:控制器/PHY数字电源(1.2V)
差分信号:Tx-Lane0、Tx-Lane1(主机发送);Rx-Lane0、Rx-Lane1(设备发送),全双工独立收发通道。
2 UFS四层分层协议栈(核心章节)
UFS严格采用分层解耦 架构,自上而下四层:应用层UAP → 传输层UTP → 互联层UIC(UniPro+M-PHY),每层通过SAP服务接入点交互,下层对上层透明。
2.1 层级总览
- UAP 应用层(UFS Application Layer)
存储业务逻辑层,包含三大模块:UCS SCSI命令集、Device Manager设备管理、Task Manager任务队列管理。 - UTP 传输层(UFS Transport Protocol)
数据包封装层,把上层SCSI命令/管理指令封装为UPIU数据包,下发给UIC链路层;解析底层上报的UPIU响应包回传给应用层。 - UIC 互联层(UFS InterConnect Layer)
分为两层:UniPro链路层 + M-PHY物理层,负责高速串行数据传输、链路初始化、电源状态切换、物理信号收发、链路错误校验与恢复。- UniPro:数据链路层,流控、重传、通道管理
- M-PHY:物理层,模拟差分信号、高低速Gear切换、低功耗LP模式
2.2 SAP服务接入点
层间交互统一通过SAP(Service Access Point),核心SAP:
- UTP_CMD_SAP:UCS读写命令下发通道
- UDM_SAP:设备管理Query指令通道
- UTP_TM_SAP:任务队列管理通道
- UIC_SAP:UTP与UniPro数据交互
- UIO_SAP:上层控制UniPro链路电源、复位
3 UIC互联层(UniPro + M-PHY)
3.1 M-PHY物理层
- 两种工作模式
- HS高速模式:高带宽,读写业务使用,分G1/G2/G3/G4/G5 Gear档位,速率逐级翻倍
- LP低功耗模式:空闲时切换,功耗极低,用于链路待机
- 技术特点:嵌入式时钟(无需独立时钟线)、差分信号抗EMI、动态Gear调频(负载高切高速,空闲切低速省功耗)
- 电源状态:PHY独立LP待机、关闭模拟电路降低功耗
3.2 UniPro链路层
UniPro是MIPI标准链路协议,负责:
- 链路上电初始化(Link Startup流程)
- 双通道Lane管理、通道聚合/降级(单通道故障自动切单Lane运行)
- 数据帧封装、CRC校验、错误重传、流量控制
- 链路电源状态控制(休眠、唤醒、复位)
- 向上层UIC_SAP提供UPIU数据包收发通道
3.3 UIC层完整工作流程
主机下发SCSI命令 → UTP封装UPIU → UniPro打包链路帧 → M-PHY转为差分高速信号传输 → 设备端M-PHY解析信号 → UniPro重组帧 → UTP提取UPIU → 设备UAP执行读写。
4 UTP传输层 & UPIU数据包(UFS通信最小单元)
4.1 UTP层作用
- 封装上层所有请求(读写命令、设备查询、队列管理)为统一数据包:UPIU(UFS Protocol Information Unit)
- 接收设备返回的UPIU响应包,解析并分发至UCS/设备管理/任务管理模块
- 管理主机侧UTR描述符(DMA传输描述块,Linux驱动核心数据结构)
4.2 UPIU数据包通用结构
所有UFS主机与设备通信均使用UPIU,固定头部+可变数据负载,头部关键字段:
- Transaction Type:事务类型(SCSI命令、SCSI响应、Query请求、任务管理、复位等)
- LUN:目标逻辑单元编号(0=普通数据分区,1=RPMB,2=Boot分区)
- Task Tag:命令队列标签(0~31,对应32深度命令队列)
- Data Length:数据负载长度(读写数据长度)
- Status:设备执行状态(成功/校验错误/超时/写保护)
4.3 常用UPIU事务类型
- SCSI Command UPIU:主机下发读/写/查询存储命令
- SCSI Response UPIU:设备返回读写执行结果
- Query Request UPIU:主机读取/修改设备描述符、属性、标志
- Query Response UPIU:设备返回配置参数
- Task Management UPIU:队列清空、任务终止、设备软复位
5 UAP应用层(SCSI命令集、设备管理、任务管理)
5.1 UCS:UFS SCSI命令集
UFS复用T10 SCSI标准子集(SPC-4、SBC-3),核心业务命令:
读/写核心命令
- READ(10) / READ(16):逻辑块读取,10字节短命令、16字节支持超大容量
- WRITE(10) / WRITE(16):逻辑块写入
- WRITE SAME:批量填充相同数据(快速擦分区)
设备查询命令
- INQUIRY:查询设备厂商、型号、协议版本
- READ CAPACITY:读取总存储容量、逻辑块大小(默认512Byte/4KB)
- MODE SENSE:读取设备缓存、写保护、功耗配置
维护管理命令
- START STOP UNIT(SSU):控制逻辑单元电源、休眠唤醒、强制断电
- UNMAP(TRIM):通知闪存无效块,设备后台垃圾回收,提升写入速度
- SECURITY PROTOCOL:RPMB安全分区读写、密钥校验
5.2 Device Manager 设备管理
通过Query UPIU读写设备三大配置对象:
- Descriptor 描述符:硬件固定参数(容量、支持的电源模式、LUN数量、RPMB大小)
- Attribute 属性:可读写运行参数(当前功耗模式、命令队列深度、Write Booster开关)
- Flag 标志:布尔开关(写保护、自动休眠使能、后台操作允许)
5.3 Task Manager 任务管理(命令队列核心)
- 管理32深度命令队列,支持乱序执行(设备并行处理多个读写命令,大幅提升随机IO性能)
- 核心操作:清空整个队列、终止指定Tag任务、队列复位、设备软复位
- 解决多APP并发读写卡顿问题(eMMC无队列,只能串行执行)
6 UFS核心功能详解
6.1 Command Queue 命令队列
- 最大32个并发任务(Task Tag 0~31),主机一次性批量下发多条读写命令,设备并行处理
- 乱序执行:设备完成顺序不限制下发顺序,完成后通过Task Tag区分响应包
- 优势:随机IOPS提升5~10倍,手机多开APP、游戏加载更流畅
6.2 Write Booster 写缓存(UFS3.1新增)
- 设备内置高速SLC缓存,主机写入数据先存入Write Booster,立刻返回完成,后台异步将缓存数据搬运至TLC/QLC闪存颗粒
- 大幅降低小文件写入延迟,缓解TLC闪存慢写缺陷,提升持续写入速度
- 可通过Attribute属性开关启用/关闭
6.3 特殊逻辑单元 LUN
UFS设备内置多个独立逻辑分区(LUN):
- LUN 0:用户数据分区(系统、APP、文件存储)
- LUN 1:RPMB 重放保护内存块(安全存储,存储指纹密钥、支付证书、系统加密密钥,硬件防篡改,仅安全SCSI命令可访问)
- LUN 2:Boot分区(系统开机固件、Android boot镜像,支持双Boot分区防砖)
6.4 后台操作 Background Operation
设备空闲时自动执行:垃圾回收GC、磨损均衡WL、缓存刷新、闪存块擦除,不占用主机IO带宽,提升长期读写性能与闪存寿命。
7 UFS电源管理全状态机(高频考点)
UFS完整电源层级:UniPro链路状态 + M-PHY物理状态 + 设备全局电源状态(Active / Pre-Sleep / Sleep / Pre-Hibernate8 / Hibernate8 / Pre-DeepSleep / DeepSleep)
7.1 七大核心电源状态
-
Active 活跃态
正常读写业务状态,M-PHY高速HS模式,命令队列全开,功耗最高,所有功能可用。
-
Sleep 睡眠态
轻度低功耗,UniPro链路低速LP模式,闪存控制器待机,VCC可断电,唤醒速度快(微秒级唤醒),短时间空闲自动进入。
-
Hibernate8(H8休眠)
深度链路休眠,UniPro链路关闭,PHY仅保留待机电路,功耗数十μW,唤醒需要重新初始化UniPro链路,适合长时间锁屏待机。
进入/退出:专用Hibernate8 Enter/Exit Query指令。
-
DeepSleep 深度休眠(UFS3.1新增)
设备整机深度断电,闪存颗粒进入DPD掉电模式,功耗仅10μW级别;退出唯一方式:硬件复位或者整机断电重启,无法指令唤醒,用于设备长期闲置省电。
7.2 状态切换控制方式
- SSU START STOP UNIT 命令:控制Sleep/Active切换
- Hibernate8 Query指令:H8休眠进出
- 硬件复位、上下电:退出DeepSleep
- 设备自动超时:Active空闲超时自动进入Sleep/H8
7.3 功耗对比
Active(几十mA)> Sleep(mA级)> Hibernate8(μA级)> DeepSleep(10μW以内)
8 UFS设备描述符、属性、标志
8.1 Descriptor(只读硬件参数)
设备出厂固化参数,主机仅可读,不可修改:
- Device Descriptor:协议版本、支持电源模式、最大队列深度
- Geometry Descriptor:总容量、逻辑块大小、RPMB/Boot分区容量
- Unit Descriptor:每个LUN分区参数、写保护状态
8.2 Attribute(读写运行参数)
运行时可配置,主机通过Query指令修改:
- bWriteBoosterEn:Write Booster缓存开关
- bAutoHibernate:空闲自动进入H8使能
- CurrentPowerMode:读取当前设备电源状态
- NumberOfActiveTasks:当前队列执行任务数量
8.3 Flag(布尔开关)
- fWriteProtect:全局写保护(开启后无法写入/擦除)
- fBackgroundOpsEn:允许设备后台GC垃圾回收
- fPowerSaveEn:自动省电模式总开关
9 UFS完整上电初始化流程
主机SOC上电后,UFS初始化标准步骤:
- 硬件上电:VCCQ数字电源先上电 → VCC闪存电源上电
- 硬件复位UFS设备(RESET_N引脚拉低释放)
- UIC UniPro链路初始化(Link Startup):M-PHY切换LP模式,建立UniPro链路连接,双通道协商
- Query读取Device Descriptor,获取设备协议版本、硬件能力
- 配置Attribute属性:开启Write Booster、自动休眠、后台GC
- 读取Geometry Descriptor,获取存储容量、逻辑块大小
- SCSI INQUIRY命令查询设备厂商型号
- READ CAPACITY读取总容量,注册存储块设备
- 切换设备至Active电源状态,命令队列启用,完成初始化,上层文件系统可读写
附录:专业名词缩写对照表
| 缩写 | 全称 | 中文释义 |
|---|---|---|
| UFS | Universal Flash Storage | 通用闪存存储 |
| UIC | UFS InterConnect | UFS互联层 |
| UTP | UFS Transport Protocol | UFS传输协议层 |
| UAP | UFS Application Layer | UFS应用层 |
| UPIU | UFS Protocol Information Unit | UFS协议信息数据包 |
| M-PHY | MIPI Physical Layer | MIPI物理层 |
| UniPro | Unified Protocol | MIPI统一链路协议 |
| SCSI | Small Computer System Interface | 小型计算机存储命令集 |
| RPMB | Replay Protected Memory Block | 重放保护安全分区 |
| LUN | Logical Unit Number | 逻辑单元号 |
| UFSHCD | UFS Host Controller Driver | Linux UFS主机控制器驱动 |
| Write Booster | SLC Write Cache | 写入加速缓存 |
| GC | Garbage Collection | 闪存垃圾回收 |
| WL | Wear Leveling | 闪存磨损均衡 |
| H8 | Hibernate8 | UFS深度链路休眠 |