2024年4月8日发(作者:)
AN1142
嵌入式主机上的USB海量存储设备类
作者:
Kim Otten
Microchip Technology Inc.
这种海量存储设备类的实现支持只使用批量传输(Bulk
Only Transport)的传输。在该协议中,利用了如下三
个端点:
•用于控制传输的端点0
•一个Bulk IN端点
•一个Bulk OUT端点
批量传输由三个阶段组成:
•命令(Command)
•数据(Data)(可选)
•状态(Status)
命令阶段是通过Bulk OUT端点从主机发送命令到外
设。数据阶段(如果有的话)是利用Bulk IN端点从外
设传输数据到主机,或利用Bulk OUT端点从主机传数
据到外设。状态阶段是主机利用Bulk IN端点接收来自
外设的关于传输的状态信息。各阶段的流程如图1所
示。
引言
随着具有USB OTG外设的Microchip单片机的引入,
单片机应用可以轻松地支持USB嵌入式主机功能。这
种功能的一个最常见应用就是与海量存储设备(如USB
闪存驱动器(U盘)和存储卡读卡器)相连。这些设备
都采用了USB海量存储设备类(USB Mass Storage
Class)。
USB海量存储设备类
概述
在USB支持的四种传输类型中,最适合大量数据传输
的是批量传输(bulk transfer)。批量传输有效地利用
了USB带宽,因为在一帧中的控制传输、中断传输和
同步传输完成后,批量传输利用所有的剩余带宽。批量
传输没有限制每一帧数据的字节数。批量传输还包含了
差错校验,所以可确保数据准确。批量传输可利用的确
切时间取决于总线上其他通信量的大小。如果必须进行
其他几类传输,在一帧中可用于批量传输的带宽很可能
非常小。因此,批量传输仅适用于实时性要求不太高的
操作。
在设备描述符(Device Descriptor)的bDeviceClass、
bDeviceSubClass和bDeviceProtocol域中,并没有包含
海量存储设备的类、子类和协议标识符。相反,这些域
都设置为0x00,标识符在接口描述符(Interface
Descriptor)的bInterfaceClass、bInterfaceSubClass和
bInterfaceProtocol域中定义。USB海量存储设备最常用
的设置是:
•bInterfaceClass - 0x08(海量存储设备类)
•bInterfaceSubClass - 0x06(SCSI 基本命令-2,
SPC-2)
•bInterfaceProtocol - 0x50(只使用批量传输)
一个海量存储设备可能包含多个逻辑单元,每个单元用
逻辑单元号(Logical Unit Number,LUN)来表示。设
备上的逻辑单元享有共同的设备特征,但可以通过它们
的LUN来独立寻址。LUN从0到15编号。如果设备
不支持多个LUN,则其LUN规定为0。
2008 Microchip Technology 01142A_CN第1页
AN1142
图 1:命令/数据/状态流程图
就绪
命令传输
(CBW)
数据输出
(自主机)
数据输入
(到主机)
状态传输
(CSW)
命令块包(CBW)
命令块包(Command Block Wrapper,CBW)在传输
的命令阶段发送到外设。CBW是一个31字节的包,它
包含如下信息:
•
•
•
•
标识传输的标志
数据阶段所要传输的字节数
传输所使用的LUN
设备执行的命令块
CBW的格式如表1所示。
表 1:
字节
0-3
4-7
8-11
12
13
14
15-30
命令块包
命令块包(CBW)
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
dCBWSignature
dCBWTag
dCBWDataTransferLength
bmCBWFlags
保留(0)
保留(0)
CBWCB
bCBWLUN
BCBMCBLength
CBW由海量存储设备的客户端驱动程序内部产生。
DS01142A_CN第2页 2008 Microchip Technology Inc.


发布评论