系列文章目录
文章目录
系列文章目录
前言
十、UFS传输协议(UTP)层
10.1 概述
10.2 UTP 和 UniPro 具体概述
10.2.1 阶段
10.2.2 数据分段
10.2.3 UniPro
10.3 UFS 传输协议事务概述
10.4 服务交付子系统
10.5 UPIU 事务
10.6 通用 UFS 协议信息单元格式
10.6.1 概述
10.6.2 基本报头格式
总结
前言
提示:1~4章有兴趣自己查询英文文档,本文就不具体描述,直接进去正题,从第5章开始;。 绿色:重点语句,红色:重点词汇,蓝色:作者根据文章内容进行的相关解析,仅供参考。如果对您有一点帮助,帮点个赞吧!
十、UFS传输协议(UTP)层
10.1 概述
SCSI 架构模型(SAM)被用作通用的 UTP 架构模型,并且 SAM 的任务管理功能用于任务管理。一个任务通常是指一个 SCSI 命令或服务请求。虽然该模型使用 SCSI 命令集作为命令集,但并不一定要完全使用 SCSI 命令。
SAM 架构是一种客户端-服务器模式,或者更常见的说法是请求-响应架构。客户端被称为“发起设备”,服务器被称为“目标设备”。发起设备和目标设备被映射到 UFS 物理网络设备中。发起设备会向目标设备发出命令或服务请求,而目标设备将执行所请求的服务。目标设备是 UFS 设备。UFS 设备会包含一个或多个逻辑单元。逻辑单元是设备内部的一个独立处理单元。
客户端请求会指向设备内的单个逻辑单元。一个逻辑单元将接收并处理客户端的指令或请求。每个逻辑单元在目标设备内都有一个称为逻辑单元号(LUN)的地址。
发起设备与目标设备之间的通信是以一系列消息的形式进行的。这些消息按照本标准中所定义的 UFS 协议信息单元(UPIU)格式进行编排。已定义了多种不同的 UPIU 类型。所有 UPIU 结构在数据结构的开头(最低地址)都包含一个共同的头部区域。结构的其余字段则根据 UPIU 的类型而有所不同。
任务是指执行特定服务的命令或一系列操作。逻辑单元包含一个任务队列,该队列将支持对一个或多个任务的处理。任务队列由逻辑单元管理。在构建任务时,发起设备会生成一个唯一的任务标签。目标设备和发起设备会使用此任务标签来区分多个任务。与特定任务相关的所有事务和序列都会在与事务相关的数据结构中包含该任务标签。
指挥结构由命令描述块(CDB)组成,这些块包含命令操作码以及相关的参数、标志和属性。CDB 内容和结构的描述在 [SAM]、[SBC] 和 [SPC] 等 INCITS T10 草案标准中均有详细规定。
一个命令事务由一个命令、一个可选的数据阶段以及一个状态阶段组成。这些交易以 UPIU 结构的形式呈现。命令阶段将命令信息和相关参数从发起设备传递至目标设备。如果需要数据阶段,则数据流的方向与发起设备相对。数据写入从发起设备流向目标设备。数据读取则从目标设备流向发起设备。在命令完成时,目标设备将在状态阶段向发起设备交付响应。该响应将包含状态以及指示命令成功完成或失败的 UFS 响应状态。如果指示有错误,响应将包含更详细的 UFS 错误信息。
10.2 UTP 和 UniPro 具体概述
UTP 将通过 UniPro 网络以标准消息包(T_SDU)的形式发送命令、数据和响应。UFS 事务将被组合成称为 UFS 协议信息单元(UPIU)的数据结构中。为 UFS SCSI 命令、响应、输入数据和输出数据、任务管理、实用功能、供应商功能、事务同步和控制等定义了 UPIU。该列表可扩展以适应未来的新增内容。对于枚举和配置,UFS 支持一种描述符、属性和标志系统,该系统定义并控制设备的具体细节,包括操作特性、接口、逻辑单元数量、运行速度、电源配置等。该系统是一个相关元素的层次树结构。它可以扩展。
10.2.1 阶段
基于 SCSI 的命令协议要求UPIU 数据包必须遵循执行命令所需的转换流程。简而言之,执行一个命令需要发送一个COMMAND UPIU、零个或多个DATA IN UPIU 或 DATA OUT UPIU 数据包,并以包含状态信息的RESPONSE UPIU 结束。
10.2.2 数据分段
设备可能在缓冲存储或处理吞吐量方面存在限制。在执行需要大量数据输出操作的命令时,目标设备可以通过在准备好接收下一个数据输出 UPIU 时发送“准备传输 UPIU”来控制数据输出阶段。此外,“准备传输 UPIU”中包含一个嵌入式传输上下文,用于在主机上按每个数据包为基础启动 DMA 传输。
10.2.3 UniPro
根据 UniPro 协议的要求,UFS 启动器设备和目标设备会将其交易分割成 UniPro 消息,这些消息将包含 UPIU 的内容。UniPro 消息能够处理理论上无限大小的 T_SDU 消息。UFS 会为最大 T_SDU 消息设定一个可行的限制。该限制为 65600 字节,其中包括 UPIU 标头、可选的扩展头区域和数据段。最小消息大小由基本头格式决定,为 32 字节。未来有可能这个值会增加,以允许更大的数据段区域。
10.3 UFS 传输协议事务概述
UFS 事务由被称为 UFS 协议信息单元(UPIU)的数据包组成,这些数据包在 UniPro 总线上设备之间传输。事务在发起设备和目标设备之间以请求-响应操作的形式开始。发起设备通过向目标设备和逻辑单元发送请求来启动事务序列。然后,目标设备将通过一系列事务进行响应,最终以响应事务结束。
所有的 UFS UPIU 都由一个单一的基本头部段、特定交易的字段、可能的一个或多个扩展头部段以及零个或多个数据段组成。
一个基本的报头段固定长度为 12 个字节。UPIU 的最小尺寸为 32 个字节,其中包括一个基本报头段以及特定于交易的字段。
UPIU 的最大尺寸被定义为 65600 字节。<./font>
UPIU 格式具有足够的灵活性,能够轻松扩展以支持未来的交易和更大的数据段,并且能够将此协议应用于除 UniPro 之外的其他网络协议。
10.4 服务交付子系统
服务交付子系统是一个输入/输出系统,用于在通过物理或逻辑总线连接的发起设备与目标设备之间传输服务请求和响应。UFS UTP 试图定义一种独立于服务交付子系统的协议。这将使得 UTP 能够轻松地移植到不同的服务交付子系统中。
目前,UFS 采用的是 MIPI UniPro 总线和 MIPI M-PHY® 作为服务交付子系统。为了方便使用并便于更好地理解,本标准的部分内容直接引用了 UniPro 和 M-PHY®。但无论这些引用如何,UTP 协议与服务交付子系统是相互独立的,应当能够移植到其他 I/O 系统上。
UPIU 结构将被移交至 MIPI UniPro ,作为 UniPro 服务数据单元(T_SDU)使用。目前,UniPro T_SDU 不需要在 UPIU 结构周围附加任何额外的头信息或尾信息。这意味着 T_SDU 的大小将与 UPIU 的大小完全一致。最小的 T_SDU 大小为 32 字节。最大的 T_SDU 大小为 65600 字节。
10.5 UPIU 事务
每个 UPIU 数据结构都包含一个事务代码。该代码明确了 UPIU 数据结构的内容以及其隐含的功能或用途。表 10.1 列出了目前定义的事务代码。
![图片[1] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/13ae6e33963843de928e985c36ca3a6d.png)
注:Initator:发起者(UFS控制器);Target:目标者(UFS设备)

