UFS3.1协议中文学习讲解(10.7.6~10.7.9)

事先声明本文不用于任何商业行为,仅用于本人学习与记录。所有截图版权均属于《JESD220E-UFS3.1》

欢迎点赞、收藏、转发分享给朋友,禁止未经书面授权的复制、搬运、二次剪辑。

如有引用请注明出处。

标准规范仍然以《JESD220E-UFS3.1》为准

写在最前:往后个人见解部分均用实线框出来。

本章注要会介绍QUERY REQUEST UPIU查询请求UPIU,他是用来写读设备配置的,比如说你想知道某些功能有没有打开,有没有配置,怎么配置,均用这个,也是十分重要的UPIU之一。

10.7.6 TASK MANAGEMENT REQUEST UPIU任务管理请求 UPIU

TASK MANAGEMENT REQUEST UPIU 由发起设备使用,用于管理目标设备内一个或多个任务的执行。任务管理请求功能紧密遵循 SCSI 架构模型 [SAM]。

UFS 设备中的任务管理功能要求 LU 任务管理器具有处理至少一个任务管理请求的能力。如果设备中的任务管理器接受了多个任务管理请求,则任务管理器可以按任意顺序执行这些请求。当主机提交的未完成任务管理请求数量超过任务管理器的能力时,任务管理器可以使用任务管理功能失败(Task Management Function Failed)服务响应来拒绝任务管理请求。


任务管理请求是干嘛的?

任务管理请求是主机用来管理设备上正在执行的任务的特殊命令,不是普通的读写命令。

设备处理任务管理请求的规则:

  1. 设备至少要能同时处理 1 个任务管理请求
  2. 如果同时来了多个,设备可以按任意顺序处理(不保证先来先处理)
  3. 如果主机发的任务管理请求太多,超过设备处理能力,设备可以拒绝,返回 "任务管理功能失败"

10.7.6.1 Basic Header基本头

TASK MANAGEMENT REQUEST UPIU 的前 12 字节包含 10.6.2 节 "基本头格式" 中描述的基本头。具体细节如下:

a) Transaction Type(事务类型)

类型码值为 xx00 0100b 表示 TASK MANAGEMENT REQUEST UPIU。

b) Initiator ID (IID)(发起设备 ID)

发起设备 ID 字段(字节 4 的位 [7:4])指示创建任务请求的发起设备的身份。详见 10.6.2 节基本头格式中的发起设备 ID 描述。

c) Task Management Function(任务管理功能)

表 10.23 基于 [SAM] 定义了 UFS 任务管理功能。

d) Task Management Input Parameters(任务管理输入参数)

10.7.7 TASK MANAGEMENT RESPONSE UPIU任务管理响应 UPIU

TASK MANAGEMENT RESPONSE UPIU 由目标设备发送,用于响应发起设备的任务管理请求。任务管理响应功能紧密遵循 SCSI 架构模型 [SAM]。

如果目标设备正在处理一个需要 Data-Out 数据传输的任务,并且收到了中止该命令的任务管理请求,则目标设备应停止发送与要中止的命令相关的 READY TO TRANSFER UPIU。目标设备应等待,直到它收到与任何未完成的 READY TO TRANSFER UPIU 相关的所有 DATA OUT UPIU,然后再发送 TASK MANAGEMENT RESPONSE UPIU。

可能导致任务中止的任务管理功能有:Abort Task、Abort Task Set、Clear Task Set 和 Logical Unit Reset

10.7.7.1 Basic Header基本头

TASK MANAGEMENT RESPONSE UPIU 的前 12 字节包含 10.6.2 节 "基本头格式" 中描述的基本头。具体细节如下:

a) Transaction Type(事务类型)

类型码值为 xx10 0100b 表示 TASK MANAGEMENT RESPONSE UPIU。

b) Initiator ID (IID)(发起设备 ID)

发起设备 ID 字段(字节 4 的位 [7:4])指示创建任务请求的发起设备的身份。详见 10.6.2 节基本头格式中的发起设备 ID 描述。

c) Response(响应)

响应字段包含 UFS 响应,指示任务管理请求的成功或失败。详见 10.6.2 节。

d) Task Management Output Parameters(任务管理输出参数)

e) Task Management Service Response(任务管理服务响应)

10.7.8 QUERY REQUEST UPIU查询请求 UPIU

