UFS4.0协议之UTP层(三)
本文介绍了UFS4.0协议之UTP层:Command UPIU, Response UPIU, DTA OUT/IN UPIU等
·
COMMAND UPIU
- 基本的 UPIU 头部以及指定命令所需的附加信息。发起端设备将生成此 UPIU 并将其发送到目标端设备,以请求目标端设备执行 SCSI 命令服务

- Basic Header
- Transaction Type
- xx00 0001b (0x01)
- Flags
- Flags.W
- 标志中的值 ‘1’ 表示该命令需要从发起端设备到目标端设备的数据传输(传出数据)
- Flags.R
- 标志中的值 ‘1’ 表示该命令需要从目标端设备到发起端设备的数据传输(传入数据)
- Flags.ATTR
- 简单 (Simple)
- 有序 (Ordered)
- 队列头 (Head of Queue)
- ACA (未使用)
- Flags.CP
- CP 字段指示命令优先级 (Command Priority)
- 值“1”表示高优先级。值“0”表示无优先级
- Flags.W
- Data Segment Length
- 数据段长度字段应包含零,因为此 UPIU 中没有数据段。
- Expected Data Transfer Length
- 预期数据传输长度字段包含一个值,表示完成 SCSI 命令请求所需传输的字节数
- 例如,传输长度 (TRANSFER LENGTH)、分配长度 (ALLOCATION LENGTH)、参数列表长度 (PARAMETER LIST LENGTH) 等
- 当 COMMAND UPIU 编码 SCSI WRITE 或 SCSI READ 命令(特别是 WRITE (6)、READ (6)、WRITE (10)、READ (10)、WRITE (16) 或 READ (16))时,此字段的值应为逻辑块大小 (bLogicalBlockSize) 和 CDB 的传输长度 (TRANSFER LENGTH) 字段的乘积
- CDB
- CDB 字段包含命令描述块 (Command Descriptor Block)。此区域是一个 16 字节的数组,将包含由支持的 UFS 命令集类型之一定义的标准命令描述块
- 对于 SCSI,CDB 大小由 CDB[0] 中操作码字段的组位 (group bits) 隐式指示,该字段是 SCSI 命令操作码。如果 CDB 大小小于 16 字节,则未使用的 COMMAND UPIU 字节定义为保留。
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- Command Set Type
- 指定一个枚举值,指示使用哪个特定命令集来定义 CDB 字段中的命令字节
- Transaction Type
RESPONSE UPIU
- 包含基本的 UPIU 头部以及指示命令成功或失败执行结果的命令和设备级状态的附加信息。目标端将在完成请求的任务后生成此 UPIU 并将其发送到发起端设备。
- 在终止需要数据输出 (Data-Out) 数据传输的命令并发送 RESPONSE UPIU 之前,目标端设备应等待,直到它接收到与任何未完成的 READY TO TRANSFER UPIU 相关的所有 DATA OUT UPIU

