USB大容量存储BOT
+ -

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

2022-05-23 1786 0

READ_CAPACITY命令用于主机从设备获取当前设备媒价的存储容量。

#define READ_CAPACITY 0x25

UFI READ CAPACITY命令格式

READ_CAPACITY命令

  • RelAdr:必须为0
  • Logical Block Address:为0
  • PMI:为0

如果UFI设备识别已格式化介质UFI设备将向批量输入端点上的主机返回READ CAPACITY数据。
如果介质未格式化、未知或未显示,UFI设备会使命令块失败,并将检测键设置为下列出的适当值。

Sense Key ASC ASCQ Description of Error
0 0 NO SENSE
1 17 1 RECOVERED DATA WITH RETRIES
1 18 0 RECOVERED DATA WITH ECC
2 4 1 LOGICAL DRIVE NOT READY - BECOMING READY
2 4 2 LOGICAL DRIVE NOT READY - INITIALIZATION REQUIRED
2 4 4 LOGICAL UNIT NOT READY - FORMAT IN PROGRESS
2 4 FF LOGICAL DRIVE NOT READY - DEVICE IS BUSY
2 6 0 NO REFERENCE POSITION FOUND
2 8 0 LOGICAL UNIT COMMUNICATION FAILURE
2 8 1 LOGICAL UNIT COMMUNICATION TIME-OUT
2 8 80 LOGICAL UNIT COMMUNICATION OVERRUN
2 3A 0 MEDIUM NOT PRESENT
2 54 0 USB TO HOST SYSTEM INTERFACE FAILURE
2 80 0 INSUFFICIENT RESOURCES
2 FF FF UNKNOWN ERROR
3 2 0 NO SEEK COMPLETE
3 3 0 WRITE FAULT
3 10 0 ID CRC ERROR
3 11 0 UNRECOVERED READ ERROR
3 12 0 ADDRESS MARK NOT FOUND FOR ID FIELD
3 13 0 ADDRESS MARK NOT FOUND FOR DATA FIELD
3 14 0 RECORDED ENTITY NOT FOUND
3 30 1 CANNOT READ MEDIUM - UNKNOWN FORMAT
3 31 1 FORMAT COMMAND FAILED
4 40 NN DIAGNOSTIC FAILURE ON COMPONENT NN (80H-FFH)
5 1A 0 PARAMETER LIST LENGTH ERROR
5 20 0 INVALID COMMAND OPERATION CODE
5 21 0 LOGICAL BLOCK ADDRESS OUT OF RANGE
5 24 0 INVALID FIELD IN COMMAND PACKET
5 25 0 LOGICAL UNIT NOT SUPPORTED
5 26 0 INVALID FIELD IN PARAMETER LIST
5 26 1 PARAMETER NOT SUPPORTED
5 26 2 PARAMETER VALUE INVALID
5 39 0 SAVING PARAMETERS NOT SUPPORT
6 28 0 “NOT READY TO READY TRANSITION - MEDIA CHANGED”
6 29 0 “POWER ON RESET OR BUS DEVICE RESET OCCURRED”
6 2F 0 COMMANDS CLEARED BY ANOTHER INITIATOR
7 27 0 WRITE PROTECTED MEDIA
0B 4E 0 OVERLAPPED COMMAND ATTEMPTED

UFI READ CAPACITY响应数据格式

READ CAPACITY响应数据格式

  • Last Logical Block Address:最后一个有效的LBA
  • Block Length In Bytes:每个LBA的字幕了数
typedef struct _READ_CAPACITY_RESPONSE_STRUCT
{
    ULONG LastLogicalBlockAddress;
    ULONG BlockLengthInBytes;
}READ_CAPACITY_RESPONSE_STRUCT,*PREAD_CAPACITY_RESPONSE_STRUCT;

