简介
USB Mass storage Device协议即海量存储设备协议适⽤于硬盘,U盘等⼤容量存储设备。协议使⽤的接⼝端点有BulkIn、BulkOut和Interrupt端点。该设备类⼜包含6个独⽴的⼦类以及3种传输协议。 01h RBC 通常,FlashDevice使⽤RBC,事实上所有⼤容量存储设备都可使⽤RBC
02h SFF-8020i,MMC-
2(ATAPI)
适⽤硬盘,C/DVD
03h QIC-157适⽤磁盘
钢结构轻型楼板04h UFI适⽤软盘
05h SFF-8070i适⽤移动存储设备
06h SCSI ⽬前绝⼤多数USB Mass Storage设备都使⽤SCSI指令集
bInterfaceProtocol协议实现描述
00h Control/Bulk/Interrupt protocol(含命令完
成中断)
USB海量存储类CBI传输,只适
⽤于全速
01h Control/Bulk/Interrupt protocol(不含命令
完成中断)
USB海量存储类CBI传输,只适
⽤于全速
50h Bulk-Only传输Bulk-Only传输
本⽂仅介绍SCSI⼦类下Bulk-Only的传输协议,我们⼿中的U盘就是遵循SCSI协议的。要知道U盘不仅仅是USB设备,它还是⼀种存储设备,类似硬盘,USB协议本⾝没有定义对存储设备操作的指令,所以需要通过SCSI来完成读写等操作。关于此类设备的描述符不再赘述,需要注意的是在interface描述符中: bInterfaceClass = 0x08
bInterfaceSubClass = 0x06
bInterfaceProtocol = 0x50
指令、数据和状态协议
CBW指令格式
CBW(Command Block Wrapper)的长度为31个字节,具体定义如下图:
dCBWSignature:
CBW的标识,固定值:43425355h (little endian)。
dCBWTag:
主机发送的⼀个命令块标识,设备需要原样作为dCSWTag(CSW中的⼀部分)再发送给Host;主要⽤于关联CSW到对应的CBW。
dCBWDataTransferLength:
本次CBW命令要求在命令与回应之间传输的字节数。如果为0,则不传输数据。
bmCBWFlags:
反映数据传输的⽅向,0x00 表⽰来⾃Host,0x80 表⽰发⾄Host;
bCBWLUN:
对于有多个LUN逻辑单元的设备,⽤来选择具体⽬标。如果没有多个LUN,则写0。
bCBWCBLength:
命令的长度,范围在0~16.
CBWCB:
传输的具体命令,符合bInterfaceSubClass.中定义的命令规范,此处是SCSI指令集
CSW(Command Status Wrapper)状态格式
CSW的长度为13个字节,是对应CBW指令的状态返回,它指⽰了上⼀条指令执⾏是否成功,具体定义如下:
dCSWSignature:
CSW的标识,固定值:53425355h (little endian)
dCSWTag:
设置这个标识和CBW中的dCBWTag⼀致,参照上⾯关于dCBWTag的解释
dCSWDataResidue:
还需要传送的数据,此数据根据dCBWDataTransferLength-本次已经传送的数据得到
bCSWStatus:
指⽰命令的执⾏状态。如果命令正确执⾏,bCSWStatus 返回0 ,不正确返回1,phase错返回2(当HOST收到此错误时需要对Device复位)
SCSI命令集
04H Format Unit:格式化存储设备
12H Inquiry:获取设备信息
55H Mode Select:HOST⽤来设置外设参数
5AH Mode Sense:返回参数
28H/A8H Read(10)/Read(12):从设备读取数据
25H Read Capacity:读取设备容量
23H Read Format Capacity:读取当前设备容量和可格式化的容量
包装密封性测试1EH Prevent/Allow Medium Removal:写保护
03H Request Sense:获取状态信息
2BH Seek(10):为设备分配地址
1DH Send Diagnostic:硬件复位并执⾏诊断
00H Test Unit Ready:查询设备是否ready
2AH/AA Write(10)/Write(12):写数据到存储设备
2EH Write and Verify:写数据到存储设备并校验
Format Unit
Bit
76543210
Byte
004H
1LUN FmtData CmpList Defect List Format
2Vendor-specific
3Interleave (MSB)跨网传输
4Interleave (LSB)
Bit Byte
7
6
5
43
2
1
0Reserved
1FOV
Extend(0)
DCRT(1)
SingleTrack
Reserved
Immediate
Side
2Defect List Length (MSB) (0)3Defect List Length (LSB) (8)
4—7MSB Number of Blocks
8Reserved
9—11MSB Block Length 5—6保留
长效复合肥
7Parameter List Length (MSB)8Parameter List Length (LSB)
Interleave:默认为0,对于USB-FDU 此值为1
Parameter List Length:参数列表长度,典型值为12bytes,Host 发出Format 命令后紧接着发参数 Parameter List
FOV:当DCRT或Immediate置1时,此位也须置1DCRT:置1表⽰⽆需对盘符进⾏认证,须置1
SingleTrack:置1表⽰只对指定Format Unit命令指定的Track格式化Immediate:置1时,device必须⽴刻返回状态信息,不⽀持UFI设备Side:对SingleTrack有效,置1从顶部开始格式化,置0从底部开始格式化
注意:Number of Block和Block Length的值要与Read Format Capacity的返回相匹配 Inquiry
背景广播系统Bit Byte
7
6
5
4
3
2
1
012H
1LUN
Reserved
EVPD(0)
2Page Code 3Reserved
4MSB Allocation Length
5—11
Reserved
Page Code:需要查询的页码,对于UFI 设备仅⽀持00H Allocation Length :定义了需要查询和返回的最⼤字节数
标准INQUIRY返回数据
Bit
Byte76543210
0Reserved Peripheral Device Type
1RMB Reserved
2ISO Version(00h)ECMA Version(00h)ANSI Version (00h)
3Reserved Response Data Format
4Additional Length (31)
5—7Reserved
8—15Vendor Information
16—31Product Identification
32—35Product Revision Level
Peripheral Device Type:标识当前连接逻辑单元的类型,00H为直接存储设备,05H为光盘
RMB(Removable Media Bit):置1表⽰是可移除设备
Response Data Format:UFI设备置1
Additional Length:参数长度,UFI设备此值为1FH
MODE SELECT
Bit
76543210 Byte
055H
1LUN PF Reserved SP
2—6Reserved
7—8MSB Parameter List Length
9—11Reserved
PF:UFI设备置1
SP(Save Pages):UFI设备不⽀持
Parameter List Length:参数长度
MODE SENSE
Bit
76543210
Byte
05AH
1LUN Reserved DBD Reserved
2PC Page Code
3—6Reserved
7—8MSB Parameter List Length
9—11Reserved
DBD - Disable Block Descriptors - if "1" then the target must not return any block descriptors PC - Page control -
00 - return current values
01 - return changeable values
10 - return default values
11 - return saved values
Page Code - 参考
PREVENT-ALLOW MEDIUM REMOVAL
Bit
Byte 76543210
01EH
1LUN Reserved
2-3Reserved
莫氏变径套4Reserved Prevent
5-11Reserved
Prevent:置1表⽰禁⽌移除设备
READ(10)
Bit
76543210
Byte
028H
1LUN DPO(0)FUA(0)Reserved RelAdr(0)
2-5Logical Block Address
6Reserved
7—8MSB Transfer Length
9—11Reserved
READ(12) A8H的Transfer Length为32位,从6-9字节
READ CAPACITY
Bit
76543210 Byte
025H
1LUN Reserved RelAdr(0)
2-5Logical Block Address(0)
6-7Reserved
8 Reserved PMI(0)
9—11Reserved
此命令返回8个字节,0-3表⽰最后⼀个逻辑块的地址,4-7表⽰每个逻辑块的长度
READ FORMAT CAPACITIES
Bit
76543210
Byte
023H
1LUN Reserved
2-6Reserved
7-8Allocation Length
9-11Reserved
Allocation Length:定义了HOST能够接收的最⼤格式化数据长度
REQUEST SENSE
Bit
76543210
Byte