- Basic Header
- Transaction Type
- xx10 0001b (0x21)
- Flags
- Flags.O
- 当任务执行期间发生数据溢出 (overflow) 时,Flags.O 标志将设置为 ‘1’,目标端设备有比发起端设备请求的更多的数据字节要传输
- Flags.R
- 当任务执行期间发生数据欠载 (underflow) 时,Flags.U 标志将设置为 ‘1’,目标端设备有比发起端设备请求的更少的数据字节要传输。
- Flags.D
- 标志将设置为 ‘1’ 以指示在任务执行期间发生了 UTP 数据输出不匹配错误
- Flags.O
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- Command Set Type
- 指定一个枚举值,指示使用哪个特定命令集来定义 CDB 字段中的命令字节
- 响应 (Response)
- 响应字段将包含 UFS 响应,该响应指示构成任务执行的一系列命令、数据和 RESPONSE UPIU 的 UFS 定义的总体成功或失败
- Table 10.8 — UPIU Response UPIU
- 状态 (Status)
- 状态字段包含发起端设备发出的特定命令的命令集特定状态。
- 特定的命令集可能定义也可能不定义详细的扩展状态,称为感知数据 (Sense Data)。如果命令需要扩展状态,该信息将存储在感知数据 (Sense Data) 字段中。
- SCSI 命令集状态
- GOOD
- 状态表示 SCSI 成功完成,因此不会返回感知数据。
-
CHECK CONDITION
-
此状态表示设备已完成命令但出现错误,或者需要其他操作来处理结果。当发生此状态时,将在响应 UPIU 中返回为最后处理的命令有效的感知数据
-
- BUSY
- 此状态表示逻辑单元正忙。当逻辑单元无法接受命令时将返回此状态。稍后发出命令是标准的恢复操作。
- RESERVATION CONFLICT
- 当执行命令将导致与现有预留冲突时返回此状态。UFS 可能支持预留设备的区域,具体取决于设备类型和功能。
- TASK SET FULL
- 当逻辑单元由于资源不足(例如任务队列已满或命令执行所需的内存暂时不可用)而无法处理命令时返回此状态。
- GOOD
- 设备信息 (Device Information)
- 设备信息字段提供设备级别的信息,不一定与执行命令的逻辑单元相关
- bit 0
- 异常事件警报
- 异常源包括:后台操作 (background operations)、动态容量 (dynamic capacity)、系统数据池 (system data pool) 等。
- 异常事件警报
- bit 1
- 保留用于 HPB(主机性能提升器,Host Performance Booster)扩展标准。
- Data Segment Length
- 数据段长度字段将包含数据段中的有效字节数。
- 当此字段包含零时,表示 UPIU 中没有数据段区域,因此不返回感知数据
- SCSI 命令集时,感知数据字节数为 18,2 字节感知数据长度,因此此字段将包含值 20
- 剩余传输计数 (Residual Transfer Count)
- 仅当 Flags.U 或 Flags.O 字段中的一个设置为 ‘1’ 时,此字段才有效,否则此字段将包含零
- 当 Flags.O 字段设置为 ‘1’ 时
- 因为预期数据传输长度 (Expected Data Transfer Length) 字段包含的值低于目标端设备预期传输的值
- 当 Flags.U 字段设置为 ‘1’ 时
- 因为预期数据传输长度字段包含的值高于可用数据字节数
- 感知数据字段 (Sense Data Fields)
- 感知数据字段将包含关于错误条件的附加信息
- 对于 SCSI 命令,它们将提供前 18 个感知数据字节的副本,如为固定格式感知数据所定义,对应于响应代码值 (Response Code value) 70h
- SCSI 感知数据字段 (SCSI Sense Data Fields)
- 当使用响应代码值 (Response Code value) 为 70h 的格式时,感知数据字段将包含标准的 18 字节 SPC 定义的感知数据
- 感知数据 (Sense Data) 由三个层次的错误代码组成
- 感知键 (Sense Key) 提供发生错误或异常情况的一般类别,并导致当前命令无法成功完成
- 附加感知代码 (Additional Sense Code, ASC) 字段提供更进一步的错误细节
- 附加感知代码限定符 (Additional Sense Code Qualifier, ASCQ) 字段甚至更精细地提炼错误信息
- 所有以错误或异常情况终止的 SCSI 命令将自动在 RESPONSE UPIU 中返回感知数据,从而免除了主机发出后续 REQUEST SENSE 命令来检索附加感知错误信息的需要。
- 感知数据长度 (Sense Data Length)
- 感知数据长度字段指示后续有效感知数据字节的数量。
- SCSI 感知数据长度 (SCSI Sense Data Length)
- 当使用 SCSI 命令集时,感知数据长度字段应指示值 18。
- 感知数据格式 (Sense Data Format)
- 该结构提供了有关先前执行的 SCSI 命令的详细错误信息。返回十八个字节
- RESPONSE CODE: 0x70
- SENSE KEY
- ADDITIONAL SENSE LENGTH:设置为值十
- ASC
- ASCQ
- 该结构提供了有关先前执行的 SCSI 命令的详细错误信息。返回十八个字节
- 感知键 (Sense Key)
- 感知键值提供了一种对错误和异常情况进行分类的方法。感知键指示特定类型的错误。
- NO SENSE
- RECOVERED ERROR
- NOT READY
- MEDIUM ERROR
- HARDWARE ERROR
- ILLEGAL REQUEST
- UNIT ATTENTION
- ABORTED COMMAND
- MISCOMPARE
- 感知键值提供了一种对错误和异常情况进行分类的方法。感知键指示特定类型的错误。
- Transaction Type
DATA OUT UPIU

- Basic Header
- Transaction Type
- xx00 0010b (0x02)
- Flags
- Flags.T
- 值 ‘1’ 表示此 UPIU 中的所有数据应是由 Flags.T 设置为 ‘1’ 的 READY TO TRANSFER UPIU 导致的重传数据。
- Flags.T
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- Data Segment Length
- 数据段长度应指示数据段区域内的有效字节数,并且不应包括填充字节的数量
- 数据缓冲区偏移量 (Data Buffer Offset)
- 数据缓冲区偏移量字段包含此 UPIU 数据负载在完整数据传输区域内的偏移量。
- 此字段允许 DATA OUT UPIU 数据包进行乱序排序 (out of order sequencing)
- 当 DATA OUT UPIU 是 SCSI WRITE 事务的一部分 [即,以 WRITE (6)、WRITE (10) 或 WRITE (16) 命令开始的事务] 时,此字段的值应等于逻辑块大小 (bLogicalBlockSize) 的整数倍
- 数据缓冲区偏移量字段包含此 UPIU 数据负载在完整数据传输区域内的偏移量。
- 数据传输计数 (Data Transfer Count)
- 此字段指示发起端设备在此 UPIU 中传输到目标端设备的字节数
- 在单个 DATA OUT UPIU 数据包中可以传输的最大字节数为 65535 字节,传输超过 65535 字节,则发起端设备将需要发出多个 DATA OUT UPIU 数据包
- 数据段 (Data Segment)
- 这是包含数据负载的数据段区域
- 数据段区域始终在 32 位(双字)边界上开始。除非 UPIU 是传输最后一部分数据的那个,否则数据段区域应完全填充数据负载到 32 位(双字)边界
- 数据输出传输示例
- Transaction Type