QUERY REQUEST UPIU 用于在发起设备和目标设备之间传输数据,这些数据传输超出了标准用户数据读写命令的范围

QUERY REQUEST UPIU 可用于从目标设备读取和写入参数数据。它可用于:

  • 获取配置或枚举信息to get information for configuration or enumeration
  • 设置或清除总线或整体设备条件
  • 设置或重置全局标志值、参数或属性to set or reset global flag values, parameters or attributes
  • 设置或获取电源或总线或网络信息
  • 获取或设置描述符to get or set descriptors
  • 获取序列号或 GUID(全局唯一标识符)to get serial numbers or GUID’s (globally unique identifiers),
  • 等等

目标设备将发送 QUERY RESPONSE UPIU 来响应 QUERY REQUEST UPIU。发送 QUERY REQUEST UPIU 后,在收到待处理请求的 QUERY RESPONSE UPIU 之前,发起设备不应发送新的 QUERY REQUEST UPIU。如果目标设备在仍在处理前一个 QUERY REQUEST UPIU 时收到了 QUERY REQUEST UPIU,则应忽略最新的请求。

QUERY REQUEST UPIU 遵循通用 UPIU 格式,带有一个为查询功能定义的字段。事务特定字段是为每种操作类型专门定义的。

数据段Data Segment Area区域是可选的,取决于查询功能值。如果查询包中没有数据段,则数据段长度字段将为零。

10.7.8.1 Overview概述

查询用于在主机和设备之间读写数据结构。这些数据超出了普通设备读写的范围;这些数据将被视为系统数据、配置数据、生产信息、描述符、特殊参数和标志等。

对于 UFS,查询功能通常用于读写描述符(Descriptors)、属性(Attributes)和标志(Flags)。还有一系列厂商特定操作,可用于在主机和设备之间传输厂商特定数据。

所有这些项都驻留在设备内存中,并由设备用于控制或定义其操作。

以下是使用查询请求功能传输的最常见数据结构的简要概述。有关这些数据结构的更多详细信息,请参见相关章节:

a) Descriptors(描述符)

描述符是描述设备某些信息的参数块或参数页。例如,有设备描述符、配置描述符、单元描述符等。

b) Attributes(属性)

属性是表示特定范围数值的单个参数,可以设置或读取。该值可以是字节、字或浮点数。例如,波特率或块大小就是一个属性。属性大小可以从 1 位到 32 位。相同类型的属性可以组织成数组,每个元素由索引标识。

c) Flags(标志)

标志是表示 TRUE 或 FALSE、'0' 或 '1'、ON 或 OFF 类型值的单个布尔值。标志可以被清除或重置、设置、切换或读取。标志用于启用或禁用设备内的某些功能、模式或状态。


在后面的章节中有专门章节写描述符、属性、标志,这边简单介绍一下述符、属性、标志三者的区别:

类型大小含义例子
描述符(Descriptor)一块 / 一页参数(多字节)描述设备的整体信息设备描述符(厂商、型号、序列号、版本)、几何描述符(总容量、块大小、LU 数量)
属性(Attribute)1 位~32 位单个可读写的数值参数bRefClkFreq(参考时钟频率)、bActiveICLevel(电流等级)、bCurrentPowerMode(当前电源模式)
标志(Flag)1 位(布尔值)开关状态fDeviceInit(设备初始化完成)、fPowerOn(上电标志)、fBackgroundOpsEn(后台操作使能)

QUERY REQUEST UPIU能做的操作:

操作描述符属性标志
读(Read/Get)✓ 读描述符内容✓ 读属性值✓ 读标志状态
写(Write/Set)✓ 写描述符(部分可写)✓ 写属性值✓ 设置标志(置 1)
清除(Clear)✓ 清除标志(置 0)
切换(Toggle)✓ 切换标志(取反)

10.7.8.2 Query Function查询功能

查询功能字段保存所请求的查询类型,描述要执行的查询功能。常见的查询功能列于表 10.29。目前,定义了两种通用查询功能:读请求(Read Request)和写请求(Write Request)。附加的事务特定字段将用于指定事务所需的更多信息。这些字段可以描述要执行的具体操作、要访问的目标数据或信息、要传输的数据量以及附加参数和数据。


