10.1 概述
SCSI 架构模型 [SAM] 被用作 UTP 的通用架构模型,并且使用 SAM 任务管理功能进行任务管理。任务通常是 SCSI 命令或服务请求。SAM 架构是一个客户端-服务器模型,或者更常见的是一个请求-响应架构。客户端称为发起端设备 (Initiator devices),服务器称为目标端设备 (Target devices)。发起端设备向将执行所请求服务的目标端设备发出命令或服务请求。目标端设备是一个 UFS 设备。一个 UFS 设备将包含一个或多个逻辑单元 (Logical Units)。逻辑单元是设备内的独立处理实体。
客户端请求被定向到设备内的单个逻辑单元。逻辑单元将接收并处理客户端命令或请求。每个逻辑单元在目标端设备内有一个称为逻辑单元号 (Logical Unit Number, LUN) 的地址。
发起端设备和目标端设备之间的通信被划分为一系列消息。这些消息被格式化为本标准中定义的 UFS 协议信息单元 (UFS Protocol Information Units, UPIU)。
任务 (Task) 是执行所请求服务的命令或动作序列。一个逻辑单元包含一个支持处理一个或多个任务的任务队列。任务队列由逻辑单元(LU)管理。当构建任务时,发起端设备会生成一个唯一的任务标签 (Task Tag)。目标端设备和发起端设备使用此任务标签来区分多个任务。
命令结构由包含命令操作码 (opcode) 及相关参数、标志和属性的命令描述块 (Command Descriptor Blocks, CDB) 组成。CDB 内容和结构的详细描述在 [SAM], [SBC] 和 [SPC] 中定义。
一个命令事务 (command transaction) 包含一个命令阶段 (Command Phase)、一个可选的数据阶段 (Data Phase) 和一个状态阶段 (Status Phase)。这些事务以 UPIU 结构的形式表示。命令阶段将命令信息和支持参数从发起端设备传送到目标端设备。如果需要数据阶段,则数据流的方向相对于发起端设备。数据写入 (WRITE) 从发起端设备流向目标端设备。数据读取 (READ) 从目标端设备流向发起端设备。在命令完成时,目标端设备将在状态阶段向发起端设备发送响应。响应将包含状态和一个 UFS 响应状态,指示命令成功完成或失败。如果指示错误,响应将包含额外的详细 UFS 错误信息。
10.2 UTP 和 UniPro 特定概述
UTP 将作为标准消息包 (T_SDU) 通过 UniPro 网络传递命令、数据和响应。
UFS 事务将被分组到称为 UFS 协议信息单元 (UPIU) 的数据结构中。
定义了用于 UFS SCSI 命令、响应、数据输入 (data in) 和数据输出 (data out)、任务管理、实用功能、供应商功能、事务同步和控制的 UPIU。
对于枚举和配置,UFS 支持一个描述符 (Descriptors)、属性 (Attributes) 和标志 (Flags) 的系统,用于定义和控制设备的细节,包括操作特性、接口、逻辑单元数量、操作速度、功耗配置文件等。
10.2.1 阶段 (Phases)
基于 SCSI 的命令协议要求 UPIU 数据包遵循执行命令所需的转换。简而言之,命令执行需要发送一个 COMMAND UPIU、零个或多个 DATA IN UPIU 或 DATA OUT UPIU 数据包,并以包含状态的 RESPONSE UPIU 终止。
10.2.2 数据流控 (Data Pacing)
设备可能具有用于缓冲的有限内存资源或有限的处理吞吐量。在需要大数据输出事务的命令期间,目标端设备可以通过在准备好接收下一个 DATA OUT UPIU 时发送 READY TO TRANSFER UPIU 来控制数据输出阶段的节奏。此外,READY TO TRANSFER UPIU 包含一个嵌入式传输上下文 (embedded transfer context),用于在主机端按每个数据包启动 DMA 传输。
在数据输入 (Data In) 阶段,不需要 READY TO TRANSFER UPIU,因为主机能够指定数据输入传输的大小,从而能够为传入数据预先分配适当的内存资源。设备发出的 DATA IN UPIU 数据包也包含一个嵌入式 DMA 上下文,可用于按每个数据包启动 DMA 传输。
10.2.3 UniPro
为了满足 UniPro 协议的要求,UFS 发起端设备和目标端设备将把其事务划分为包含 UPIU 的 UniPro 消息。UniPro 消息理论上可以处理大小无限制的 T_SDU 消息。UFS 将对最大 T_SDU 消息大小施加一个实际限制。该限制为 65600 字节,包括 UPIU 头部、可选的扩展头部区域和数据段。最小消息大小由基本头部格式决定,为 32 字节。
10.3 UFS 传输协议事务概述
UFS 事务由称为 UFS 协议信息单元 (UPIU) 的数据包组成,这些数据包在 UniPro 总线上的设备之间传输。事务以请求-响应操作的形式在发起端设备和目标端设备之间开始。发起端设备通过向目标端设备和逻辑单元发送请求来启动事务序列。然后,目标端设备将响应一系列事务,最终以一个响应事务结束。
所有 UFS UPIU 都包含一个基本头部段 (basic header segment)、特定于事务的字段、可能的一个或多个扩展头部段 (extended header segments) 以及零个或多个数据段 (data segments)。
一个基本头部段的固定长度为 12 字节。最小的 UPIU 大小为 32 字节,包括一个基本头部段和特定于事务的字段。
最大的 UPIU 大小定义为 65600 字节。
10.4 服务交付子系统 (Service Delivery Subsystem)
服务交付子系统是一个 I/O 系统,用于在通过物理或逻辑总线连接的发起端设备和目标端设备之间传输服务请求和响应。UFS UTP 试图定义一个独立于服务交付子系统的协议。这将允许 UTP 轻松移植到不同的服务交付子系统。
目前,UFS 使用 MIPI UniPro 总线和 MIPI M-PHY® 作为服务交付子系统。UTP 协议独立于服务交付子系统,并且应该能够移植到其他 I/O 系统。
UPIU 结构将作为 UniPro 服务数据单元 (T_SDU) 交给 MIPI UniPro。目前,UniPro T_SDU 不需要在 UPIU 结构周围添加额外的头部或尾部。这意味着 T_SDU 的大小将恰好是 UPIU 的大小。最小的 T_SDU 大小为 32 字节。最大的 T_SDU 大小将为 65600 字节。
10.5 UPIU 事务
每个 UPIU 数据结构都包含一个事务代码 (Transaction Code)。此代码定义了 UPIU 数据结构的内容以及隐含的功能或用途。表 10.1 列出了当前定义的事务代码。
表 10.1 — UPIU 事务代码 | |||
发起端到目标端 |
事务代码 |
目标端到发起端 |
事务代码 |
NOP OUT |
00 0000b (0x00) |
NOP IN |
10 0000b (0x20) |
COMMAND |
00 0001b (0x01) |
RESPONSE |
10 0001b (0x21) |
DATA OUT |
00 0010b (0x02) |
DATA IN |
10 0010b (0x22) |
TASK MANAGEMENT REQUEST |
00 0100b (0x04) |
TASK MANAGEMENT RESPONSE |
10 0100b (0x24) |
保留 (Reserved) |
01 0001b (0x11) |
READY TO TRANSFER |
11 0001b (0x31) |
QUERY REQUEST |
01 0110b (0x16) |
QUERY RESPONSE |
11 0110b (0x36) |
保留 (Reserved) |
01 1111b (0x1F) |
REJECT UPIU |
11 1111b (0x3F) |
保留 (Reserved) |
其他 (Others) |
保留 (Reserved) |
其他 (Others) |
注 1 事务代码的第 5 位 (Bit 5) 指示 UPIU 的流向和发起者:当等于 ‘0’ 时,发起者是发起端设备;当等于 ‘1’ 时,发起者是目标端设备。
NOP Out 事务充当从发起端设备到目标端设备的 ping。它可用于检查到设备的连接。 |
NOP In 事务是目标端设备在响应 NOP Out 请求时发送给发起端设备的响应。 |
命令事务 (Command) 起源于发起端设备,并发送到目标端设备内的一个逻辑单元。表示命令的命令阶段 (COMMAND phase)。 |
响应事务 (Response) 起源于目标端设备并发送回发起端设备。表示命令的状态阶段 (STATUS phase)。 |
数据输出事务 (Data Out) 起源于发起端设备,用于将数据从发起端设备发送到目标端设备。这表示命令的数据输出阶段 (DATA OUT phase)。 |
数据输入事务 (Data In) 起源于目标端设备,用于将数据从目标端发送到发起端设备。这表示命令的数据输入阶段 (DATA IN phase)。 |
TASK Management Request 此事务类型携带 SCSI 架构模型 (SAM) 任务管理功能请求,起源于发起端设备并在目标端设备终止。 |
TASK Management Response 此事务类型携带 SCSI 架构模型 (SAM) 任务管理功能响应,起源于目标端设备并在发起端设备终止。 |
READY TO TRANSFER UPIU 当目标端设备准备好接收下一个 DATA OUT UPIU 并且有足够的缓冲区空间来接收数据时,它将发送一个就绪传输事务 (Ready To Transfer)。 |
Query Request 此事务起源于发起端设备,用于从目标端设备请求描述符数据。此事务在命令和任务管理功能之外定义,由 UFS 独家定义。 |
Query Response 此事务起源于目标端设备,提供请求的描述符信息给发起端设备,以响应查询请求事务。此事务在命令和任务管理功能之外定义,由 UFS 独家定义。 Reject |
拒绝事务 (Reject) 起源于目标端设备并发送回发起端设备。当目标端设备由于某些字段的值错误而无法解释和/或执行从发起端设备收到的 UPIU 时,会生成 REJECT UPIU。 |