DATA IN UPIU

- DATA IN UPIU 包含基本的 UPIU 头部以及管理数据输入传输所需的附加信息。数据输入从目标端设备流向发起端设备(读取)
- DATA IN UPIU 通常包含一个数据段。可能存在空的 DATA IN UPIU:数据段为空且数据段长度为 0
- Basic Header
- Transaction Type
- xx10 0010b (0x22)
- Flags
- Flags.T
- 值 ‘1’ 表示此 UPIU 中的所有数据应为重传数据
- Flags.T
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- Data Segment Length
- 数据段长度应指示数据段区域内的有效字节数,并且不应包括填充字节的数量
- 数据缓冲区偏移量 (Data Buffer Offset)
- 数据缓冲区偏移量字段包含此 UPIU 数据负载在完整数据传输区域内的偏移量。
- 数据缓冲区偏移量和数据段长度之和不应超过在 COMMAND UPIU 中指示的预期数据传输长度 (Expected Data Transfer Length)。
- 此字段允许 DATA IN UPIU 数据包进行乱序排序 (out of order sequencing)。因此,DATA IN UPIU 数据包的顺序不必是连续的。
- 要重传任务的数据,设备应适当设置数据缓冲区偏移量 (Data Buffer Offset) 并设置 Flags.T。此 UPIU 中的所有数据应为重传数据
- 数据缓冲区偏移量字段包含此 UPIU 数据负载在完整数据传输区域内的偏移量。
- 数据传输计数 (Data Transfer Count)
- 此字段指示目标端设备已放置在 UPIU 数据段中以传输回发起端设备的字节数
- 在单个 DATA IN UPIU 数据包中可以传输的最大字节数为 65535 字节
- 当 DATA IN UPIU 是 SCSI READ 事务的一部分 [即,以 READ (6)、READ (10) 或 READ (16) 命令开始的事务] 时,此字段的值应等于逻辑块大小 (bLogicalBlockSize) 的整数倍
- 数据段 (Data Segment)
- 这是包含数据负载的数据段区域
- 数据段区域始终在 32 位(双字)边界上开始。除非 UPIU 是传输最后一部分数据的那个,否则数据段区域应完全填充数据负载到 32 位(双字)边界
- HintControl
- 此字段指示 DATA IN UPIU 中提供的提示字段 (Hint fields)的有效性
- 当此字段设置为 0b 时,提示字段无效,主机控制器应忽略。当此字段设置为 1b 时,提示字段有效。
- HintIID [3:0]
- 设备将传输的 DATA IN UPIU 的 IID
- HintEXT_IID [7:4]
- 指示设备将传输的 DATA IN UPIU 的 EXT_IID
- HintLUN
- 设备将传输的 DATA IN UPIU 的 LUN
- HintTaskTag
- 设备将传输的 DATA IN UPIU 的任务标签 (Task Tag)
- 提示数据缓冲区偏移量 (Hint Data Buffer Offset)
- 设备将传输的 DATA IN UPIU 中的数据缓冲区偏移量 (Data Buffer Offset)
- 提示数据计数 (Hint Data Count)
- 指示目标端设备预期从提示数据缓冲区偏移量 (Hint Data Buffer Offset) 字段开始向发起端传输的 4KB 数量。值 0 表示 4KB 数据。值 1 表示 8KB 数据,依此类推
- 数据输出传输示例
- Transaction Type

READY TO TRANSFER UPIU

