USB Mass Stroage Class --- Bulk Only Transport
5 命令/数据/状态
命令、数据、状态相关的流程图如下:
Host端发送的数据必须符合CBW格式(31byte,小端模式),而Mass Storage设备的应答,其格式必须符合CSW格式(13byte,小端模式)。至于中间过程传输的数据,根据不同的命令,格式也有不同地要求。
5.1.1 CBW命令块(Command Block Wrapper)
dCBWSignature:常数0x43425355,标识为CBW命令块。
dCBWTag: 由主机发送的CBW标签。设备应该在相关的CSW的dCSWTag以相同的值应答主机。
dCBWDataTransferLength: 在本命令执行期间,主机期望通过Bulk-In或Bulk-Out端点传输的数据长度。如果为0,则表示这之间没有数据传输。
bmCBWFlags: 定义如下
Bit7 Direction(dCBWDataTransferLength为0时,该值无意义) :
0= DataOut,数据从主机到设备
1= DataIn, 数据从设备到主机
Bit6 Obsolete 0
Bits 5..0 Reserved 0
bCBWLUN: 表示正在发送命令字的设备的逻辑单元号(LUN)。对于支持多个LUN的设备,主机设置相对应的LUN值。否则,该值为0。
bCBWCBLength: CBWCB的有效字节长度。有效值是在1到16之间。
CBWCB: 被设备解析执行的命令块。
5.1.2 CSW状态块(Command Status Wrapper)
dCSWSignature: 常数0x53425355,标识为CSW状态块
dCSWTag: 取相对应的CBW的dCBWTag值。
dCSWDataResidue:实际传输的数据个数和期望要传输的数据个数之差。
bCSWStatus:命令执行情况,相关值如下:
SCSI 格式文档下载地址:scsi指令格式及使用方法
这里有个工具有提一下,Bus Hound 是一套专门用于电脑外设与主机数据通讯捕捉的工具,可用于捕捉USB数据传输的检测。还可用于捕捉键盘串口等的传输数据。下载地址:Bus hound 6.01 完全破解版
5 命令/数据/状态
命令、数据、状态相关的流程图如下:
Host端发送的数据必须符合CBW格式(31byte,小端模式),而Mass Storage设备的应答,其格式必须符合CSW格式(13byte,小端模式)。至于中间过程传输的数据,根据不同的命令,格式也有不同地要求。
5.1.1 CBW命令块(Command Block Wrapper)
dCBWSignature:常数0x43425355,标识为CBW命令块。
dCBWTag: 由主机发送的CBW标签。设备应该在相关的CSW的dCSWTag以相同的值应答主机。
dCBWDataTransferLength: 在本命令执行期间,主机期望通过Bulk-In或Bulk-Out端点传输的数据长度。如果为0,则表示这之间没有数据传输。
bmCBWFlags: 定义如下
Bit7 Direction(dCBWDataTransferLength为0时,该值无意义) :
0= DataOut,数据从主机到设备
1= DataIn, 数据从设备到主机
Bit6 Obsolete 0
Bits 5..0 Reserved 0
bCBWLUN: 表示正在发送命令字的设备的逻辑单元号(LUN)。对于支持多个LUN的设备,主机设置相对应的LUN值。否则,该值为0。
bCBWCBLength: CBWCB的有效字节长度。有效值是在1到16之间。
CBWCB: 被设备解析执行的命令块。
5.1.2 CSW状态块(Command Status Wrapper)
dCSWSignature: 常数0x53425355,标识为CSW状态块
dCSWTag: 取相对应的CBW的dCBWTag值。
dCSWDataResidue:实际传输的数据个数和期望要传输的数据个数之差。
bCSWStatus:命令执行情况,相关值如下:
SCSI 格式文档下载地址:scsi指令格式及使用方法
这里有个工具有提一下,Bus Hound 是一套专门用于电脑外设与主机数据通讯捕捉的工具,可用于捕捉USB数据传输的检测。还可用于捕捉键盘串口等的传输数据。下载地址:Bus hound 6.01 完全破解版
Mass Storage设备所使用的SCSI命令集
指令代码 | 指令名称 | 指令说明 |
0x00 | Test Unit Ready | 查询设备是否ready |
0x03 | Request Sense | 主机请求设备返回执行结果,及获取状态信息 |
0x12 | Inquiry | 获取设备信息 |
0x1A | Mode Sense(6) | 向host传输参数 |
0x5A | Mode Sense(10) | 向host传输参数 |
0x25 | Read Capacity(10) | 读取设备容量 |
0x28 | Read(10) | Host从设备读取数据 |
0x2A | Write(10) | Host写数据到存储设备 |
0x23 | Read Format Capacity | 查询当前容量及可用空间 |
0x15 | Mode Select(6) | 允许Host对外部设备设置参数 |
0x55 | Mode Select(10) | 允许Host对外部设备设置参数 |
0x1E | Prevent/Allow Medium Removal | 禁止/允许存储介质移动 |
0x1B | Start/Stop Uint | 启动/停止存储单元电源(写保护) |
0xA0 | Report LUNs | 索取设备的LUN数和LUN清单 |
0x2F | Verify | 在存储中验证数据 |
相关操作可以查看这两篇文章:① SCSI命令传输过程分析 ② usb_scsi之旅