usb开发笔记1-Bulk-Only传输协议

usb开发笔记1-Bulk-Only传输协议

  (2011-04-14 10:29:42)
转载
标签: 

杂谈

分类: USB开发MSD设备
U盘应属于海量存储类。
USB海量存储设备又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类。通用海量存储设备实现上是基于块/扇区存储的设备。
USB组织定义了海量存储设备类的规范,这个类规范包括4个独立的子类规范。主要是指USB总线上的传输方法与存储介质的操作命令。
海量存储设备只支持一个接口,即数据接口,此接口有三个端点Bulk input ,Bulk output,中断端点
这种设备的接口采用SCSI-2的直接存取设备协议,USB设备上的介质使用与SCSI-2以相同的逻辑块方式寻址 
二、 Bulk-Only传输协议
当一个U盘插入主机以后,主机会要求USB设备传回它们的描述符,当主机得到这些描述符后,即完成了设备的配置。识别出USB设备是一个支持Bulk-Only传输协议的海量存储设备。这时应可进行Bulk-Only传输方式。在此方式下USB与设备之间的数据传输都是通过Bulk-In和Bulk-Out来实现的。
在这种传输方式下,有三种类型数据在USB和设备传送,它们是命令块包(CBW),命令执行状态包(CSW)和普通数据包。CBW是主机发往设备的命令。格式如下: 
其中dCBWSignature的值为43425355h,表示当前发送的是一个CBW。
DCBWDataTransferLength:表示这次CBW要传送数据长度。
BmCBWFlags:表示本次CBW是读数据还是写数所
BBWCBLength:表示命令的长度。
CBWCB:表示本次命令内容。也即是SCSI命令。
当设备从主机收到CBW块以后,它会把SCSI命令从CBW中分离出来,然后根据要求执行,执行的结果又以CSW的形式发给主机。
CSW的格式如下:
其中dCSWSignature的值为53425355h,表示当前发送的是一个CSW。
DCSWTag:必须和CBW中dCBWTag一样。
DCSWDataResidue:还要传送的数据。
BCSWStatue:命令执行状态,命令正确执行时,为0。

三、 SCSI命令集

在Bulk-Only的命令块包(CBW)中,有一段CBECB内容,它就是SCSI命令块描述符。其内容如下:
Operation Code:是SCSI命令操作代码。
Logical Block Address:逻辑块地址,对U盘而言应是扇区。前面已经讲过:通用海量存储设备是一个基于块/扇区存储的设备,因此在SCSI中要提供这个参数是很显然的。
transfer length:为要传送的扇区数
SCSI中直接存取类型的存储介质的传输命令有很多,如:
INQUIRY:其操作码为12H
Test Unit Ready:其操作码为00H
Format Unit:其操作码为04H
.......

你可能感兴趣的:(usb开发笔记1-Bulk-Only传输协议)