- 当目标端设备准备好接收处理需要数据输出 (data out) 传输的 SCSI 命令(例如,写入命令)时的数据块时,会发出 READY TO TRANSFER UPIU
- 目标端设备可以通过设置 UPIU 内的适当字段来按顺序或乱序请求数据。
- 单个 READY TO TRANSFER UPIU 可以请求的最大字节数不应大于 bMaxDataOutSize 属性指示的值
- Basic Header
- Transaction Type
- xx11 0001b (0x31)
- Flags
- Flags.T
- 值 ‘1’ 表示所有请求的数据应为重传数据。
- Flags.T
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- Data Segment Length
- 数据段长度字段应包含零,因为此 UPIU 中没有数据段。
- 数据缓冲区偏移量 (Data Buffer Offset)
- 据缓冲区偏移量字段向发起端设备指示要发送的数据段起始位置
- 数据缓冲区偏移量和数据段长度之和不应超过在 COMMAND UPIU 中指示的预期数据传输长度 (Expected Data Transfer Length)。
- 要重传任务的数据,设备应适当设置数据缓冲区偏移量 (Data Buffer Offset) 并设置 Flags.T。此 UPIU 中的所有数据应为重传数据
- 数据传输计数 (Data Transfer Count)
- 此字段指示目标端设备请求的字节数
- 数据传输计数 (Data Transfer Count) 字段应始终是四字节的整数倍,除了请求传输中最后一部分数据
- 当 RTT UPIU 是 SCSI WRITE 事务的一部分 [即,以 WRITE (6)、WRITE (10) 或 WRITE (16) 命令开始的事务] 时,此字段的值应等于逻辑块大小 (bLogicalBlockSize) 的整数倍
- 单个 READY TO TRANSFER UPIU 可以请求的最大字节数不应大于 bMaxDataOutSize 属性指示的值
- HintControl
- 此字段指示UPIU 中提供的提示字段 (Hint fields)的有效性
- HintIID [3:0]
- 设备将传输的 RTT UPIU 的 IID
- HintEXT_IID [7:4]
- 指示设备将传输的RTT UPIU的 EXT_IID
- HintLUN
- 设备将传输的 RTT UPIU 的 LUN
- HintTaskTag
- 设备将传输的 RTT UPIU 的任务标签 (Task Tag)
- 提示数据缓冲区偏移量 (Hint Data Buffer Offset)
- 设备将传输的 RTT UPIU 中的数据缓冲区偏移量 (Data Buffer Offset)
- 提示数据计数 (Hint Data Count)
- 指示目标端设备预期从提示数据缓冲区偏移量 (Hint Data Buffer Offset) 字段开始向发起端传输的 4KB 数量。值 0 表示 4KB 数据。值 1 表示 8KB 数据,依此类推
- 数据输出传输示例
- Transaction Type

TASK MANAGEMENT REQUEST UPIU

- 由发起端设备用于管理目标端设备内一个或多个任务的执行。任务管理请求功能紧密遵循 SCSI 架构模型
- 要求 LU 任务管理器能够处理至少一个任务管理请求 (Task Management Request)。如果设备中的任务管理器接受多个任务管理请求,则任务管理器可以按任何顺序执行这些请求。当主机提交的未完成任务管理请求数量超过任务管理器的处理能力时,任务管理器可能以任务管理功能失败 (Task Management Function Failed) 服务响应拒绝任务管理请求
- Basic Header
- Transaction Type
- xx00 0100b (0x04)
- Flags
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- 任务管理功能 (Task Management Function)
- 中止任务 (Abort Task)
- 中止特定 LU 中队列中的特定任务。通过 IID、LUN 和任务标签 (Task Tag) 标识
- 中止任务集 (Abort Task Set)
- 中止特定 LU 中的任务队列列表。通过 IID 和 LUN 标识。
- 清除任务集 (Clear Task Set)
- 清除特定 LU 中的任务队列列表。通过 LUN 标识。
- 逻辑单元重置 (Logical Unit Reset)
- 重置指定的 LU。通过 LUN 标识。
- 查询任务 (Query Task)
- 查询特定 LU 中队列列表中的特定任务。通过 IID、LUN 和任务标签标识。如果特定任务存在于队列中,则在响应中返回功能成功 (Function Succeeded)。如果特定任务不存在于队列中,则在响应中返回功能完成 (Function Complete)。
- 查询任务集 (Query Task Set)
- 查询特定 LU 以查看队列中是否有任何任务。通过 IID 和 LUN 标识。如果队列中存在一个或多个任务,则在响应中返回功能成功 (Function Succeeded)。如果队列中没有任务,则在响应中返回功能完成 (Function Complete)。
- 中止任务 (Abort Task)
- 任务管理输入参数 (Task Management Input Parameters)
- 输入参数 1 (Input Parameter 1)
- (LSB): 任务管理功能所操作的逻辑单元 (Logical Unit) 的 LUN。
- 输入参数 2 (Input Parameter 2)
- (LSB): 任务管理功能所操作的任务/命令的任务标签 (Task Tag)
- 输入参数 3 (Input Parameter 3)
- 发起端 ID [7:0] 任务管理功能所操作的任务/命令的发起端 ID (Initiator ID)。
- 如果 bEXTIIDEn 设置为 00h,此字段的最高有效半字节 (MSB nibble) 应设置为 0000b
- 如果 bEXTIIDEn 设置为 01h,此字段的最高有效半字节应设置为任务管理功能所操作的任务/命令的 EXT_IID
- 最低有效半字节 (LSB nibble) 应设置为任务管理功能所操作的任务/命令的 IID。
- 输入参数 1 (Input Parameter 1)
- Transaction Type
TASK MANAGEMENT RESPONSE UPIU

