USB大容量存储BOT
+ -

U盘BOT存储UFI协议READ_FORMAT_CAPACITIES命令说明及实例分析

2022-04-28 2208 0

UFI命令READ_FORMAT_CAPACITIES(读取格式化容量)命令允许主机请求在当前安装的介质上可以格式化的可能容量列表。如果当前未安装介质,UFI设备应返回设备可格式化的最大容量。

define READ_FORMAT_CAPACITIES  0x23

READ_FORMAT_CAPACITIES命令格式

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

Capacity List Header
容量列表长度字段指定后面容量描述符的字节长度。每个容量描述符的长度为八个字节,使容量列表的长度等于描述符数量的八倍。

Current/Maximum Capacity Descriptor

Current/Maximum Capacity Descriptor描述了在UFI设备中装入介质且其格式已知时的当前介质容量,或者在未装入介质、装入的介质未格式化或装入的介质的格式未知时,UFI设备可以格式化的最大容量
Current/Maximum Capacity Descriptor

  • 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   

0 篇笔记 写笔记

U盘BOT存储UFI协议INQUIRY命令说明及实例分析
INQUIRY定义为0x12,用于查询USB存储即U盘的基本信息,这些信息包括厂家信息,产品信息及产品版本号等。INQUIRY流程图INQUIRY命令通过BULK传输的OUT端点下发给设备,设备需要先返回基本的INQUIRY信息,再返回CSW状态。INQUIRY命令格式LUN :被设置为 0......
Windows10 x64基于BOT规范虚拟U盘调试批量端点返回CSW的问题
虚拟了这么多的USB设备,突然想着U盘还没有弄,那就搞一个吧。就当是为了自己学习,没准那天突然有这样的需求。所以说干就干。我们知道,虚拟U盘其实是两套规范的,一种是传统的BOT协议,另一种是UASP的。这里为了兼容性,也是为了学习方便,我们使用BOT规范来虚拟一个标准的U盘。通过UsbTree......
USB存储BOT规范UFI命令大全
命令描述代码配对USB数据流对应章节FORMAT UNIT04houtputsection 4.1 on page 16INQUIRY12hinputsection 4.2 on page 19MODE SELECT55houtputsection......
Win10 x64使用BOT规范UFI命令虚拟U盘(USB3.0)演示
为了学习U盘的UFI命令,使用Windows驱动虚拟了一个USB设备,该USB设备实现UFI命令支持的U盘。虚拟U盘原理大概框架如下:我们通过一个WDM驱动实现一个虚拟的总线驱动,创建一个U盘的PDO,让系统自带的usbstor.sys创建FDO并附加在我们的PDO上。而关于U盘的读写USBST......
U盘BOT存储UFI协议READ_FORMAT_CAPACITIES命令说明及实例分析
UFI命令READ_FORMAT_CAPACITIES(读取格式化容量)命令允许主机请求在当前安装的介质上可以格式化的可能容量列表。如果当前未安装介质,UFI设备应返回设备可格式化的最大容量。define READ_FORMAT_CAPACITIES 0x23READ_FORMAT_CAPAC......
U盘BOT存储UFI协议INQUIRY命令说明及实例分析2
INQUIRY命令请求用于将UFI设备的参数信息发送到主机。主机上的驱动程序使用它来询问UFI设备的配置。NQUIRY命令请求通常是在通电或硬件复位之后。#define INQUIRY 0x12UFI INQUIRY命令格式EVPD(Enable Vital Product Data)置为......
U盘BOT存储UFI协议READ_CAPACITY命令说明及实例分析
READ_CAPACITY命令用于主机从设备获取当前设备媒价的存储容量。#define READ_CAPACITY 0x25UFI READ CAPACITY命令格式RelAdr:必须为0Logical Block Address:为0PMI:为0如果UFI设备识别已格式化介质,UFI设备......
U盘BOT存储UFI协议READ(10)命令:0x28
READ(10)命令请求UFI设备将数据传输到主机。应返回写入寻址逻辑块的最新数据值。#define READ_DATA 0x28UFI READ(10)命令格式DPO:为0FUA:为0RelAdr:为055 53 42 43 a0 69 49 b4 00 10 00 00 80 0......
U盘BOT存储UFI协议WRITE(10)命令:0x2A
WRITE(10)命令要求UFI设备将主机传输的数据写入介质。#define WRITE_DATA 0x2aUFI WRITE(10)命令格式DPO:为0FUA:为0RelAdr:为0typedef struct _READ_CMD{#pragma pack(1) UCHAR ......
U盘BOT存储UFI协议TEST UNIT READY命令:0x00
TEST UNIT READY提供了一种检查UFI设备是否就绪的方法。TEST UNIT READY不是用于自检的。如果UFI设备将接受适当的介质访问命令而不返回检查条件状态,则该命令应返回良好状态。如果UFI设备无法运行或处于需要主机操作才能使UFI设备准备就绪的状态,UFI设备应返回检查条件状......
U盘BOT存储UFI协议数据自检校验命令VERIFY:0x2F
VERIFY命令请求用于UFI设备校验设备上的数据。VERIFY Command格式DPO:为0ByteChk:为0。USB-FDU仅检查介质上的CRC数据,无数据比较RelAdr:为0Logical Block Address:该字段指定验证操作开始的逻辑块LBA。Verification ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!