值范围用途特点
00h保留
01h标准读请求UFS 标准定义的读操作
02h-3Fh保留未来标准扩展用
40h-7Fh厂商特定读功能各厂商自定义的读操作
80h保留
81h标准写请求UFS 标准定义的写操作
82h-BFh保留未来标准扩展用
C0h-FFh厂商特定写功能各厂商自定义的写操作

a) Standard Read Request(标准读请求)

标准读请求功能类型用于从目标设备读取所请求的信息。目标设备将在 QUERY RESPONSE UPIU 包中将所请求的信息返回给发起设备。

b) Standard Write Request(标准写请求)

标准写请求功能类型用于向目标设备写入信息和数据。要写入目标设备的信息和数据将包含在 QUERY REQUEST UPIU 包的数据段字段中。

10.7.8.3 Transaction Specific Fields事务特定字段

事务特定字段是为每种操作类型专门定义的。对于标准读请求和标准写请求,操作特定字段的定义如表 10.30 所示。

a) OPCODE(操作码)

操作码指示要执行的操作。可能的操作码值列于表 10.31。

b) OSF(操作码特定字段)

OSF 字段是操作码特定字段(Opcode Specific Field)。OSF 字段将为每个特定的 OPCODE 定义。

10.7.8.4 Read Descriptor Opcode读描述符 操作码

READ DESCRIPTOR OPCODE 用于从目标设备检索 UFS 描述符。描述符可以是固定长度或可变长度。最多有 256 种可能的描述符类型。OSF 字段用于选择特定描述符,并最多读取 256 个描述符字节。OSF 字段的定义如表 10.32 所示。

a) DESCRIPTOR IDN(描述符标识)

描述符 IDN 字段包含一个值,指示要检索的特定描述符类型。例如,它可以指示设备描述符、单元描述符或字符串描述符。有些描述符类型是唯一的,可以完全由描述符类型值标识。其他描述符可以以多种形式存在,例如字符串描述符,它们通过子字段进一步标识。

b) INDEX(索引)

索引值用于进一步标识特定描述符。例如,可能定义了多个字符串描述符。在有多个描述符的情况下,INDEX 字段用于选择特定的一个。多个描述符从 0 到 255 进行索引。特定描述符的实际索引值将通过其他方式提供,通常包含在另一个相关描述符的字段中。

c) SELECTOR(选择器)

可能需要 SELECTOR 字段来进一步标识特定描述符。

d) LENGTH(长度)

LENGTH 字段用于指示要读取的描述符的字节数。这些字节将在 QUERY RESPONSE UPIU 包中返回。这是请求读取的长度,可能小于、等于或大于描述符的实际大小。

  • 如果请求的长度小于或等于实际描述符大小,则返回指定的字节数。
  • 如果 LENGTH 大于描述符大小,则响应将在 LENGTH 字段中提供确切的描述符大小
e) Data Segment(数据段)

数据段区域为空。

10.7.8.5 Write Descriptor Opcode写描述符 操作码

WRITE DESCRIPTOR OPCODE 用于写入 UFS 描述符,从主机发送到设备。描述符可以是固定长度或可变长度。最多有 256 种可能的描述符类型。OSF 字段用于选择特定描述符。OSF 字段的定义如表 10.33 所示。

a) DESCRIPTOR IDN(描述符标识)

描述符 IDN 字段包含一个值,标识要写入的特定描述符类型。例如,它可以指示设备描述符、单元描述符或字符串描述符。有些描述符类型是唯一的,可以完全由描述符 IDN 值标识。其他描述符可以以多种形式存在,例如字符串描述符,它们通过子字段进一步标识。

b) INDEX(索引)

索引值用于进一步标识特定描述符。例如,可能定义了多个字符串描述符。在有多个描述符的情况下,INDEX 字段用于选择特定的一个。多个描述符从 0 到 255 进行索引。特定描述符的实际索引值将通过其他方式提供,通常包含在某个其他相关描述符的字段中。

c) SELECTOR(选择器)

可能需要 SELECTOR 字段来进一步标识特定描述符。

d) LENGTH(长度)

LENGTH 字段用于指示要写入的描述符的字节数只能写入整个描述符:不支持部分写入或更新。这些字节将包含在 QUERY REQUEST UPIU 包的数据段区域中。数据段长度字段也应设置为相同的值。

如果 LENGTH 不等于描述符大小,则操作将失败:描述符不会被更新,并且 QUERY RESPONSE UPIU 的查询响应字段将设置为 FAILURE(失败)

