ufs2.2 协议扫盲(十)

十、UFS TRANSPORT PROTOCOL (UTP) LAYE:
1、SCSI 架构模型 [SAM] 用作 UTP 的通用架构模型,SAM 任务管理功能用于任务管理。 任务通常是 SCSI 命令或服务请求。 虽然模型使用 SCSI 命令集作为命令集,但没有必要专门使用 SCSI 命令。  
2、SAM 架构是客户端-服务器模型,或者更常见的是请求-响应架构。 客户端称为发起方设备,而服务器称为目标方设备。 Initiator 设备和 Target 设备映射到 UFS 物理网络设备。 发起方设备向将执行所请求服务的目标设备发出命令或服务请求。 目标设备是 UFS 设备。 一台 UFS 设备将包含一个或多个逻辑单元。 逻辑单元是设备内的独立处理实体。
3、客户端请求被定向到设备内的单个逻辑单元。 逻辑单元将接收并处理客户端命令或请求。 每个逻辑单元在目标设备中都有一个地址,称为逻辑单元号 (LUN)。
4、发起方设备和目标方设备之间的通信分为一系列消息。 这些消息被格式化为本标准中定义的 UFS 协议信息单元 (UPIU)。 定义了许多不同的 UPIU 类型。 所有的 UPIU 结构都在数据结构的开头(最低地址)包含一个公共头区域。 结构的其余字段根据 UPIU 的类型而有所不同。
5、任务是执行请求的服务的命令或操作序列。 一个逻辑单元包含一个支持处理一个或多个任务的任务队列。 任务队列由逻辑单元管理。 在构建任务时,启动器设备会生成一个唯一的任务标签。 目标设备和发起方设备使用此任务标签来区分多个任务。 与特定任务相关联的所有事务和序列都将在事务相关数据结构中包含该任务标签。
6、命令结构由包含命令操作码和相关参数、标志和属性的命令描述符块 (CDB) 组成。 CDB 内容和结构的描述在 [SAM]、[SBC] 和 [SPC] INCITS T10 草案标准中有详细定义。
7、命令事务由命令、可选的数据阶段和状态阶段组成。 这些交易以 UPIU 结构的形式表示。 命令阶段将命令信息和支持参数从发起方设备传送到目标方设备。 如果需要数据阶段,则数据流的方向是相对于发起方设备的。 数据写入从发起方设备传输到目标方设备。 数据 READ 从目标设备传输到发起方设备。 命令完成后,目标设备将在状态阶段向发起方设备发送响应。 响应将包含状态和指示命令成功完成或失败的 UFS 响应状态。 如果指示错误,响应将包含其他详细的 UFS 错误信息。

8、UTP 将通过 UniPro 网络将命令、数据和响应作为标准消息包 (T_SDU) 传送。UFS 事务将被分组到称为 UFS 协议信息单元 (UPIU) 的数据结构中。为 UFS SCSI 命令、响应、数据输入和数据输出、任务管理、实用功能、供应商功能、事务同步和控制定义了 UPIU。 该列表可扩展以供将来添加。对于枚举和配置,UFS 支持定义和控制设备细节的描述符、属性和标志系统,包括操作特性、接口、逻辑单元数量、操作速度、功率配置文件等。该系统是一个分层树 的相关元素。 它是开放的,可以扩展。
9、基于 SCSI 的命令协议要求 UPIU 数据包遵循执行命令所需的转换。 简而言之,命令执行需要发送 COMMAND UPIU、零个或多个 DATA IN UPIU 或 DATA OUT UPIU 数据包,并以包含状态的 RESPONSE UPIU 终止。
10、设备可能具有有限的用于缓冲的内存资源或有限的处理吞吐量。 在需要大量数据输出事务的命令期间,目标设备可以通过在准备好下一个数据输出 UPIU 时发送 READY TO TRANSFER UPIU 来调整数据输出阶段。 此外,READY TO TRANSFER UPIU 包含一个嵌入式传输上下文,用于在主机上基于每个数据包启动 DMA 传输。在 Data In 阶段,不需要 READY TO TRANSFER UPIU,因为主机能够指定 Data In 传输的大小,从而能够为传入的数据提前分配适当的内存资源。 设备发出的 DATA IN UPIU 数据包还包含一个嵌入式 DMA 上下文,可用于在每个数据包的基础上启动 DMA 传输。
11、为了与 UniPro 协议的要求保持一致,UFS 发起方设备和目标设备将其事务划分为包含 UPIU 的 UniPro 消息。 UniPro 消息可以处理理论上无限大小的 T_SDU 消息。 UFS 将对最大 T_SDU 消息大小施加切实可行的限制。 限制为 65600 字节,包括 UPIU 头、可选的扩展头区域和数据段。 最小消息大小由基本报头格式决定,即 32 字节。 将来这个值可能会增加以允许更大的数据段区域。