- 由目标端设备发送,以响应来自发起端设备的任务管理请求。任务管理响应功能紧密遵循 SCSI 架构模型
- 如果目标端设备正在处理需要数据输出 (Data-Out) 数据传输的任务,并且它接收到中止该命令的任务管理请求,则目标端设备应停止为请求中止的命令发送 READY TO TRANSFER UPIU
- 导致任务中止的任务管理功能有:中止任务 (Abort Task)、中止任务集 (Abort Task Set)、清除任务集 (Clear Task Set) 和逻辑单元重置 (Logical Unit Reset)
- Basic Header
- Transaction Type
- xx10 0100b (0x24) )
- Flags
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- 响应 (Response)
- 该响应指示任务管理请求的成功或失败
- 任务管理输出参数 (Task Management Output Parameters)
- 输出参数 1 (Output Parameter 1)
- 最低有效字节 (LSB): 任务管理服务响应 (Task Management Service Response) 其他字节: 保留。
- 任务管理功能完成 (Task Management Function Complete)
- 任务管理功能不支持 (Task Management Function Not Supported)
- 任务管理功能失败 (Task Management Function Failed)
- 当 UFS 设备由于 TMR 处理能力超出而无法处理请求时,应返回此响应。
- 任务管理功能成功 (Task Management Function Succeeded)
- 逻辑单元号不正确 (Incorrect Logical Unit Number)
- 最低有效字节 (LSB): 任务管理服务响应 (Task Management Service Response) 其他字节: 保留。
- 输出参数 2 (Output Parameter 2)
- 保留 (Reserved)
- 输出参数 1 (Output Parameter 1)
- Transaction Type
QUERY REQUEST UPIU

- 用于在发起端设备和目标端设备之间传输标准用户数据读写命令域之外的数据
- 它可用于获取配置或枚举信息,设置或清除总线或整体设备条件,设置或重置全局标志值、参数或属性,获取或设置描述符,获取序列号或 GUID(全局唯一标识符)等
- 描述符 (Descriptors)
- 描述符是描述设备某些方面的一个参数块或页面。例如,有设备描述符(Device Descriptors)、配置描述符(Configuration Descriptors)、单元描述符(Unit Descriptors)等
- 属性 (Attributes)
- 属性是一个单一参数,代表可以设置或读取的特定数值范围。该值可以是字节、字或浮点数。
- 标志 (Flags)
- 标志是一个单一的布尔值,代表 TRUE 或 FALSE、‘0’ 或 ‘1’、ON 或 OFF 类型的值。标志可以被清除(复位)、置位(设置)、翻转(toggle)或读取。标志对于在设备内启用或禁用某些功能、模式或状态非常有用
- 描述符 (Descriptors)
- 发送 QUERY REQUEST UPIU 后,发起端设备在收到待处理请求的 QUERY RESPONSE UPIU 之前,不得发送新的 QUERY REQUEST UPIU。如果目标端设备在仍在处理先前的 QUERY REQUEST UPIU 时收到 QUERY REQUEST UPIU,它应忽略最新的请求。
- Transaction Type
- xx01 0110b (0x16)
- 查询功能 (Query Function)
- 01h 标准读取请求 (STANDARD READ REQUEST)
- 标准读取请求功能类型用于从目标设备读取请求的信息
- 40-7Fh 供应商特定读取功能 (Vendor Specific Read Functions)
- 81h 标准写入请求 (STANDARD WRITE REQUEST)
- 标准写入请求功能类型用于向目标设备写入信息和数据。要写入目标设备的信息和数据将包含在查询请求 UPIU (QUERY REQUEST UPIU) 数据包的数据段 (Data Segment) 字段中
- C0h-FFh 供应商特定写入功能 (Vendor Specific Write Functions)
- 01h 标准读取请求 (STANDARD READ REQUEST)
- 特定事务字段 (Transaction Specific Fields)
- 操作码 (OPCODE)
- 00h 空操作 (NOP) 任何值 (Any value)
- 01h 读取描述符 (READ DESCRIPTOR)
- 标准读取请求 (STANDARD READ REQUEST)
- 02h 写入描述符 (WRITE DESCRIPTOR)
- 标准写入请求 (STANDARD WRITE REQUEST)
- 03h 读取属性 (READ ATTRIBUTE)
- 标准读取请求 (STANDARD READ REQUEST)
- 04h 写入属性 (WRITE ATTRIBUTE)
- 标准写入请求 (STANDARD WRITE REQUEST)
- 05h 读取标志 (READ FLAG)
- 标准读取请求 (STANDARD READ REQUEST)
- 06h 置位标志 (SET FLAG)
- 标准写入请求 (STANDARD WRITE REQUEST)
- 07h 清除标志 (CLEAR FLAG)
- 标准写入请求 (STANDARD WRITE REQUEST)
- 08h 翻转标志 (TOGGLE FLAG)
- 标准写入请求 (STANDARD WRITE REQUEST)
- F0h-FFh 供应商特定 (Vendor Specific)
- OSF (操作码特定字段)
- 操作码特定字段 (Opcode Specific Field)。OSF 字段将为每个特定的操作码 (OPCODE) 定义。
- 操作码 (OPCODE)
- 读取描述符操作码 (Read Descriptor Opcode)

