USB Mass Storage Class Bulk-Only Transport

Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备几乎都采用或支持Bulk-Only标准。
Bulk-Only传输规范是系统通过默认管道(地 址0、端点0)进行枚举后,仅仅使用批量(Bulk)端点传送数据/命令/状态,批量传输方式不受时间限制并能保证数据的完整性。在取得的端点描述符中包含了Bulk-In和Bulk-Out端点,在Bulk数据收发的时候一定要从相应的端点进行。
其中有三种类型的数据在USB主机和设备之间传送,即CBW、CSW 和普通数据。CBW(Command Block Wrapper,命令块包)是从USB主机发送到设备的命令包,它由31个字节构成,其中包含的命令遵从接口描述表中的 bInterfaceSubClass域所指定的命令集,一般采用SCSI 传输命令集。USB设备从CBW 中取出并执行相应命令,向主机传送指定数据及发出反映当前命令执行状态的CSW(Command Status Wrapper,状态包),它由13个字节构成,主机根据CSW 来判断此次操作是否正确,从而决定是继续传送数据还是进行数据传输的错误校验。事实上错误校验一直伴随着整个数据的处理过程中。
命令块数据包(CBW)
CBW应该从数据包的边界开始,在正好传输了31个字节后作为短包结束。所有后续数据和CSW都应该从新数据包的边界开始,CBW的说明如下表:
            
字节
7
6
5
4
3
2
1
0
0-3
dCBWSignature
4-7
dCBWTag
8-11(08h - 0Bh)
dCBWDataTransferLength
12(0Ch)
bmCBWFlags
13(0Dh)
Reserved (0)
bCBWLUN
14(0Eh)
Reserved (0)
bCBWCBLength
15-30(0Fh - 1Eh)
CBWCB
dCBWSignature:帮助指明该数据报为CBW的信号标记。这个字段的值为0x43425355(小端),表示这是一个CBW。
dCBWTag:主机发送的命令块标签。设备应在相关CBW的dCSWTag字段中将这个字段的内容返回给主机。dCSWTag将CSW与对应的CBW联系起来。
dCBWDataTransferLength:主机要求在执行CBW命令期间,在批量输入或批量输出端点传输数据字节数。如果该字段为0,则设备和主机不应该在CBW和相关的CSW中间传输数据,设备应该忽略bmCBWFlags中方向位的值。注意,这个字段指明的是跟在CBW之后数据包的长度。
bmCBWFlags:本字段的位定义如下:
位7:方向。0 = 从主机到设备的DataOut,1 = 从设备到主机的DataIn;
位6:废弃的,主机应该将该位设置为0;
位5-0:保留,主机应该将该位设置为0;
bCBWLUN:命令块发送的设备逻辑单元号(LUN)。对于支持多个LUN的设备,主机应该将该字段设置为命令块寻址的LUN。否则应该设置为0。对于U盘主机系统来说,因为U盘都不支持多个LUN,因此该字段应该设置为0。
CBWCB:设备将执行的命令块,对于U盘主机系统来说,就是将执行的UFI命令块。
命令状态包(CSW)
CSW应从包的边界开始,在传输了13个字节以后结束,CSW的说明如下表:
            
字节
7
6
5
4
3
2
1
0
0-3
dCSWSignature
4-7
dCSWTag
8-11(08h - 0Bh)
dCSWDataResidue
12(0Ch)
bCSWStatus
dCSWSignature:帮助指明该数据包为CSW的信号标记,这个字段的值为0x53425355(小端),表示这是一个CSW。
dCSWTag:设备应将这个字段设置为接收到的相应CBW的dCBWTag字段值。
dCSTDataResidue:对于DataOut,设备应在这个字段报告dCBWDataTransferLength字段规定的要求数量与设备实际处理的数据量之差。对于DataIn,设备应在这个字段报告dCBWDataTransferLength字段规定的要求数量与设备实际发送的数据量之差。dCSWResidue的值不会超过dCBWDataTransferLength发送的值。
bCSWStatus:表示命令执行是否成功。0 = 执行成功,非0表示失败,如下表:
描述
00h
命令通过(运行良好)
01h
命令失败
02h
状态错误
03 - 04h
保留(废弃)
05 - FFh
保留
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/292104,如需转载请自行联系原作者

