UFS协议4.0介绍四——UTP layer
UFS Transport Protocol (UTP) Layer
UTP采用了SCSI架构模型[SAM], 这是一种客户端-服务端模型,主机发送命令和请求服务到UFS。主机和UFS之间的通信是一系列消息,消息的格式是UPIU。Task是一个命令或一系列用来执行请求服务的动作。一个LU包含一个task queue,支持一个或多个task。
Command结构由Command Descriptor Blocks CDB,组成。A command transaction consists of a Command, an optional Data Phase, and a Status Phase
A basic header segment has a fixed length of 12 bytes. The minimum UPIU size is 32 bytes which includes a basic header segment and transaction specific fields.
The maximum UPIU size is defined as being 65600 bytes

| UPIU Data Structure |
Description |
|
| NOP Out | NOP Out可以当做是主机发给设备的ping,用来检测连接路径 | |
| NOP In | 设备发给主机,用来响应NOP Out | |
| Command |
在发起设备中形成并被发送到目标设备的LU,一个Command upiu包含命令描述块作为命令和 命令参数,这代表命令阶段。 |
|
| Response | 目标设备中形成,发送给发起设备。包含一个命令特定的操作状态和其他响应信息。代表命令的状态阶段。 | |
| Data out | 发起设备中形成,被用来发送数据到目标设备,代表命令的数据输出阶段。 | |
| Data In | 目标设备中形成,发送给发起设备,代表命令的数据输入阶段。 | |
| Task Management Request | 这个类型的传输携带了SCSI结构模型任务管理功能请求,主机中形成,发送给目标设备,标准功能由SAM定义。 | |
|
任务管理请求的响应。 | |
|
当目标设备准备好接收下一个DATA OUT UPIU以及有足够空间接收数据时,会先发一个Ready to Transfer给发起设备。目标设备可以发送多个Ready to transfer,如果有足够空间接收多个DATA OUT UPIU。 |
Query Request: 发起设备中形成,用来请求目标设备的descriptor,flag, attribute。
UFS devices are able to process only either a NOP OUT or a QUERY REQUEST at any point of time.
UPIU概述
UPIU的总大小会根据传输类型变化,但是所有的UPIU的大小都是32bits的整数倍,意味着是4字节对齐。upiu的大小可以是固定或者变化依赖传输类型字段和扩展标志。所有的UPIU都有一个header.


HD和DD对UFS来说目前都是0.
Total Extra Header Segment Length:是否有多余的header,这个字段的值 * 32bytes就是多余header的长度。因为最大支持的额外header长度是96字节,所以这个字段取值是0,1,2,3.


Command UPIU
Command UPIU包含基础的UPIU header加上额外的必要信息来描述一个命令。发起设备会产生这个UPIU并把它送到目标设备,以请求目标设备执行一个SCSI命令服务。

Flags
Flags.R: 字段如果是1,表示这个命令需要从目标设备传输数据到发起设备,也就是读。如果.R被设为1,那么.W应该是0.如果.R和.W都被设为0,那么代表没有数据传输。Expected Data Transfer Length字段应该是0.
Flags.ATTR: 这个字段包含任务属性值,如图10.7
Flags.CP: 这个字段表示命令特权。这个1bit字段指示一个用Simple任务属性的命令相对于任务集合中其他用Simple任务属性的命令的相对调度重要性。
如果命令具有Simple以外的属性,那么此字段没有意义。
命令管理者可能会使用命令特权来决定命令集中带有Simple任务属性命令的执行顺序。
Data Segment length
这个字段应该为0,因为命令UPIU中没有数据段。
Expected Data segment length
这个字段表示要传输的数据长度,由要请求完成的SCSI命令CDB指示。只有Flags.w或者Flags.R字段被设置1了,这个字段才有效。单位是byte。
如果前面的Command UPIU携带了SCSI write或者read cmd,这个字段将等于CDB中logic block size和transfer length的乘积。
CDB
这个字段包含了Command descriptor block,是一个16字节的数组。
IID
LSB分布的Initiator ID
RESPONSE UPIU
response相比cmd,要多了额外的response,status和device information来指示先前执行的命令结果。在发送response UPIU之前,target device应该停止为请求DATA-Out的command发送ready to transfer UPIU。

response字段

status字段
如果命令的类型是SCSI命令集,那么status字段会包含标准的SCSI status数值。


浙公网安备 33010602011771号