如我们虚拟的一个8M U盘(http://www.usbzh.com/article/detail-920.html),其数据定义如下:

#define BLOCK_LENGTH    (ULONG)(512*8)
#define BLOCK_NUM       (ULONG)(2046)

#define SwapUSHORT(A)   (( ((USHORT)(A) & 0xff00) >> 8)    | ((USHORT)(A) & 0x00ff) << 8)
#define SwapULONG(A)   ((( (ULONG)(A) & 0xff000000) >> 24) |     (((ULONG)(A) & 0x00ff0000) >> 8) | (((ULONG)(A) & 0x0000ff00) << 8) | (((ULONG)(A) & 0x000000ff) << 24))


PREAD_CAPACITY_RESPONSE_STRUCT pft = (PREAD_CAPACITY_RESPONSE_STRUCT)buffer;
RtlZeroMemory(pft, length);
pft->LastLogicalBlockAddress = SwapULONG(BLOCK_NUM);
pft->BlockLengthInBytes = SwapULONG(BLOCK_LENGTH);
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 篇笔记 写笔记

BOT传输协议和UASP传输协议有什么区别?
BOT传输协议BOT (Bulk-Only Transport),诞生于1999年,专为USB 1.1所设计,至今最快的USB 3.1都可向下兼容这个基本的BOT传输协议。在传输资料作业开始时,外接USB 3.0设备与电脑主板(USB 3.0扩展卡)之间,在同一时间单位内,每次只传输单一指令,所以速......
BOT 简介
BOT全称Universal Serial BusMass Storage ClassBulk-Only Transport(Bulk-Only Transport),是USB大容量数据存储的基础协议。BOT协议用于主机和USB设备之间进行大容量数据传输。对于USB主机来说,USB设备外部硬盘驱动器......
BOT 数据传输过程
按照USB规范,Bulk-Only 传输规范是系统也是通过默认管道(地址0 、端点 0 )进行枚举,枚举后重新分配地址,再次枚举。枚举后,实际工作仅仅使用批量( Bulk )端点传送数据 / 命令 / 状态,批量传输方式不受时间限制并能保证数据的完整性。在取得的端点描述符中包含了 Bulk-In 和......
BOT 设备描述符及布局
Bulk-Only Transport即存储设备和其它的普通设备类似,也有一些通用的描述符,如设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。BOT大容量存储设备没有其它特殊的描述符。一个标准的USB支持BOT的大容量设备描述符布局如下:设备描述符BOT大容量存储设备类型是接......
BOT 命令块包CBW
CBW即Command Block Wrapper,命令块包)是从 USB 主机发送到设备的命令包,它由 31 个字节构成,其中包含的命令遵从接口描述表中的 bInterfaceSubClass 域所指定的命令集,一般采用 SCSI 传输命令集。 USB 设备从 CBW 中取出并执行相应命令,......
BOT 命令状态包CSW
CSW 应从包的边界开始,在传输了 13 个字节以后结束, CSW 的说明如下表:struct CSW{ DWORD dCSWSignature; // CSW的标识,固定值:53425355h (小端模式) DWORD dCSWTag; //主机发送的一个命令块标......
BOT CBW和CSW数据例解析
读写数据抓包USB传输中:每一个传输包含一笔或多笔事务,每一笔事务又包含一个、两个或三个信息包。事务:Setup(设置)事务、IN(输入)事务、OUT(输出)事务信息包:令牌信息包、数据信息包、联络信息包传输|——>事务——>令牌信息包+数据信息包+联络信息包|——>事务——&......
BOT MASS_STORAGE_RESET
Bulk-Only Mass Storage Reset类特定请求是USB大容量存储设备独有的。 该特定类请求的功能用于复位大容量存储设备和与之关联的接口。通知设备接下来的批量端点输出数据为命令块包(CBW)。由于该请求是控制请求,所以是通过端点0发送的。在设备完成该请求即复位之前,设备应......
BOT GET_MAX_LUN
GET_MAX_LUN特定类请求用于获取最大逻辑单元。GET_MAX_LUN是:控制请求,通过端点0来发送。主机发送组设备,设备返回1字节数据。发送的目标对象是接口。bmRequestTypebRequestwValuewIndexwLengthData1010000......
BOT CBW和CSW的校验
Bulk-Only Protocol传输是通过主机向设备发送CBW请求,设备响应CBW返回CSW响应。Bulk-Only Protocol传输开始是从设备复位(MASS_STORAGE_RESET)之后开始的,设备在接收到CBW请求和主机收到CSW回应后,是需要对CBW和CSW进行拆包解析。CBW......
UASP(USB Attached SCSI Protocol)简介
UASP全称USB Attached SCSI Protocol,中文译名USB附加SCSI协议。 UAS是一种计算机协议,用于将数据从USB存储设备写入和读出,例如硬盘驱动器(HDD)、固态驱动器(SSD) 和拇指驱动器。UAS 依赖于 USB 协议,并使用标准的SCSI命令集。与较旧的USB ......
USB 3.0 支持UASP什么作用
USB 3.0 在数据量较多且零碎传输时,效能的表现会较差,主要原因是在于传输技术所造成的状况。USB 采用半双工传输模式与BOT (Bluk Only Transfer) 传输协议,半双工传输模式就像是再讲对讲机一样,一方说完另一方才能继续对话,也就是说资料的传输方向仅有单向传输功能。BOT ......
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......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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