e) Data Segment(数据段)

数据段区域包含要写入的数据

10.7.8.6 Read Attribute Opcode读属性 操作码

READ ATTRIBUTE OPCODE 用于从目标设备检索 UFS 属性。属性大小可以从 1 位到 32 位。最多有 256 种可能的属性,由标识号 IDN 标识,范围从 0 到 255。此操作码的 OSF 字段列于表 10.34。

a) ATTRIBUTE IDN(属性标识)

ATTRIBUTE IDN 包含一个值,标识要从目标设备检索的特定属性

b) INDEX(索引)

对于以数组形式组织的属性,索引值用于标识特定元素。例如,LUN 用作索引,以选择具有逻辑单元特定值的属性的特定元素。

每个属性的索引范围是定义的,可以从 0 到 255。对于由单个元素组成的属性,索引应设置为零。

c) SELECTOR(选择器)

可能需要 SELECTOR 字段来进一步标识属性的特定元素。对于不需要它的属性,SELECTOR 字段应设置为零。

d) Data Segment(数据段)

数据段区域为空。

10.7.8.7 Write Attribute Opcode写属性 操作码

WRITE ATTRIBUTE OPCODE 用于向目标设备写入 UFS 属性。属性大小可以从 1 位到 32 位。最多有 256 种可能的属性,由标识号 IDN 标识,范围从 0 到 255。此操作码的 OSF 字段列于表 10.35。

a) ATTRIBUTE IDN(属性标识)

ATTRIBUTE IDN 包含一个值,标识要写入目标设备的特定属性

b) INDEX(索引)

对于以数组形式组织的属性,索引值用于标识特定元素。例如,LUN 用作索引,以选择具有逻辑单元特定值的属性的特定元素。

每个属性的索引范围是定义的,可以从 0 到 255。对于由单个元素组成的属性,索引应设置为零。

c) SELECTOR(选择器)

可能需要 SELECTOR 字段来进一步标识属性的特定元素。对于不需要它的属性,SELECTOR 字段应设置为零。

d) VALUE [31:0](值)

32 位 VALUE 字段包含属性的数据值。VALUE 是右对齐、大端(big Endian)值。未使用的高位应设置为零。

e) Data Segment(数据段)

数据段区域为空。

10.7.8.8 Read Flag Opcode读标志 操作码

READ FLAG OPCODE 用于从目标设备检索 UFS 标志值。标志是固定大小的单字节值,表示布尔值。最多可以定义 256 种可能的标志值。标志由其 FLAG IDN 标识,这是一个范围从 0 到 255 的标识号。此操作码的 OSF 字段列于表 10.36。

a) FLAG IDN(标志标识)

FLAG IDN 字段包含一个值,标识要从目标设备检索的特定标志

b) INDEX(索引)

可能需要索引字段来标识标志的特定元素。

c) SELECTOR(选择器)

可能需要选择器字段来进一步标识标志的特定元素。本版本标准中不使用选择器字段,其值应为零。

d) Operation(操作)

所寻址标志的布尔值在 QUERY RESPONSE UPIU 中返回。

e) Data Segment(数据段)

数据段区域为空。

10.7.8.9 Set Flag设置标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含一个值,标识要在目标设备中设置的特定标志。

b) INDEX(索引)

可能需要索引字段来标识标志的特定元素。

c) SELECTOR(选择器)

可能需要选择器字段来进一步标识标志的特定元素。本版本标准中不使用选择器字段,其值应为零。

d) Operation(操作)

所寻址标志的布尔值被设置为 TRUE 或 1

e) Data Segment(数据段)

数据段区域为空。

10.7.8.10 Clear Flag清除标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含一个值,标识要在目标设备中清除的特定标志。

b) INDEX(索引)

可能需要索引字段来标识标志的特定元素。

c) SELECTOR(选择器)

可能需要选择器字段来进一步标识标志的特定元素。本版本标准中不使用选择器字段,其值应为零。

d) Operation(操作)

所寻址标志的布尔值被清除为 FALSE 或 0

e) Data Segment(数据段)

数据段区域为空。

10.7.8.11 Toggle Flag翻转标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含一个值,标识要在目标设备中切换的特定标志。

b) INDEX(索引)

可能需要索引字段来标识标志的特定元素。

c) SELECTOR(选择器)