基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍相关推荐

  1. 基于OHCI的USB主机 —— UFI命令监视代码

    在调用完上面的UFI命令后,ufiCmdRunning.state就被设置为UFI_STATE_BEGIN态,在主循环中调用本函数,用来判断UFI命令是否执行完毕,以及是否执行成功. /**  * U ...

  2. 基于OHCI的USB主机 —— UFI数据结构2

    UFI命令块 /**  * UFI命令块  */ typedef union _CDB_RBC {     READ_10             ufiRead10;           //!&l ...

  3. 基于OHCI的USB主机 —— UFI查询代码

    /**  * 磁盘查询命令  * @param *buf 数据缓冲区指针  * @return 0 - 成功  */ short ufiInquiry(BYTE *buf) {     INQUIRY ...

  4. 基于OHCI的USB主机 —— UFI读容量代码

    /**  * 读磁盘容量命令  * @param *buf 数据缓冲区指针  * @return 0 - 成功  */ short ufiReadCapacity(BYTE *buf) {     R ...

  5. 基于OHCI的USB主机 —— UFI写扇区代码

    /**  * 写磁盘扇区命令  * @param sect 物理扇区号  * @param *buf 数据缓冲区指针  * @return 0 - 成功  */ short ufiWriteSect( ...

  6. 基于OHCI的USB主机 —— UFI读状态代码

    /**  * 读取错误原因  * @param *buf 存放读取出来数据的缓冲区  * @return 0 - 成功  */ short ufiRequestSense(BYTE *buf) {   ...

  7. 基于OHCI的USB主机 —— UFI数据结构3

    UFI命令运行状态结构,用于判断UFI命令是否执行完毕. typedef struct _UFI_CMD_RUNNING{     unsigned char state;        //!< ...

  8. 基于OHCI的USB主机——UFI查询命令(Inquiry)

    查询命令(INQUIRY)请求获取UFI设备参数的信息.他被用作主机上的驱动器访问FUI设备的配置,特别是在接通电源和硬件复位之后使用.命令内容如下表:  位 字节 7 6 5 4 3 2 1 0 0 ...

  9. 基于OHCI的USB主机——UFI读扇区命令(Read10)

    读命令要求UFI设备传输数据到主机,记录在逻辑块地址的最新数据值将被返回,命令格式如下表:  位 字节 7 6 5 4 3 2 1 0 0 操作代码(0x28) 1 逻辑单元号(LUN) DPO FU ...

最新文章

  1. windows xp远程桌面没有反应
  2. NIPS2020 | DiffGCN:利用微分算子和代数多重网格池化优化图卷积
  3. python中统计列表各个元素的个数
  4. C++的一些知识点摘抄(创建基本类 高级类)
  5. 2017 ACM-ICPC西安网赛B-Coin
  6. python导入pyecharts错误没有pyecharts_python报No module named 'pyecharts'的错误怎么办?
  7. 需求工程阅读笔记03
  8. Linux 命令之 groupdel -- 删除指定的用户组
  9. flutter开发仿抖音首页面上下滑动切换播放视频效果
  10. 中通科技移动自动化测试的革新与探索
  11. matlab创建nc文件怎么打开,MATLAB打开nc文件并读取nc文件数据
  12. mysql数据库在什么程序操作_MySQL数据库基本操作(一)
  13. inputstream是否一定要close_新车是否需要底盘保养?一定要喷底盘防锈漆吗?
  14. axios 请求拦截封装使用
  15. response 画验证码
  16. 2月29日,四年一遇的日子!
  17. TFT-LCD显示屏工作原理图文解析
  18. Word在方框中插入对勾和×
  19. quick-cocos2d-x 飞机大战(打飞机)小demo教程------主角飞机类
  20. dlg.DoModal()介绍

热门文章

  1. 9.条件语句(if语句)
  2. 12月php粉红色婚恋交友源码V6.0分享下载研究学习
  3. 微型计算机惠普1hm20av,微型计算机原理答案(1)
  4. java基于ssm的万卷图书馆借阅管理平台
  5. 哈工大深圳计算机学院蔡聪怀,哈工大(深圳)计算机学院第一届光熙杯篮球赛圆满落幕...
  6. App开发用什么软件?零基础也可以制作App
  7. 前程无忧2020新财报:曾经风光,今夕已老
  8. 英文学习20180417
  9. 沪江网校SWF课件打开后叹号问题的解决方案
  10. 液晶屏有哪些种类,区别是什么?