| UPIU数据结构 | 描述 |
|---|---|
| NOP Out | NOP Out 事务类似于UFS控制器向UFS设备发送的“ping”信号。它可用于检查与某一设备的连接路径。注:ping信号指的是网络链路通信正常的操作 |
| NOP In | NOP 在事务中是当响应 NOP 出请求时,对UFS控制器的回应目标。 |
| Command | 命令事务起源于UFS控制器,并被发送至UFS设备内的一个逻辑单元。一个命令统一标识单元(UPIU)将包含一个命令描述块作为命令以及命令参数。这代表了命令的“命令”阶段。 |
| Response | “响应”事务起源于UFS设备,并被发送回UFS控制器。一个“响应”统一标识符将包含特定操作的状态信息以及其他响应信息。这代表了命令的“状态”阶段。 |
| Data Out | “数据输出”事务起源于UFS控制器,用于将数据从UFS控制器传输至UFS设备。这代表了命令的“数据输出”阶段。 |
| Data In | 该数据流中的“数据输入”部分源自UFS设备,并用于将数据从UFS’设备传输至UFS控制器。这代表了命令的“数据输入”阶段。 |
| Task Management Request | 这种事务类型负责处理源自UFS控制器并终止于UFS设备的 SCSI 架构模型(SAM)任务管理功能请求。其标准功能由 [SAM] 规定。 |
| Task Management Response | 这种事务类型包含了源自UFS设备并终止于控制器的基于 SCSI 架构模型(SAM)的任务管理功能响应。 |
| Ready TO Transfer | UFS设备在准备好接收下一条“数据输出 UPIU”并拥有足够的缓冲空间以接收数据时,会发送“准备传输”事务。如果UFS设备有缓冲空间来接收多个“数据输出 UPIU”数据包,它可以发送多个“准备传输” UPIU。准备传输 UPIU UFS’包含一个 DMA 上下文,并可用于在主机控制器内设置和触发 DMA 操作。 |
| Query Quest | 此事务起源于UFS控制器,用于向UFS设备请求描述符数据。此事务不在命令和任务管理功能范围内,而是完全由 UFS 定义。 |
| Query Response | 此事务起源于UFS设备,并在响应查询请求交易时向发起设备提供所请求的描述符信息。此交易不在命令和任务管理功能范围内定义,而是完全由 UFS 定义。 |
| Reject | “拒绝”事务起源于UFS设备,并被发送回UFS控制器。当UFS设备由于其某些字段中的值有误而无法解读和执行从UFS设备接收到的 UPIU 时,就会生成“拒绝”UPIU。 |
UFS 设备在任何时刻都只能执行“NOP OUT”或“QUERY REQUEST”这两种操作之一。
10.6 通用 UFS 协议信息单元格式
表 10.3 展示了通用 UPIU 的基本结构。所有的 UPIU 都会包含固定大小和位置的基本头部,以及为支持交易类型所需的其他字段。