12、UFS 事务由称为 UFS 协议信息单元 (UPIU) 的数据包组成,这些数据包在 UniPro 总线上的设备之间传输。 事务以请求-响应操作的形式在发起方设备和目标方设备之间开始。 发起方设备通过向目标设备和逻辑单元发送请求来启动事务序列。 然后,目标设备将使用一系列事务进行响应,这些事务最终以响应事务结束。 所有 UFS UPIU 均由单个基本头段、事务特定字段、一个或多个扩展头段和零个或多个数据段组成。基本报头段的固定长度为 12 个字节。 最小 UPIU 大小为 32 字节,其中包括基本报头段和事务特定字段。 最大 UPIU 大小定义为 65600 字节。 UPIU 格式足够灵活,可以轻松扩展以支持未来的交易和更大的数据段,并允许将此协议应用于 UniPro 以外的网络协议。

13、服务交付子系统是一个 I/O 系统,它在通过物理或逻辑总线连接的发起方设备和目标设备之间传输服务请求和响应。 UFS UTP 尝试定义独立于服务交付子系统的协议。 这将允许将 UTP 轻松移植到不同的服务交付子系统。 目前,UFS 使用 MIPI UniPro 总线和 MIPI M-PHY® 作为服务交付子系统。 为方便起见并帮助更好地理解,本标准的部分内容直接引用了 UniPro 和 M-PHY®。 不管这些引用如何,UTP 协议独立于服务交付子系统,应该能够移植到其他 I/O 系统。UPIU 结构将作为 UniPro 服务数据单元 (T_SDU) 移交给 MIPI UniPro。 目前,UniPro T_SDU 不需要额外的头部或尾部包裹在 UPIU 结构周围。 这意味着 T_SDU 大小将恰好是 UPIU 大小。 最小大小 T_SDU 将为 32 字节。 最大 T_SDU 大小将为 65600 字节。

14、每个 UPIU 数据结构都包含一个事务代码。 该代码定义了 UPIU 数据结构的内容和隐含功能或用途。 表 10-1 列出了当前定义的事务代码。

事务代码的第 5 位指示流的方向和 UPIU 的发起者:当等于“0”时,发起者是发起者设备,当等于“1”时,发起者是目标设备。

UPIU Data Structure
Description
NOP Out
NOP Out 事务充当从发起方设备到目标设备的 ping。 它可用于检查设备的连接路径。
NOP In
NOP In 事务是在响应 NOP Out 请求时对发起设备的目标响应。
Command
命令事务起源于发起者设备并被发送到目标设备内的逻辑单元。 COMMAND UPIU 将包含一个命令描述符块作为命令和命令参数。 这代表命令的 COMMAND 阶段。
Response
响应事务起源于目标设备并被发送回发起者设备。 RESPONSE UPIU 将包含命令特定的操作状态和其他响应信息。 这代表命令的状态阶段。
Data Out
数据输出事务源自发起方设备,用于将数据从发起方设备发送到目标设备。 这表示命令的数据输出阶段。
Data In
数据输入事务起源于目标设备,用于将数据从目标设备发送到发起设备。 这表示命令的 DATA IN 阶段。
Task Management
Request
此事务类型携带 SCSI 架构模型 (SAM) 任务管理功能请求,该请求源自发起者设备并终止于目标设备。 标准函数由 [SAM] 定义。
Task Management
Response
此事务类型携带 SCSI 架构模型 (SAM) 任务管理功能响应,该响应源自目标设备并终止于发起者设备。
Ready To Transfer
当目标设备准备好接收下一个 DATA OUT UPIU 并且有足够的缓冲区空间来接收数据时,它会发送一个 Ready To Transfer 事务。 如果目标设备有缓冲区空间来接收多个 DATA OUT UPIU 数据包,则可以发送多个 Ready To Transfer UPIU。 READY TO TRANSFER UPIU 包含一个 DMA 上下文,可用于设置和触发主机控制器内的 DMA 操作。
Query Request
此事务源自发起方设备,用于从目标设备请求描述符数据。 此事务在命令和任务管理功能之外定义,由 UFS 专门定义
Query Response
该事务起源于目标设备,并为响应查询请求事务向发起者设备提供请求的描述符信息。 此事务在命令和任务管理功能之外定义,并由 UFS 专门定义。
Reject
拒绝事务起源于目标设备并被发送回发起者设备。 当目标设备由于某些字段中的错误值而无法解释和/或执行从发起方设备接收到的 UPIU 时,将生成 REJECT UPIU。

