Bulk-Only协议是USB组织针对大容量存储设备制定的一种通信协议,它的核心设计理念是通过USB传输大量数据,而不依赖额外的控制信号传输。该协议适用于USB接口的移动存储设备,比如USB移动硬盘、USB外置光驱、USB外置软驱、USB内存盘(闪盘)和USB CompactFlash/SmartMedia卡读卡器等。Bulk-Only协议的优势在于它的实现简单,不需要复杂的驱动支持,实现了即插即用的便捷性,同时保持了高速的数据传输能力。 Bulk-Only传输规范中仅使用Bulk端点来传输数据、命令和状态信息,这在设备和主机之间建立了一种高效且直接的通信渠道。Bulk端点在USB协议中通常用于大量数据的传输,它提供了一个无需额外确认信号即可传输大量数据的快速通道。 Bulk-Only协议的一个重要组成部分是命令块包(Command Block Wrapper,CBW)。CBW包是一个31字节的数据结构,它由主机通过Bulk-Out端点发送到存储设备。CBW包包含了多个字段,用于指示要执行的命令以及如何处理数据。CBW包的格式定义非常严格,必须以包边界开始并以31字节的短包结束。CBW包的结构如图所示,其中: - dCBWSignature是一个用于识别CBW包的标记,其值为***h(十六进制表示,对应ASCII码为“CBSU”,也就是“Command Block Signature”的缩写)。 - dCBWTag是命令块的标记,由主机生成,用于在CSW(Command Status Wrapper,命令状态包)中引用相应的CBW包,以确保主机和设备之间的通信是一一对应的。 - dCBWDataTransferLength指定在Bulk-In或Bulk-Out端点之间传输数据的预期字节长度。如果此值为0,则CBW和CSW之间不传输任何数据。 - bmCBWFlags通常只使用最高位,即所谓的方向位。方向位为0表示即将进行从主机到设备的数据传输(Data-Out状态),方向位为1表示即将进行从设备到主机的数据传输(Data-In状态)。 - bCBWLUN表示命令块被发送到的逻辑单元号。 Bulk-Only协议的工作流程包括几个关键状态,例如CBW处理、Data-Out、Data-In、CSW处理等。通信的开始是由主机发送CBW包并试图建立数据传输。设备在接收到CBW包后,解析包的内容,并执行相应的数据传输。传输完成后,设备使用CSW包向主机返回传输状态信息,告知数据是否成功传输。 USB Mass Storage类规范包含了四个子类规范,Bulk-Only Transport是其中的一种。Bulk-Only传输规范因其简便性和高效性,被广泛用于实际设备中。在软件实现方面,通常需要创建能够处理CBW和CSW的固件代码,来确保设备能够正确响应主机的命令,并高效传输数据。 了解和掌握Bulk-Only协议对于开发高性能的USB移动存储设备至关重要。由于其免驱特性,设备可以轻松集成到各种操作系统中,不需要额外的驱动程序支持。这种简便性使得Bulk-Only协议成为实现USB存储设备的首选协议之一。
- 粉丝: 14
- 资源: 33
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助