可能需要选择器字段来进一步标识标志的特定元素。本版本标准中不使用选择器字段,其值应为零。

d) Operation(操作)

所寻址标志的布尔值被设置为当前值的取反(negated current value)

e) Data Segment(数据段)

数据段区域为空。

10.7.8.12 NOP空操作

表 10.40 定义了 QUERY REQUEST UPIU 的 NOP OPCODE。

a) Data Segment(数据段)

数据段区域为空。


NOP(空操作)的作用:

NOP = No Operation,空操作。主机发一个 NOP 查询请求,设备什么都不做,直接回一个 QUERY RESPONSE。

用途:

  1. 链路测试:测试主机和设备之间的 UPIU 通信是否正常
  2. 心跳检测:定期发 NOP,确认设备还活着、还能响应
  3. 性能基准:测量 UPIU 往返延迟(发 NOP 到收响应的时间)
  4. 调试:在不影响设备状态的情况下测试查询机制

NOP 请求的特点:

  • OPCODE = 00h
  • 所有事务特定字段都是保留(填 0)
  • 数据段为空
  • 设备收到后不需要做任何操作,直接回响应
  • 不会改变设备的任何状态


总结:

所有查询请求的事务特定字段(字节 12-27)结构类似:

  • 字节 12: OPCODE(操作码,决定做什么)

  • 字节 13: IDN(标识号,决定操作哪个对象)

  • 字节 14: INDEX(索引,选第几个实例)

  • 字节 15: SELECTOR(选择器,进一步细分)

  • 字节 16-19: 保留 / 其他

  • 字节 20-23: LENGTH(描述符用)或 VALUE(属性用)

  • 字节 24-27: 保留

字段作用类比
IDN(Identification Number)哪种描述符 / 属性 / 标志选哪本书
INDEX第几个实例(多实例时用)选第几册 / 第几版
SELECTOR进一步细分(某些类型需要)选书中的哪个章节

简单理解:IDN 选类型,INDEX 选实例,SELECTOR 选细节。

注意点描述符属性标志
写的时候必须写整个吗是,必须写整个描述符否,直接写新值否,操作码隐含值
写的值放哪请求的数据段请求的 VALUE 字段(字节 20-23)无(操作码本身决定)
读的值放哪响应的数据段响应的数据段响应的事务特定字段(不是数据段!)
LENGTH 字段有(字节 18-19)
VALUE 字段有(字节 20-23)
SELECTOR可能需要可能需要必须 = 0(本版本不使用)
INDEX 范围0~2550~2550~255
IDN 范围0~2550~2550~255
查询串行化一次只能一个查询,等响应回来才能发下一个同左同左

描述符是 "结构体"(大块数据,读写用数据段,写必须整个写),属性是 "变量"(单个数值,写用 VALUE 字段),标志是 "开关"(只有 0/1,写用操作码决定,读的值在事务特定字段里)。


10.7.9 QUERY RESPONSE UPIU查询响应 UPIU

QUERY RESPONSE UPIU 用于在目标设备和发起设备之间传输数据,以响应 QUERY REQUEST UPIU。

读描述符 / 属性 / 标志查询请求的情况下,QUERY RESPONSE UPIU 用于向请求的发起设备返回参数数据;在写描述符 / 属性查询请求或设置 / 清除 / 切换标志查询请求的情况下,用于提供响应。

QUERY RESPONSE UPIU 遵循通用 UPIU 格式,带有一个为查询功能定义的字段。

事务特定字段是为每种操作类型专门定义的。

数据段区域是可选的,取决于查询功能值。如果包中没有数据段,则数据段长度字段将设置为零。

10.7.9.1 Overview概述

查询响应功能将响应发起设备在 QUERY REQUEST UPIU 中发送的查询功能。查询响应可能返回数据,也可能不返回数据,具体取决于查询功能。如果需要返回数据,数据将在 UPIU 的数据段某个事务特定字段中返回。

10.7.9.2 Query Function查询功能

查询功能字段将包含从相应的 QUERY REQUEST UPIU 中收到的原始查询功能值

10.7.9.3 Query Response查询响应

查询响应字段指示为响应 QUERY REQUEST UPIU 而采取的操作的完成代码。可能的值列于表 10.42。

:在操作不成功的情况下,目标设备可以将查询响应字段设置为 FFh,或者可选地使用其他值之一提供有关失败的更详细信息。

