本文PDF文档下载
研究USB Mass storage类设备首先要学习USB Mass storage类的规范及其许多有价值的资料。
尤其是:
USB Mass storage Bulk Only spec
Command/Data/Status Flow shows the flow for Command transport, Data-In, Data-Out and Status Transport.
<?xml:namespace prefix = v /><?xml:namespace prefix = o /><!--[if !vml]-->
Command Block Wrapper(CBW) 命令字
CBW 必须从封包边界(Packet boundary)起始而且以31个字节传输的短包为结束。
所有的后续数据和状态字(CSW)应该以另一个新包起始。CBW传输应该符合小端模式(little endian)。
<!--[if !vml]-->dCBWSignature:
标识这个数据包为CBW。这个标识必须为43425355h,表示为CBW。
dCBWTag:
由主机发送的CBW标签。设备应该在相关的CSW的dCSWTag以相同的内容回应主机。dCSWTag表示CSW有对于的CBW。
dCBWDataTransferLength:
在本命令执行期间,主机期望与Bulk-In或Bulk-Out端点传输的数据字节数。如果为0,设备和主机不能在CBW和对应的CSW中传输数据。设备也会忽略bmCBWFlags中的Direction位。
bmCBWFlags:
各位如下定义:
Bit7 Direction-除了当dCBWDataTransferLength为0时,设备会忽略这一位。其它时:
0= DataOut,数据从主机到设备
1= DataIn, 数据从设备到主机
Bit6 Obsolete 主机应当将这位置0
Bits 5..0 Reserved 主机应当将这些位置0
bCBWLUN:
表示正在发送命令字的设备的逻辑单元号(LUN)。对于支持多个LUN的设备,主机必须将LUN放入对于地址的CBW。否则,主机必须将其置0。
bCBWCBLength:
CBWCB的有效字节长度。它定义了CB的可用长度。有效值是在1到16(01h to 10h)之间。
CBWCB:
被设备执行的Command Block(CB)。
Command Status Wrapper(CSW)状态字
<!--[if !vml]-->dCSWSignature:
表示这个数据包是CSW。它必须为53425355h。
dCSWTag:
设备必须将它设置为与对应的CBW的dCBWTag相同的值。
dCSWDataResidue:
对于Data-Out,设备应该通过dCSWDataResidue报告,dCBWDataTransferLength中期望的数据量与实际处理的数据量的不同。对于Data-In,设备应该通过dCSWDataResidue报告dCBWDataTransferLength中期望的数据量与实际设备发送的数据量的不同。dCSWDataResidue不能够超出dCBWDataTransferLength中的值。
bCSWStatus:
bCSWStatus表示命令成功或失败。如果命令执行成功,设备应该将这些字节设置为0。非零值表示在命令执行期间有失败产生:
<!--[if !vml]-->
用户393536 2008-10-17 14:31
用户1318081 2008-2-26 19:18
用户634140 2008-2-26 17:33
huntery88@126.com
用户204432 2007-11-7 19:54
hall918@163.com
用户1318081 2007-6-4 22:32