UFS 设备在任何时间点都只能处理 NOP OUT 或 QUERY REQUEST。

15、General UFS Protocol Information Unit Format
表 10-3 表示 UPIU 的一般结构。 所有 UPIU 都将包含一个固定大小和位置的基本标头以及支持交易类型所需的附加字段。
以下是12+20字节的头部,为所有UPIU的标准通用格式头部。



15.1、UPIU 总大小将根据 UPIU 事务类型而有所不同(因为不同的UPIU执行的功能不同),但所有 UPIU 大小将是 32 位的整数倍,这意味着它们将在 4 字节边界上寻址。 如果数据和报头段的聚合没有在 32 位边界上结束,则将添加额外的填充以将 UPIU 向上舍入到下一个 32 位、4 字节地址边界。
UPIU 大小可以是固定的或可变的,具体取决于事务类型字段和扩展标志。 对于相同的code,某些事务类型将具有不同的长度(比如传输Data out的时候),而其他事务类型将始终是固定大小。 此外,如有必要,可以扩展任何 UPIU 以包括额外的标头和数据段。 通用格式允许扩展,并在结构中定义了标志和大小字段,以向处理实体指示扩展区域在结构中的位置及其大小(不包括填充)以及在某些情况下扩展数据的类型。

 

15.2、这是包含在每个 UPIU 结构中的基本报头的格式。 此数据包将在发起方设备和目标设备之间发送,并将成为更大功能特定 UPIU 的一部分。 此标头中有足够的信息允许发起设备或目标设备跟踪目标和源、功能请求、是否需要额外的数据和参数以及它们是否包含在此 UPIU 中或将在后续 UPIU 中遵循。最小尺寸的 UPIU 当前定义为 32 字节。 32 字节区域将包含基本标头和附加字段。 这意味着通过服务交付子系统发送的最小数据将是 32 字节。
基本报头格式定义如下:
Transaction Type :事务类型指示数据结构中包含的请求或响应的类型。 Transaction Type 包含一个在 上文中定义的操作码。

HD:HD 位在设置为“1”时指定所有报头段的端到端 CRC 都包含在 UPIU 中。 CRC 字段包括报头区域内的所有字段。 CRC 位于标头之后的 32 位字位置。 此版本的标准不支持端到端 CRC,因此 HD 应为“0”。
DD:DD 位设置为“1”时指定数据段的端到端 CRC 包含在 UPIU 中。 32 位 CRC 是在数据段中的所有字段上计算的。 32 位 CRC 字放置在数据段的末尾。 这将是 UPIU 的最后一个位置。 此版本的标准不支持端到端 CRC,因此 DD 应为“0”。
Transaction Code :事务代码指示在 UPIU 的数据字段中表示的操作以及在 UPIU 中定义的字段的数量和位置。
Flags :Flags 字段的内容随 Transaction Type opcode的不同而不同
Response :如果需要来自目标设备的响应,则此字段指示请求的功能是成功还是失败。 该字段在从发起设备到目标设备的 UPIU 事务中保留。

