UFS协议中数据输出命令的例子有:MODE SELECT (10), WRITE (6), WRITE (10), WRITE (16), FORMAT UNIT, SECURITY PROTOCOL out等。与RTT (READY TO TRANSFER UPIU) 相关的数据输出传输规则定义如下:
数据发送规则1
主机从设备每接收到一个RTT只发送一个DATA OUT UPIU (如图10.7所示)。
如果Data OUT UPIU中的Data Buffer Offset字段值或Data Transfer Count字段值与RTT请求中的相应参数不匹配,设备将发送带有UTP Data OUT Mismatch Error标志(Flags.D),Status = CHECK CONDITION 和SENSE KEY = ABORTED命令的RESPONSE UPIU来终止该命令。图10.8为数据传输计数不匹配的情况。
数据发送规则2
设备未完成的RTT不得超过主机规定数值。
bDeviceRTTCap read-only设备描述符参数定义了设备可支持的未完成rtt的最大数量。bMaxNumOfRTT读写属性限制了设备生成的未完成rtt的数量(bMaxNumOfRTT出厂设置为2),主机可以根据性能需要对其进行更改。bMaxNumOfRTT值不能设置为大于bDeviceRTTCap值,且只能在所有逻辑单元的命令队列为空时设置。
如果主机试图写入高于bDeviceRTTCap指示的值时,bMaxNumOfRTT值无法被修改且QUERY RESPONSE UPIU将QUERY RESPONSE字段设置为“Invalid value”。
如果主机试图写bMaxNumOfRTT时,至少有一个逻辑单元命令队列不为空,则操作失败,Query Response UPIU中的Query Response字段设置为FFh(“General failure”)。
图10.9为bMaxNumOfRTT = 2情况下与写命令处理相关的示例。Target设备发送RTT UPIU1和RTT UPIU2, Initiator设备开始提供与第一个请求相关的数据。有两个未完成的RTT (RTT UPIU1和RTT UPIU2),因此目标设备不能发送额外的RTT UPIU。目标设备只有在接收到data OUT UPIU1后才会发送第三次数据请求(RTT UPIU3)。
数据发送规则3
在所有逻辑单元中,DATA OUT UPIU应以与RTT以相同的顺序发送:RTT(N)的数据应在传输RTT(N+1)的数据之前传输。
如图10.9,如果主机先从设备接收到RTT UPIU1,然后再从设备接收到RTT UPIU2,那么它应该先发送第一个请求(Data1)的相关数据,然后再发送第二个请求(Data2)的相关数据。基于此,设备可以根据逻辑单元优先级、命令优先级、内部优化等确定RTT的发送顺序。