10.7.9.4 Device Information设备信息

参见 RESPONSE UPIU 中的设备信息字段定义,见 10.7.2.1 节 "基本头(Basic Header)"。

10.7.9.5 Transaction Specific Fields事务特定字段

标准读 / 写请求的事务特定字段(Transaction Specific Fields for Standard Read/Write Request)

a) OPCODE(操作码)

操作码指示要执行的操作。可能的操作码值列于表 10.31(前面已翻译:01h = 读描述符、02h = 写描述符、03h = 读属性、04h = 写属性、05h = 读标志、06h = 设置标志、07h = 清除标志、08h = 切换标志、00h=NOP、F0h-FFh = 厂商特定)。

OPCODE 与查询功能的一致性规则:

  1. 如果 QUERY REQUEST UPIU 中 Query Function = 标准读请求(01h),但 OPCODE 设置为写类操作(WRITE DESCRIPTOR、WRITE ATTRIBUTE、SET FLAG、CLEAR FLAG、TOGGLE FLAG),则查询请求应失败,Query Response 字段应设置为 "Invalid OPCODE"(无效操作码)"General failure"(一般失败)
  2. 如果 QUERY REQUEST UPIU 中 Query Function = 标准写请求(81h),但 OPCODE 设置为读类操作(READ DESCRIPTOR、READ ATTRIBUTE、READ FLAG),则查询请求应失败,Query Response 字段应设置为 "Invalid OPCODE"(无效操作码)"General failure"(一般失败)
b) OSF(操作码特定字段)

OSF 字段是操作码特定字段(Opcode Specific Field)。OSF 字段将为每个特定的 OPCODE 定义。

10.7.9.6 Read Descriptor Opcode读描述符 操作码

READ DESCRIPTOR OPCODE 用于从目标设备检索 UFS 描述符。描述符可以是固定长度或可变长度。最多有 256 种可能的描述符类型。OSF 字段用于选择特定描述符并读取一定数量的描述符字节。OSF 字段的定义如表 10.44 所示。

READ DESCRIPTOR OPCODE 在响应中包含 OPCODE 字段相同值 的 QUERY REQUEST UPIU 时返回。

a) DESCRIPTOR IDN(描述符标识)

DESCRIPTOR IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 DESCRIPTOR IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) LENGTH(长度)

LENGTH 字段用于指示响应对应 QUERY REQUEST UPIU 而返回的字节数。如果数据项的大小小于对应 QUERY REQUEST UPIU 中请求的大小,则此值可以小于请求的大小

e) Data Segment(数据段)

数据段区域包含描述符数据

10.7.9.7 Write Descriptor Opcode写描述符 操作码

WRITE DESCRIPTOR OPCODE 用于响应写描述符查询请求。描述符可以是固定长度或可变长度。最多有 256 种可能的描述符类型。OSF 字段用于选择特定描述符。OSF 字段的定义如表 10.45 所示。

a) DESCRIPTOR IDN(描述符标识)

描述符 IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 DESCRIPTOR IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) LENGTH(长度)

LENGTH 字段用于指示已写入的描述符字节数只能写入整个描述符;不支持部分写入或更新。

e) Data Segment(数据段)

数据段区域为空

10.7.9.8 Read Attribute Opcode读属性 操作码

READ ATTRIBUTE OPCODE 用于从目标设备检索 UFS 属性。属性大小可以从 1 位到 32 位。最多有 256 种可能的属性,由标识号 IDN 标识,范围从 0 到 255。

对 READ ATTRIBUTE 请求的响应将在 QUERY RESPONSE UPIU 中返回。整个操作的成功或失败代码将包含在 RESPONSE 字段中。

属性数据将在事务特定字段中返回。 事务特定字段的格式如表 10.46 所示。这些字段的前两个 32 位字将回显 QUERY REQUEST UPIU 事务特定字段的前两个 32 位字第三个字将包含属性数据。

a) ATTRIBUTE IDN(属性标识)

ATTRIBUTE IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 ATTRIBUTE IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) VALUE [31:0](值)

32 位 VALUE 字段包含属性的数据值。VALUE 是右对齐、大端(big Endian)值。未使用的高位应设置为零。

e) Data Segment(数据段)

数据段区域为空

10.7.9.9 Write Attribute Opcode写属性 操作码

