UFS规范解读8: UFS Protocol Information Unit

1. 前言

本专题我们开始学习UFS规范的相关内容。本节主要记录UPIU的结构。本文主要以读取设备的型号productName为例说明UPIU的格式。

注:
为方便阅读,正文标题采用分级结构标识,每一级用一个"-“表示,如:两级为”|- -", 三级为”|- - -“

2. 通用的UPIU格式

在这里插入图片描述
所有的UPIU大小必须是32bit对齐,也就是4字节对齐。
在这里插入图片描述
UPIU(UFS Protocol Information Unit)是UFS的UTP层传输数据的基本的帧格式,主要由两部分组成:UPIU HEADER和跟具体UPIU相关的域,后者又可细分为UPIU Transaction Specific fields和data segment部分。其中,UPIU会根据Transaction Type区分为不同的UPIU,其每种UPIU都有不同的Transaction Specific fields。

|- -Basic Header Format

在这里插入图片描述

|- - -Transaction Type

表示UPIU的类型,主要包括如下:
在这里插入图片描述
对于读取设备型号则为QUERY REQUEST

|- - -Flags

根据不同类型的UPIU,flags的值也不同,主要有如下两种UPIU有flags:
在这里插入图片描述
其中Task Attribute定义如下:
在这里插入图片描述

|- - -LUN

表示这个request要发送给哪个lun

|- - -Task Tag

slot的索引号,每个slot对应一个UTRD,也对应door bell寄存器的一个bit,当slot中的数据准备好后就可以置位doorbell的相应bit

|- - -Initiator ID

发起请求的设备ID, 如果只有一个设备则为0

|- - -Command Set Type

有如下几种类型:
在这里插入图片描述

|- - -Query Function

表示是什么功能,如:UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST

|- - -Response

如果一个请求需要响应,则指明了请求的状态
在这里插入图片描述

|- - -Status

如果发送的是一个SCSI命令则此返回一个SCSI状态,它定义在SAM中。其它情况下是一个操作码特定值。

|- - -Device Information

|- - -Data Segment Length

UPIU中有效字节数据长度

|- -正文部分

正文部分针对每种特定的UPIU都有自己特定的数据部分。
对于requet upiu的特定数据部分按照flags, descriptor, attribution,又区分成不同的特定数据部分。

3. UPIU举例

以获取设备型号举例,即QUERY REQUEST和QUERY RESPONSE为例,说明UPIU的组成

3.1 QUERY REQUEST UPIU

在这里插入图片描述

|- - -QUERY REQUEST UPIU.HEADER

如下为查询设备型号的UPIU header,Transaction Type为QUERY REQUEST
在这里插入图片描述
其中Query Function的值为01H
在这里插入图片描述

|- - -QUERY REQUEST UPIU.Transaction specific fields

根据前述UPIU header中QUERY FUNCTION不同,UPIU正文Transaction specific fields部分会有所不同,对于获取设备型号则QUERY FUNCTION为STANDARD READ REQUEST,Transaction specific fields如下:
在这里插入图片描述
根据OPCODE的不同,STANDARD READ REQUEST的UPIU正文Transaction specific fields部分又有所不同:
在这里插入图片描述
对于读取产品型号则OPCODE为READ DESCRIPTION,它的正文Transaction specific fields部分如下:
OPCODE为STANDARD READ  REQUEST的正文
其中DESCRIPTOR IDN指示特定类型的description, 对于读取产品型号就是DEVICE DESCRIPTION,INDEX指定了要查询DEVICE DESCRIPTION中的哪一个,SELECTOR可用来进一步确定一个descriptor
在这里插入图片描述

In a QUERY REQUEST UPIU, the Device Descriptor is addressed setting: DESCRIPTOR IDN = 00h, INDEX = 00h and SELECTOR = 00h.

|- - -QUERY REQUEST UPIU.data segment

为空

3.2 QUERY RESPONSE UPIU

针对前述QUERY REQUEST UPIU, QUERY FUNCTION为STANDARD READ REQUEST,OPCODE为READ DESCRIPTION,则返回的DEVICE DESCRIPTION将存放在QUERY RESPONSE UPIU的正文的data segment。QUERY RESPONSE UPIU如下:
在这里插入图片描述

|- - -QUERY RESPONSE UPIU.HEADER

在这里插入图片描述
Query Function与QUERY REQUEST UPIU的一致
在这里插入图片描述
Query Response指示了QUERY REQUEST UPIU动作的状态

|- - -QUERY RESPONSE UPIU.Transaction specific fields

对于STANDARD READ REQUEST和STANDARD WRITE REQUEST, Transaction specific fields定义如下:
在这里插入图片描述
在这里插入图片描述
如果OPCODE为READ DESCRIPTOR则Transaction specific fields如下:
在这里插入图片描述
DESCRIPTOR IDN,INDEX分别与发送的QUERY REQUEST UPIU的相同

|- - -QUERY RESPONSE UPIU.data segment

以查找产品型号iProductName为例,发送QUERY REQUEST UPIU.Read Descriptor后,DEVICE DESCRIPTION保存在READ DESCRIPTION RESPONSE的data segment,DEVICE DESCRIPTION定义如下:
在这里插入图片描述
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在这里插入图片描述
根据前述QUERY REQUEST UPIU.Transaction Specific fields的INDEX指定了DEVICE DESCRIPTION中的offset,此处INDEX=0X15,通过查询QUERY RESPONSE UPIU.data segment就可以知道iproductName的值。
至此,我们通过发送QUERY REQUEST UPIU.Read Descriptor,并对接收的QUERY RESPONSE UPIU进行解析,从QUERY REQUEST UPIU.data segment获取到device description的iproductName的值。

此iproductName值将用于查询STRING DESCRIPTION,因此需要按照前述QUERY REQUEST UPIU.Read Descriptor获取device descriptor的过程,再重新发送QUERY REQUEST UPIU.Read Descriptor来获取Product Name String Descriptor,以iproductName为offset查找Product Name String Descriptor就是我们需要的Product Name String,即产品名称。如下:
在这里插入图片描述

In a QUERY REQUEST UPIU, the Product Name String Descriptor is addressed setting: DESCRIPTOR IDN = 05h, INDEX = iProductName (Device Descriptor parameter), and SELECTOR = 00h.

参考文档

《UFS_V2.1_JESD220C.pdf》

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值