U盘BOT存储UFI协议READ_FORMAT_CAPACITIES命令说明及实例分析
2022-04-28
2859
0
UFI命令READ_FORMAT_CAPACITIES(读取格式化容量)命令允许主机请求在当前安装的介质上可以格式化的可能容量列表。如果当前未安装介质,UFI设备应返回设备可格式化的最大容量。
define READ_FORMAT_CAPACITIES 0x23
READ_FORMAT_CAPACITIES命令格式
Allocation Length指定主机可以接收的格式数据的最大字节数。如果小于容量数据的大小,UFI设备只返回请求的字节数。但是,UFI设备不得调整格式数据中的容量列表长度以反映截断。
READ_FORMAT_CAPACITIES返回数据格式
返回数据包括两部分,分别为Capacity List Header和。
typedef struct _FORMAT_CAPACITIES_RESPONSE_STRUCT
{
#pragma pack(1)
//Capacity List Header
UCHAR Reserved0[3];
UCHAR CapacityListLength;
//Current/Maximum Capacity Descriptor
ULONG NumberOfBlocks;
ULONG DescriptorCode:2;
ULONG Reserved1 : 6;
ULONG BlockLength : 24;
#pragma pack()
}FORMAT_CAPACITIES_STRUCT,*PFORMAT_CAPACITIES_STRUCT;
Capacity List Header
容量列表长度字段指定后面容量描述符的字节长度。每个容量描述符的长度为八个字节,使容量列表的长度等于描述符数量的八倍。
Current/Maximum Capacity Descriptor
Current/Maximum Capacity Descriptor描述了在UFI设备中装入介质且其格式已知时的当前介质容量,或者在未装入介质、装入的介质未格式化或装入的介质的格式未知时,UFI设备可以格式化的最大容量
- Number of Blocks表示描述符媒体类型的可寻址块总数。
- Descriptor Code指定返回给主机的描述符类型
“DescriptorCode” | Descriptor Type |
---|---|
01b | Unformatted Media - Maximum formattable capacity for this cartridge |
10b | Formatted Media - Current media capacity |
11b | “No Cartridge in Drive - Maximum formattable capacity for any cartridge” |
READ_FORMAT_CAPACITIES示例
如以下为LBA个数为2946个,每个LBA4096字节,数据为大端。
00 00 07 fe = 2046
00 01 00 00(补齐) = 4096
//CWB
20.2 31 OUT 55 53 42 43 70 22 57 b4 fc 00 00 00 80 00 0a 23
00 00 00 00 00 00 00 fc 00 00 00 00 00 00 00
//Response
20.1 12 IN 00 00 00 08 00 00 07 fe 02 00 01 00 00(补齐)
//CSW
20.1 13 IN 55 53 42 53 70 22 57 b4 f0 00 00 00 00
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936