WRITE ATTRIBUTE OPCODE 用于响应写属性查询请求。属性大小可以从 1 位到 32 位。最多有 256 种可能的属性,由标识号 IDN 标识,范围从 0 到 255。此操作码的 OSF 字段列于表 10.47。

a) ATTRIBUTE IDN(属性标识)

ATTRIBUTE IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 ATTRIBUTE IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) VALUE [31:0](值)

此字段包含写属性查询请求中提供的相同数据

e) Data Segment(数据段)

数据段区域为空

10.7.9.10 Read Flag Opcode读标志 操作码

READ FLAG OPCODE 用于从目标设备检索 UFS 标志值。标志是固定大小的单字节值,表示布尔值。最多可以定义 256 种可能的标志值。标志由其 FLAG IDN 标识,这是一个范围从 0 到 255 的标识号。标志数据('1' 或 '0')在 QUERY RESPONSE UPIU 包的事务特定字段区域中返回。

对 READ ATTRIBUTE 请求的响应将在 QUERY RESPONSE UPIU 中返回。整个操作的成功或失败代码将包含在 RESPONSE 字段中。

标志数据将在事务特定字段中返回。 事务特定字段的格式如表 10.48 所示。这些字段的前两个 32 位字将回显 QUERY REQUEST UPIU 事务特定字段的前两个 32 位字第三个字将包含标志数据,即 '0' 或 '1' 值。

表 10.48 — 读标志响应数据格式(Read Flag Response Data Format)

READ FLAG OPCODE 的事务特定字段(Transaction Specific Fields for READ FLAG OPCODE)

a) FLAG IDN(标志标识)

FLAG IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 FLAG IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) FLAG VALUE(标志值)

FLAG VALUE 字段包含标志数据:00h 或 01h

e) Data Segment(数据段)

数据段区域为空

10.7.9.11 Set Flag设置标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 FLAG IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) FLAG VALUE(标志值)

FLAG VALUE 字段包含标志数据:00h 或 01h

此字段仅在查询响应字段指示操作已成功完成("Success")时有效。

e) Data Segment(数据段)

数据段区域为空

10.7.9.12 Clear Flag清除标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 FLAG IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) FLAG VALUE(标志值)

FLAG VALUE 字段包含标志数据:00h 或 01h

此字段仅在查询响应字段指示操作已成功完成("Success")时有效。

e) Data Segment(数据段)

数据段区域为空

10.7.9.13 Toggle Flag切换标志

a) FLAG IDN(标志标识)

FLAG IDN 字段包含与对应的 QUERY REQUEST UPIU 发送的相同 FLAG IDN 值

b) INDEX(索引)

返回的索引字段值与对应 QUERY REQUEST UPIU 的 INDEX 值相同

c) SELECTOR(选择器)

返回的 SELECTOR 字段与对应 QUERY REQUEST UPIU 的 SELECTOR 值相同

d) FLAG VALUE(标志值)

FLAG VALUE 字段包含标志数据:00h 或 01h

此字段仅在查询响应字段指示操作已成功完成("Success")时有效。

e) Data Segment(数据段)

数据段区域为空

10.7.9.14 NOP

表 10.52 定义了 QUERY RESPONSE UPIU 的 NOP OPCODE。

a) Data Segment(数据段)

数据段区域为空


总结:QUERY RESPONSE UPIU 是设备(目标设备)发给主机(发起设备)的响应包,用于回答主机的 QUERY REQUEST UPIU(查询请求)。

核心用途: 响应设备配置 / 状态查询 —— 读描述符、属性、标志时返回数据,写操作时返回成功 / 失败状态。

读取类型数据大小返回值位置原因
描述符几十~几百字节数据段太大,事务特定字段放不下
属性1 位~32 位VALUE 字段(字节 20-23)最大 32 位,正好放一个字段
标志1 字节(布尔)FLAG VALUE 字段(字节 23 LSB)只有 0/1,一字节足够

和 RESPONSE UPIU 的区别:

对比项QUERY RESPONSE UPIURESPONSE UPIU
用途响应查询请求(配置 / 状态读写)响应普通 SCSI 命令(读写命令执行结果)
Transaction Typexx11 0110bxx10 0001b
返回值描述符 / 属性 / 标志数据感知数据(Sense Data)
对应请求QUERY REQUEST UPIUCOMMAND UPIU
Task Tag匹配查询请求匹配命令

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值