UFS协议学习大纲

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器件两组供电:

  1. VCC:闪存颗粒主电源(2.5V)
  2. VCCQ:控制器/PHY数字电源(1.2V)
    差分信号:Tx-Lane0、Tx-Lane1(主机发送);Rx-Lane0、Rx-Lane1(设备发送),全双工独立收发通道。

2 UFS四层分层协议栈(核心章节)

UFS严格采用分层解耦 架构,自上而下四层:应用层UAP → 传输层UTP → 互联层UIC(UniPro+M-PHY),每层通过SAP服务接入点交互,下层对上层透明。

2.1 层级总览

  1. UAP 应用层(UFS Application Layer)
    存储业务逻辑层,包含三大模块:UCS SCSI命令集、Device Manager设备管理、Task Manager任务队列管理。
  2. UTP 传输层(UFS Transport Protocol)
    数据包封装层,把上层SCSI命令/管理指令封装为UPIU数据包,下发给UIC链路层;解析底层上报的UPIU响应包回传给应用层。
  3. UIC 互联层(UFS InterConnect Layer)
    分为两层:UniPro链路层 + M-PHY物理层,负责高速串行数据传输、链路初始化、电源状态切换、物理信号收发、链路错误校验与恢复。
    • UniPro:数据链路层,流控、重传、通道管理
    • M-PHY:物理层,模拟差分信号、高低速Gear切换、低功耗LP模式

2.2 SAP服务接入点

层间交互统一通过SAP(Service Access Point),核心SAP:

  1. UTP_CMD_SAP:UCS读写命令下发通道
  2. UDM_SAP:设备管理Query指令通道
  3. UTP_TM_SAP:任务队列管理通道
  4. UIC_SAP:UTP与UniPro数据交互
  5. UIO_SAP:上层控制UniPro链路电源、复位

3 UIC互联层(UniPro + M-PHY)

3.1 M-PHY物理层

  1. 两种工作模式
    • HS高速模式:高带宽,读写业务使用,分G1/G2/G3/G4/G5 Gear档位,速率逐级翻倍
    • LP低功耗模式:空闲时切换,功耗极低,用于链路待机
  2. 技术特点:嵌入式时钟(无需独立时钟线)、差分信号抗EMI、动态Gear调频(负载高切高速,空闲切低速省功耗)
  3. 电源状态:PHY独立LP待机、关闭模拟电路降低功耗

3.2 UniPro链路层

UniPro是MIPI标准链路协议,负责:

  1. 链路上电初始化(Link Startup流程)
  2. 双通道Lane管理、通道聚合/降级(单通道故障自动切单Lane运行)
  3. 数据帧封装、CRC校验、错误重传、流量控制
  4. 链路电源状态控制(休眠、唤醒、复位)
  5. 向上层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层作用

  1. 封装上层所有请求(读写命令、设备查询、队列管理)为统一数据包:UPIU(UFS Protocol Information Unit)
  2. 接收设备返回的UPIU响应包,解析并分发至UCS/设备管理/任务管理模块
  3. 管理主机侧UTR描述符(DMA传输描述块,Linux驱动核心数据结构)

4.2 UPIU数据包通用结构

所有UFS主机与设备通信均使用UPIU,固定头部+可变数据负载,头部关键字段:

  1. Transaction Type:事务类型(SCSI命令、SCSI响应、Query请求、任务管理、复位等)
  2. LUN:目标逻辑单元编号(0=普通数据分区,1=RPMB,2=Boot分区)
  3. Task Tag:命令队列标签(0~31,对应32深度命令队列)
  4. Data Length:数据负载长度(读写数据长度)
  5. Status:设备执行状态(成功/校验错误/超时/写保护)

4.3 常用UPIU事务类型

  1. SCSI Command UPIU:主机下发读/写/查询存储命令
  2. SCSI Response UPIU:设备返回读写执行结果
  3. Query Request UPIU:主机读取/修改设备描述符、属性、标志
  4. Query Response UPIU:设备返回配置参数
  5. Task Management UPIU:队列清空、任务终止、设备软复位

5 UAP应用层(SCSI命令集、设备管理、任务管理)

5.1 UCS:UFS SCSI命令集

UFS复用T10 SCSI标准子集(SPC-4、SBC-3),核心业务命令:

读/写核心命令

  1. READ(10) / READ(16):逻辑块读取,10字节短命令、16字节支持超大容量
  2. WRITE(10) / WRITE(16):逻辑块写入
  3. WRITE SAME:批量填充相同数据(快速擦分区)

设备查询命令

  1. INQUIRY:查询设备厂商、型号、协议版本
  2. READ CAPACITY:读取总存储容量、逻辑块大小(默认512Byte/4KB)
  3. MODE SENSE:读取设备缓存、写保护、功耗配置

维护管理命令

  1. START STOP UNIT(SSU):控制逻辑单元电源、休眠唤醒、强制断电
  2. UNMAP(TRIM):通知闪存无效块,设备后台垃圾回收,提升写入速度
  3. SECURITY PROTOCOL:RPMB安全分区读写、密钥校验

5.2 Device Manager 设备管理