- 描述符 IDN (DESCRIPTOR IDN)
- 指示要检索的特定描述符类型。例如,它可以指示设备描述符 (Device Descriptor)、单元描述符 (Unit Descriptor) 或字符串描述符 (String Descriptor)
- 索引 (INDEX)
- 用于进一步标识特定的描述符。例如,可能定义了多个字符串描述符。在存在多个描述符的情况下,使用索引 (INDEX) 字段来选择特定的一个
- 选择器 (SELECTOR)
- 选择器 (SELECTOR) 字段可能需要用于进一步标识特定的描述符。
- 长度 (LENGTH)
- 长度 (LENGTH) 字段用于指示要读取的描述符字节数。这些字节将在查询响应 UPIU (QUERY RESPONSE UPIU) 数据包中返回。这是请求读取的长度,它可能小于、等于或大于实际描述符内的字节数。
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 写入描述符操作码 (Write Descriptor Opcode)
- table 10.38
- 描述符 IDN (DESCRIPTOR IDN)
- 指示要检索的特定描述符类型。例如,它可以指示设备描述符 (Device Descriptor)、单元描述符 (Unit Descriptor) 或字符串描述符 (String Descriptor)
- 索引 (INDEX)
- 用于进一步标识特定的描述符。例如,可能定义了多个字符串描述符。在存在多个描述符的情况下,使用索引 (INDEX) 字段来选择特定的一个
- 选择器 (SELECTOR)
- 选择器 (SELECTOR) 字段可能需要用于进一步标识特定的描述符。
- 长度 (LENGTH)
- 指示要写入的描述符字节数。只能写入整个描述符;不允许部分写入或更新。这些字节将包含在查询请求 UPIU (QUERY REQUEST UPIU) 数据包的数据段 (DATA SEGMENT) 区域内。
- 如果长度 (LENGTH) 不等于描述符大小,操作将失败:描述符不会被更新,并且查询响应 UPIU (QUERY RESPONSE UPIU) 的查询响应 (Query Response) 字段将被设置为失败 (FAILURE)
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域包含要写入的数据。
- 读取属性操作码 (Read Attribute Opcode)

- 属性 IDN (ATTRIBUTE IDN)
- 属性 IDN (ATTRIBUTE IDN) 包含一个值,标识要从目标设备检索的特定属性。
- 索引 (INDEX)
- 对于组织成数组的属性,索引值 (index value) 用于标识特定元素
- 选择器 (SELECTOR)
- 字段可能需要用于进一步标识属性的特定元素。对于不需要它的属性,选择器字段应设置为零。
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 写入属性操作码 (Write Attribute Opcode)

- 属性 IDN (ATTRIBUTE IDN)
- 属性 IDN (ATTRIBUTE IDN) 包含一个值,标识要从目标设备检索的特定属性。
- 索引 (INDEX)
- 对于组织成数组的属性,索引值 (index value) 用于标识特定元素
- 值 (VALUE [63:0])
- 64 位值 (VALUE) 字段包含属性的数据值。该值 (VALUE) 是右对齐的大端序 (big Endian) 值。未使用的高位应设置为零。
- 选择器 (SELECTOR)
- 字段可能需要用于进一步标识属性的特定元素。对于不需要它的属性,选择器字段应设置为零。
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 读取标志操作码 (Read Flag Opcode)

- 标志 IDN (FLAG IDN))
- 标志 IDN (FLAG IDN) 字段包含一个值,标识要从目标设备检索的特定标志。
- 索引 (INDEX)
- 可能需要用于标识标志的特定元素
- 选择器 (SELECTOR)
- 可能需要用于进一步标识标志的特定元素。在本版本的标准中,选择器字段未使用,其值应为零。
- 操作 (Operation)
- 寻址标志的布尔值在查询响应 UPIU (QUERY RESPONSE UPIU) 中返回
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 置位标志 (Set Flag)
- table 10.42
- 标志 IDN (FLAG IDN))
- 标识要在目标设备中置位的特定标志
- 索引 (INDEX)
- 可能需要用于标识标志的特定元素
- 选择器 (SELECTOR)
- 可能需要用于进一步标识标志的特定元素。在本版本的标准中,选择器字段未使用,其值应为零。
- 操作 (Operation)
- 寻址标志的布尔值被置为 TRUE 或 ‘1’
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 清除标志 (Clear Flag)
- table 10.43
- 标志 IDN (FLAG IDN))
- 标识要在目标设备中清除的特定标志
- 索引 (INDEX)
- 可能需要用于标识标志的特定元素
- 选择器 (SELECTOR)
- 可能需要用于进一步标识标志的特定元素。在本版本的标准中,选择器字段未使用,其值应为零。
- 操作 (Operation)
- 寻址标志的布尔值被清除为 FALSE 或 ‘0’
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 翻转标志 (Toggle Flag)
- table 10.44
- 标志 IDN (FLAG IDN))
- 标识要在目标设备中翻转的特定标志
- 索引 (INDEX)
- 可能需要用于标识标志的特定元素
- 选择器 (SELECTOR)
- 可能需要用于进一步标识标志的特定元素。在本版本的标准中,选择器字段未使用,其值应为零。
- 操作 (Operation)
- 寻址标志的布尔值被设置为其当前值的取反值
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 空操作 (NOP)

- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
QUERY RESPONSE UPIU