10.6.1 概述
UPIU 的总大小会因 UPIU 交易类型的不同而有所变化,但所有 UPIU 的大小都将是 32 位整数倍,这意味着它们将以 4 字节边界进行寻址。如果数据和头部段的总和未在 32 位边界处结束,那么将添加额外的填充以将 UPIU 调整到下一个 32 位、4 字节的地址边界。
UPIU 的大小可以固定也可以变化,这取决于“事务类型”字段和扩展标志。某些交易类型对于相同的代码可能会有不同的长度,而其他类型则始终具有固定长度。此外,如果需要,任何 UPIU 都可以扩展以包含额外的头部和数据段。通用格式允许扩展,并在结构中定义了标志和大小字段,以指示处理实体结构中扩展区域的位置及其大小(不包括填充部分),在某些情况下还包括扩展数据的类型。
10.6.2 基本报头格式
这是每个 UPIU 结构中包含的基本头部格式。此数据包将在发起设备和目标设备之间传输,并且是更大规模特定功能 UPIU 的一部分。此头部中包含的信息足以让发起设备或目标设备追踪目的地和来源、功能请求、是否需要额外的数据和参数,以及这些数据和参数是包含在本次 UPIU 中还是将在后续的 UPIU 中提供。
目前,最小规格的 UPIU 被定义为包含 32 个字节。这 32 个字节的空间将包含基本头部以及其他字段。这意味着通过服务交付子系统发送的最小数据量将是 32 个字节。
![图片[2] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/5a1aef872f814f7e9d8cc09ddd612aae.png)
a) 事务类型
“事务类型”指明了数据结构中所包含的请求或响应的类型。
“事务类型”包含“HD”位、“DD”位以及“交易代码”,详情见表 10.5 。
![图片[3] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/21109d2a22f3436f8eaccac21b28173b.png)
b)HD
当“HD”位设置为“1”时,表示 UPIU 中包含了所有报头段的端到端 CRC 校验码。CRC 字段涵盖了报头区域内的所有字段。CRC 会放置在报头之后的 32 位字的位置。
在该标准的当前版本中,端到端的循环冗余校验功能并不支持,因此“HD”应填写“0”。
c) DD
当 DD 位设置为“1”时,表示数据段的端到端 CRC 将与 UPIU 一同包含在内。32 位 CRC 是基于数据段内的所有字段计算得出的。32 位 CRC 字段会置于数据段的末尾。这将是 UPIU 的最后一个字节位置。
在该标准的此版本中,端到端的循环冗余校验功能并不支持,因此 DD 应设置为“0”。
从上述来看HD、DD在该标准版本,CRC校验功能不支持,所以HD、DD位都设置为“0”
d)事务代码
事务代码指明了数据字段中所体现的操作内容,以及UPIU 中所定义字段的数量和位置(见表 10.1)。
e) Flags
“标志”字段的内容会因“事务类型”操作码的不同而有所变化。
![图片[4] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/6d7472d37d1a46d6b0571dbec8f84cbb.png)
![图片[5] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/d0d4ee98302a43c0b7a43cbdd9748fc2.png)
f) 响应
如果需要目标设备作出响应,此字段将表明所请求的功能是成功还是失败。在从发起设备到目标设备的 UPIU 交易中,此字段是保留的。
![图片[6] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/4ca67abab9ee4352b706a804d2533417.png)
g) Status
此字段包含 SCSI 状态(如 [SAM] 中所定义),前提是该事务是针对命令 UPIU 的响应 UPIU,且命令集类型为 00h(即 SCSI 命令)。否则,该字段包含特定于操作码的状态信息,或者该字段被保留。
h) Reserved
所有标记为“保留”的字段都应设置为零值。
I)LUN(逻辑单元)
此字段包含请求所针对的逻辑单元号。目标设备至少会包含一个编号为“0”的逻辑单元。此字段由发起设备生成,并由目标设备和发起设备共同维护,用于处理与单个请求或任务相关的所有 UPIU 事务。
j) Task Tag(任务标签)
任务标签是由发起设备在创建任务请求时生成的。此字段将由发起设备和目标设备共同维护,适用于与单个任务相关的所有 UPIU 事务。发起设备将包含一个表示任务标签值的寄存器或变量。发起设备在创建新的任务请求时,会通过递增内部变量来生成唯一的任务标签。当任务请求由一系列 UPIU 交易组成或产生时,所有 UPIU 在任务标签字段中都将包含相同的值。
特别是,每一行中所归类的 UPIU 之间应保持相同的任务标签值。表10.9
![图片[7] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/279aac92708f49ba945b517c01d02bef.png)
k) Initiator ID (IID)
“启动器标识”字段为 4 位宽,存储在字节 4 的位 [7:4] 中。此字段表示创建任务请求的启动器设备的身份。
如果只有一个发起设备,那么发起者标识应设置为零。
UFS 设备应支持全部 16 个启动器标识值。主机在创建请求时应将启动器标识编码到此字段中。此字段由启动器设备和目标设备共同维护,用于与同一任务相关的所有 UPIU 事务。
来自同一发起设备的所有请求具有相同的 IID 值。有关发起设备 ID 分配的详细信息,请参阅 UFS HCI 标准规范。
I) Command Set Type (命令集类型)
命令集类型字段宽为 4 位,存储在字节 4 的位 [3:0] 中。此字段指示命令和响应UPIU 所关联的命令集类型。此字段定义于命令UPIU 和响应UPIU 中。在其他所有的UPIU 中,此字段被保留。此字段用于指示 CDB 字段中的命令类型。当前支持的命令类型列于表 10.10 中。
![图片[8] - UFS-Ver3.1-第十章(10.1~10.6) - 宋马](https://pic.songma.com/blogimg/20250523/151d90e631cc4727b6ef887265058c7b.png)
m)Query Function, Task Manag. Function (查询功能,任务管理.功能)
此字段在查询请求和查询响应的 UPIU 中用于定义查询功能,在任务管理请求的 UPIU 中则用于定义任务管理功能。
n) Device Information(设备信息)
此字段提供了所有响应 UPIU 中特定 UFS 功能所需的操作系统级别信息。
o) Total Extra Header Segment Length(总附加头部段长度)
此字段表示 UPIU 中所包含的所有附加头段的大小(以 32 位单位,即 DWORD 格式表示)。若需要额外的头段,则使用此字段。每个附加头段的长度应为 4 字节的倍数。此字段中的值为所有附加头段所占用总字节数除以 4 的结果。
𝑇𝑜𝑡𝑎𝑙 𝐸𝐻𝑆 𝐿𝑒𝑛𝑔𝑡ℎ 𝑣𝑎𝑙𝑢𝑒 = INTEGER* [(𝑇𝑜𝑡𝑎𝑙 𝐸𝑥𝑡𝑟𝑎 𝐻𝑒𝑎𝑑𝑒𝑟 𝑆𝑒𝑔𝑚𝑒𝑛𝑡 𝐵𝑦𝑡𝑒𝑠 + 3) /4]
所有 EHS 字段的总最大尺寸为 1024 字节。此字段中的值为零表示 UPIU 中不包含任何 EHS。在该标准中不使用额外的头部段,因此此字段的值应设置为零。
p)Data Segment Length(数据段长度)
“数据段长度”字段包含了用户程序接口单元(UPIU)的数据段中有效字节的数量。如果数据段内的字节数不是 4 的倍数,那么最后一个 32 位字段将用零填充,以在下一个最接近的 32 位边界处结束。构成数据段的 32 位单元(DWORD)的数量计算方法如下
𝐷𝑎𝑡𝑎 𝑆𝑒𝑔𝑚𝑒𝑛𝑡 𝐷𝑊𝑂𝑅𝐷𝑆 = 𝐼𝑁𝑇𝐸𝐺𝐸𝑅 [(𝐷𝑎𝑡𝑎 𝑆𝑒𝑔𝑚𝑒𝑛𝑡 𝐿𝑒𝑛𝑔𝑡ℎ + 3)/4]
由于数据段长度字段的大小为两个字节,因此数据段最多可包含 65535 个有效字节。此字段的值为零表示 UPIU 中不存在数据段。
q) Transaction Specific Fields(事务特定字段)
某些事务代码所要求的附加字段位于此区域内。对于 UTP 而言,此区域从 UPIU 中的字节地址 12 开始,到字节地址 31(在 32 字节边界处)结束。由于所有的 UPIU 都包含一个 12 字节的基本头信息,因此此区域还剩下 20 个字节。
r) Extra Header Segments(附加头部段落)
如果“总 EHS 长度”字段包含非零值,则会存在额外的 EHS 段。对于 UTP 来说,此区域将在 UPIU 中的字节地址 32 处开始。UPIU 可能包含零个或多个 EHS。每个额外 EHS 段的长度应为四个字节的倍数。此版本的标准不使用 EHS。
s) Data Segment(数据段)
数据段字段从 UPIU 内 EHS 区域之后的下一个 32 位(DWORD)边界处开始。对于 UTP 而言,未使用 EHS 区域,这意味着数据段将在 UPIU 内的字节地址 32 处(如果启用了 E2ECRC 则为 36)开始。数据段将以 32 位的倍数进行划分,从而使 UPIU 数据包大小为 4 字节的倍数。数据段长度字段可以包含非 4 字节的值,但数据段区域会用零填充至下一个最接近的 32 位(DWORD)边界。数据段长度字段表示数据段内的有效字节数。
10.7 UFS 协议信息单元
另起一章,极为重要,需细读,或者字典使用。
总结
1、此章节主要概述了UPIU事务,细读
2、必须掌握UFS协议信息单元格式,10.7章所有UPIU都是基于该格式定义














暂无评论内容