Status:如果事务是Command Set Type = 00h(SCSI 命令)的COMMAND UPIU RESPONSE UPIU,则此字段包含 SCSI 状态(如 [SAM] 中定义)。 否则,它包含opcode specific status或被保留。
Reserved:所有标记为保留的字段都应包含零值。
LUN:此字段包含请求所针对的逻辑单元号。 目标设备将至少包含一个编号为单元 0 的逻辑单元。该字段由发起设备生成,并由目标设备和发起设备维护,用于单个请求或任务相关的所有 UPIU 事务
Task Tag:任务标签由发起者设备在创建任务请求时生成。 对于与单个任务相关的所有 UPIU 事务,该字段将由发起者设备和目标设备维护。 Initiator 设备将包含一个表示任务标签值的寄存器或变量。 Initiator 设备将在创建新任务请求时通过增加内部变量来生成唯一的任务标签。 当一个任务请求由一系列 UPIU 事务组成或生成一系列 UPIU 事务时,所有 UPIU 将在 Task Tag 字段中包含相同的值。 特别是,应该为表 10-9 的每一行中分组的 UPIU 保持相同的任务标签值。

Initiator ID (IID):Initiator ID 字段为 4 位宽,在字节 4 的位 [7:4] 中编码。该字段指示创建任务请求的 Initiator 设备的身份。如果只有一个 Initiator 设备,则 Initiator ID 应设置为零。 UFS 设备应支持所有 16 个启动器 ID 值。 发起者 ID 应在创建请求时由主机在此字段中编码。 该字段由发起设备和目标设备维护,用于与同一任务相关的所有 UPIU 事务。 来自同一 Initiator 设备的所有请求都具有相同的 IID 值。 UFS HCI 标准规范中提供了有关启动器 ID 分配的详细信息。
Command Set Type :命令集类型字段为 4 位宽,在字节 4 的位 [3:0] 中编码。该字段指示命令和响应 UPIU 关联的命令集类型。 该字段是为 COMMAND UPIU 和 RESPONSE UPIU 定义的。 该字段在所有其他 UPIU 中保留。 该字段用于指示 CDB 字段中的命令类型。 当前支持的命令类型如表 10-10 所示。
                                                Table 10-10 — Command Set Type

Value
Description
0h
SCSI Command Set (SPC, SBC)
1h
UFS Specific Command Set
2h … 7h
Reserved
8h … Fh
Vendor Specific Set

JESD220C 没有定义任何 UFS 特定命令,因此值 1h 保留供将来使用。
Query Function, Task Manag. Function:该字段在QUERY REQUEST和QUERY RESPONSE UPIU中用于定义查询功能,在TASK MANAGEMENT REQUEST UPIU中用于定义任务管理功能。
Device Information:该字段提供所有 RESPONSE UPIU 中特定 UFS 功能所需的设备级别信息。
Data Segment Length:数据段长度字段包含 UPIU 数据段内的有效字节数。 当数据段中的字节数不是四的倍数时,最后一个 32 位字段将用零填充以终止于下一个最近的 32 位边界。 组成数据段的 32 位单元 (DWORDS) 的数量计算如下:由于数据段长度字段大小为两个字节,因此数据段最多可以包含 65535 个有效字节。 该字段中的值为零表示 UPIU 内没有数据段。

Transaction Specific Fields:某些Transaction代码要求的其他字段位于此区域内(比如Query Request 需要此额外字段用来区分查询的内容)。 对于 UTP,该区域从 UPIU 内的字节地址 12 开始,并在字节地址 31 处的 32 字节边界处终止。由于所有 UPIU 都包含一个 12 字节的基本报头,因此该区域剩余 20 个字节。
Data Segment :数据段字段开始于 UPIU 内 EHS 区域之后的下一个 32 位 (DWORD) 边界。 对于 UTP,没有使用 EHS 区域,这意味着数据段将从 UPIU 内的字节地址 32(如果启用 E2ECRC,则为字节地址 36)开始。 数据段将是 32 位的倍数,从而使 UPIU 数据包大小为 4 字节的倍数。 数据段长度字段可以包含一个不是 4 字节倍数的值,但数据段区域将用零填充以填充到下一个最近的 32 位 (DWORD) 边界。 Data Segment Length字段指示数据段内的有效字节数。

 

 

 

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心无杂念可否?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值