- 查询响应 UPIU (QUERY RESPONSE UPIU) 用于在目标设备和发起方设备之间传输数据,以响应查询请求 UPIU (QUERY REQUEST UPIU)
- 查询响应 UPIU (QUERY RESPONSE UPIU) 用于在读取描述符/属性/标志查询请求的情况下,将参数数据返回给请求的发起方设备,或者为写入描述符/属性查询请求或置位/清除/翻转标志查询请求提供响应。
- Transaction Type
- xx11 0110b (0x36)
- 查询功能 (Query Function)
- 查询功能 (Query Function) 字段将包含在相应的查询请求 UPIU (QUERY REQUEST UPIU) 中接收到的原始查询功能值
- 查询响应 (Query Response)
- 查询响应 (Query Response) 字段指示为响应查询请求 UPIU (QUERY REQUEST UPIU) 所采取操作的完成代码
- 00h 成功 (Success)
- F6h 参数不可读 (Parameter not readable)
- F7h 参数不可写 (Parameter not writeable)
- F8h 参数已写入 (Parameter already written)
- 适用于具有“一次性写入 (Write once)”或“上电复位 (Power on reset)”写入访问属性的参数
- F9h 无效长度 (Invalid LENGTH)
- FAh 无效值 (Invalid value)
- 适用于以下操作:写入描述符 (write descriptor)、写入属性 (write attribute)、置位标志 (set flag)、清除标志 (clear flag)
- FBh 无效选择器 (Invalid SELECTOR)
- FCh 无效索引 (Invalid INDEX)
- FDh 无效 IDN (Invalid IDN)
- FEh 无效操作码 (Invalid OPCODE)
- FFh 一般失败 (General failure)
- 设备信息 (Device Information)
- 参考(RESPONSE UPIU) 中的设备信息字段定义
- 特定事务字段 (Transaction Specific Fields)

- 操作码 (OPCODE)
- 如果在查询请求 UPIU (QUERY REQUEST UPIU) 中,查询功能 (Query Function) 字段设置为标准读取请求 (STANDARD READ REQUEST),而操作码 (OPCODE) 字段设置为写入描述符 (WRITE DESCRIPTOR)、写入属性 (WRITE ATTRIBUTE)、置位标志 (SET FLAG)、清除标志 (CLEAR FLAG) 或翻转标志 (TOGGLE FLAG);则查询请求应失败,并且查询响应 (Query Response) 字段应设置为“无效操作码 (Invalid OPCODE)”或“一般失败 (General failure)”
- 如果在查询请求 UPIU (QUERY REQUEST UPIU) 中,查询功能 (Query Function) 字段设置为标准写入请求 (STANDARD WRITE REQUEST),而操作码 (OPCODE) 字段设置为读取描述符 (READ DESCRIPTOR)、读取属性 (READ ATTRIBUTE) 或读取标志 (READ FLAG);则查询请求应失败,并且查询响应 (Query Response) 字段应设置为“无效操作码 (Invalid OPCODE)”或“一般失败 (General failure)”
- OSF (操作码特定字段)
- 操作码特定字段 (Opcode Specific Field)。OSF 字段将为每个特定的操作码 (OPCODE) 定义。
- 读取描述符操作码 (Read Descriptor Opcode)

- 描述符 IDN (DESCRIPTOR IDN)
- 字段包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同描述符 IDN (DESCRIPTOR IDN) 值
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值
- 长度 (LENGTH)
- 指示为响应相应查询请求 UPIU (QUERY REQUEST UPIU) 而返回的字节数。如果数据项的大小小于相应查询请求 UPIU (QUERY REQUEST UPIU) 中请求的大小,则此值可能小于请求的大小。
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域包含描述符数据
- 写入描述符操作码 (Write Descriptor Opcode)
- 描述符 IDN (DESCRIPTOR IDN)
- 字段包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同描述符 IDN (DESCRIPTOR IDN) 值
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 长度 (LENGTH)
- 指示写入的描述符字节数。只能写入整个描述符;不允许部分写入或更新
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 描述符 IDN (DESCRIPTOR IDN)
- 读取属性操作码 (Read Attribute Opcode)
- 属性 IDN (ATTRIBUTE IDN)
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同属性 IDN (ATTRIBUTE IDN) 值。
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 值 (VALUE [63:0])
- 字段包含属性 (ATTRIBUTE) 的数据值。该值 (VALUE) 是右对齐的大端序 (big Endian) 值。未使用的高位应设置为零。
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 属性 IDN (ATTRIBUTE IDN)
- 写入属性操作码 (Write Attribute Opcode)
- 属性 IDN (ATTRIBUTE IDN)
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同属性 IDN (ATTRIBUTE IDN) 值。
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 值 (VALUE [63:0])
- 包含写入属性查询请求中提供的相同数据
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 属性 IDN (ATTRIBUTE IDN)
- 读取标志操作码 (Read Flag Opcode)