通过Query UPIU读写设备三大配置对象:

  1. Descriptor 描述符:硬件固定参数(容量、支持的电源模式、LUN数量、RPMB大小)
  2. Attribute 属性:可读写运行参数(当前功耗模式、命令队列深度、Write Booster开关)
  3. Flag 标志:布尔开关(写保护、自动休眠使能、后台操作允许)

5.3 Task Manager 任务管理(命令队列核心)

  1. 管理32深度命令队列,支持乱序执行(设备并行处理多个读写命令,大幅提升随机IO性能)
  2. 核心操作:清空整个队列、终止指定Tag任务、队列复位、设备软复位
  3. 解决多APP并发读写卡顿问题(eMMC无队列,只能串行执行)

6 UFS核心功能详解

6.1 Command Queue 命令队列

  1. 最大32个并发任务(Task Tag 0~31),主机一次性批量下发多条读写命令,设备并行处理
  2. 乱序执行:设备完成顺序不限制下发顺序,完成后通过Task Tag区分响应包
  3. 优势:随机IOPS提升5~10倍,手机多开APP、游戏加载更流畅

6.2 Write Booster 写缓存(UFS3.1新增)

  1. 设备内置高速SLC缓存,主机写入数据先存入Write Booster,立刻返回完成,后台异步将缓存数据搬运至TLC/QLC闪存颗粒
  2. 大幅降低小文件写入延迟,缓解TLC闪存慢写缺陷,提升持续写入速度
  3. 可通过Attribute属性开关启用/关闭

6.3 特殊逻辑单元 LUN

UFS设备内置多个独立逻辑分区(LUN):

  1. LUN 0:用户数据分区(系统、APP、文件存储)
  2. LUN 1:RPMB 重放保护内存块(安全存储,存储指纹密钥、支付证书、系统加密密钥,硬件防篡改,仅安全SCSI命令可访问)
  3. 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 七大核心电源状态

  1. Active 活跃态

    正常读写业务状态,M-PHY高速HS模式,命令队列全开,功耗最高,所有功能可用。

  2. Sleep 睡眠态

    轻度低功耗,UniPro链路低速LP模式,闪存控制器待机,VCC可断电,唤醒速度快(微秒级唤醒),短时间空闲自动进入。

  3. Hibernate8(H8休眠)

    深度链路休眠,UniPro链路关闭,PHY仅保留待机电路,功耗数十μW,唤醒需要重新初始化UniPro链路,适合长时间锁屏待机。

    进入/退出:专用Hibernate8 Enter/Exit Query指令。

  4. DeepSleep 深度休眠(UFS3.1新增)

    设备整机深度断电,闪存颗粒进入DPD掉电模式,功耗仅10μW级别;退出唯一方式:硬件复位或者整机断电重启,无法指令唤醒,用于设备长期闲置省电。

7.2 状态切换控制方式

  1. SSU START STOP UNIT 命令:控制Sleep/Active切换
  2. Hibernate8 Query指令:H8休眠进出
  3. 硬件复位、上下电:退出DeepSleep
  4. 设备自动超时: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(布尔开关)

  1. fWriteProtect:全局写保护(开启后无法写入/擦除)
  2. fBackgroundOpsEn:允许设备后台GC垃圾回收
  3. fPowerSaveEn:自动省电模式总开关

9 UFS完整上电初始化流程

主机SOC上电后,UFS初始化标准步骤:

  1. 硬件上电:VCCQ数字电源先上电 → VCC闪存电源上电
  2. 硬件复位UFS设备(RESET_N引脚拉低释放)
  3. UIC UniPro链路初始化(Link Startup):M-PHY切换LP模式,建立UniPro链路连接,双通道协商
  4. Query读取Device Descriptor,获取设备协议版本、硬件能力
  5. 配置Attribute属性:开启Write Booster、自动休眠、后台GC
  6. 读取Geometry Descriptor,获取存储容量、逻辑块大小
  7. SCSI INQUIRY命令查询设备厂商型号
  8. READ CAPACITY读取总容量,注册存储块设备
  9. 切换设备至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深度链路休眠
相关推荐
二进制10111 小时前
基于stm32的按键驱动框架的编写
stm32·单片机·嵌入式硬件
VALENIAN瓦伦尼安教学设备1 小时前
激光对中仪应用行业及全球市场份额解析
大数据·人工智能·嵌入式硬件
coward912 小时前
Linux内核驱动初始化流程认识(关于late_initcall和modul_init驱动初始化宏差异)
linux·嵌入式硬件
ACP广源盛139246256732 小时前
GSV2221@ACP# 高带宽低功耗显示转换芯片,赋能 TRAE SOLO 设备高清扩展升级
人工智能·嵌入式硬件·电脑·音视频
周周记笔记3 小时前
【元器件专题】比较NPN管与PNP管用作开关设计的区别
嵌入式硬件
szxinmai主板定制专家3 小时前
基于 ARM+FPGA 数据机床实时工业控制设计--以雕刻机为例
arm开发·人工智能·嵌入式硬件·fpga开发
崇山峻岭之间3 小时前
单片机DMA实验
单片机·嵌入式硬件
XMAIPC_Robot3 小时前
基于RK3588 ARM+FPGA电火花数控机床控制系统设计,兼顾ethercat软硬件实时
linux·arm开发·人工智能·嵌入式硬件·fpga开发
QiLinkOS4 小时前
QiLink 技术委员会选举实施细则
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源