- 标志 IDN (FLAG IDN))
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同标志 IDN (FLAG IDN) 值。
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 标志值 (FLAG VALUE))
- 包含标志数据:00h 或 01h
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 置位标志 (Set Flag)
- 标志 IDN (FLAG IDN))
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同标志 IDN (FLAG IDN) 值
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 标志值 (FLAG VALUE)
- 标志值 (FLAG VALUE) 字段包含标志数据:00h 或 01h
- 仅在查询响应 (Query Response) 字段指示操作已成功完成(“成功 (Success)”)时才有效
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 标志 IDN (FLAG IDN))
- 清除标志 (Clear Flag)
- 标志 IDN (FLAG IDN))
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同标志 IDN (FLAG IDN) 值。
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 标志值 (FLAG VALUE)
- 标志值 (FLAG VALUE) 字段包含标志数据:00h 或 01h
- 仅在查询响应 (Query Response) 字段指示操作已成功完成(“成功 (Success)”)时才有效
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 标志 IDN (FLAG IDN))
- 翻转标志 (Toggle Flag)
- 标志 IDN (FLAG IDN))
- 包含与相应查询请求 UPIU (QUERY REQUEST UPIU) 发送的相同标志 IDN (FLAG IDN) 值。
- 索引 (INDEX)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同索引 (INDEX) 值。
- 选择器 (SELECTOR)
- 相应查询请求 UPIU (QUERY REQUEST UPIU) 的相同选择器 (SELECTOR) 值。
- 标志值 (FLAG VALUE)
- 标志值 (FLAG VALUE) 字段包含标志数据:00h 或 01h
- 仅在查询响应 (Query Response) 字段指示操作已成功完成(“成功 (Success)”)时才有效
- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
- 标志 IDN (FLAG IDN))
- 空操作 (NOP)

- 数据段 (Data Segment)
- 数据段 (Data Segment) 区域为空。
REJECT UPIU

- 目的是简化软件开发和系统调试,如果设备接收到具有无效事务类型 (Invalid Transaction Type) 的 UPIU,则应发送拒绝 UPIU (REJECT UPIU)
- Basic Header
- Transaction Type
- xx11 1111b (0x3f)
- Flags
- 标志字段值 (Flags field value) 应等于零
- LUN
- 等于被拒绝 UPIU 的 LUN 值
- 任务标签 (Task Tag)
- 等于被拒绝 UPIU 的任务标签 (Task Tag) 值
- IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最低有效半字节 (LSB nibble)
- 等于被拒绝 UPIU 的 IID 值
- EXT_IID
- 发起端 ID 连接点 (Initiator ID nexus) 的最高有效半字节 (MSB nibble)
- 等于被拒绝 UPIU 的 EXT_ID 值
- 响应 (Response)
- 设置为 01h(目标失败 (Target Failure)),指示目标设备无法执行请求的操作。
- Data Segment Length
- 数据段长度字段应包含零,因为此 UPIU 中没有数据段。
- 基本头部状态 (Basic Header Status)
- 提供有关发起方设备接收到的 UPIU 中检测到的错误的信息。
- 00h 保留 (Reserved)
- 01h 无效事务类型 (Invalid Transaction Type)
- 提供有关发起方设备接收到的 UPIU 中检测到的错误的信息。
- E2E 状态 (E2E Status)
- 提供被拒绝 UPIU 的头部和数据的端到端 CRC (end-to-end CRC) 结果
- (Bit 0) 0: header E2ECRC 已验证或不支持 1: header E2ECRC 错误
- (Bit 1) 0: data E2ECRC 已验证或不支持 1: data E2ECRC 错误
- 提供被拒绝 UPIU 的头部和数据的端到端 CRC (end-to-end CRC) 结果
- Transaction Type
NOP OUT UPIU

- 发起方设备可以使用 NOP OUT UPIU 来检查到设备的连接。目标设备将响应 NOP OUT UPIU,发送一个 NOP IN UPIU 回给发起方设备。
- table 10.61
- Basic Header
- 任务标签 (Task Tag)
- 通常与 SCSI 的 L_T_L_Q 关系寻址 (L_T_L_Q nexus addressing) 相关
- Transaction Type
- xx00 00000b
- Flags
- 标志字段值 (Flags field value) 应等于零
- Data Segment Length
- 数据段长度字段应包含零,因为此 UPIU 中没有数据段。
- 任务标签 (Task Tag)
NOP IN UPIU

- NOP IN UPIU 是目标设备对发起方设备发送的 NOP OUT UPIU 的响应
- Basic Header
- 任务标签 (Task Tag)
- 等于相应 NOP OUT UPIU 的任务标签 (Task Tag) 值
- Transaction Type
- xx10 00000b
- Flags
- 标志字段值 (Flags field value) 应等于零
- 响应 (Response)
- 应设置为 00h(目标成功 (Target Success)),指示目标设备能够响应 NOP OUT UPIU
- Data Segment Length
- 数据段长度字段应包含零,因为此 UPIU 中没有数据段。
- 任务标签 (Task Tag)
更多推荐



所有评论(0)