USB Mass Storage 类介绍

一、  概述

本文将针对 USB 的 Mass Storage 类的基础知识进行介绍,主要包括 Mass Storage 类的基本框架、标准描述符、Bulk-Only传输方式以及常用的 SCSI 命令等几个方面。

二、  Mass Storage 基本框架

如下图所示为 Mass Storage USB 设备类的基本框架,从图中可以看出,USB Mass Storage 类的协议是通过发送 SCSI 命令来实现跟存储介质的数据交换,MSC 设备接收主机的 SCSI 命令后执行相应的操作,如果需要执行内存的读写则调用对应的内存读写驱动对内存进行访问,对于不同的存储介质存在不同的数据交换协议。

                                                           图 2.1 Mass Storage 基本框架

三、  Mass Storage 标准描述符

每个 USB 设备都包括有设备描述符、配置描述符、接口描述符、端点描述符等,用来描述 USB 设备的信息,Mass Storage 类的标准描述符如下所示:

  • 设备描述符

                                                          图 3.1 Mass Storage 设备描述符

  • 配置描述符

                                                   图 3.2 Mass Storage 配置描述符

  • 接口描述符

                                                          图 3.3 Mass Storage 接口描述符

  • 端点描述符

                                                      图 3.4 Mass Storage 端点描述符

四、Bulk-Only 传输协议(BBB 协议)

USB Mass Storage 类的传输协议主要包括以下几种,如下图所示,CBI 传输协议目前只用于 Full Speed 的软盘设备,该传输协议使用了三种端点进行数据交互,分别是 Control 端点、Bulk 端点、Interrupt 端点。Bulk-Only 协议是 CBI 协议的替代品,相比 CBI协议, Bulk-Only 协议只需要 Bulk 端点即可实现命令、数据、状态的传输,更加节省资源。

                                                            图 4.1 Mass Storage 传输协议

Bulk-Only 协议中规定了两个特殊 USB 类请求,分别是 Bulk-Only Mass Storage Reset 和 Get Max LUN。前者的作用是使 MSC设备复位到命令状态的请求,后者则是用于获取 MSC 设备最大逻辑单元数。

Bulk-Only Mass Storage Reset 类请求是通知 MSC 设备接下来的批量传输端点输出数据为 CBW (Command Block Wrapper) 命令块。Bulk-Only Mass Storage Reset 类请求的格式如下所示。

                           图 4.2 Bulk-Only Mass Storage Reset 类请求格式

Get Max LUN 类请求是主机请求 MSC 设备的最大逻辑单元数(LUN),该请求的格式如下图所示。

                                                 图 4.3 Get Max LUN 类请求格式

下图为 Bulk-Only 传输的 数据/命令/状态 三者间的传输流程。

                                     图 4.4 Bulk-Only 数据/命令/状态 传输流程

 

Bulk-Only 协议中规定命令的传输使用 CBW 的数据格式,该数据格式定义如下:

                                                                   图 4.5 CBW 数据格式

关于 CBW 数据格式中各字段的定义如下:

字段

大小

说明

dCBWSignature

4 字节

CBW 的签名,用于验证该数据包是否是 CBW

dCBWTag

4 字节

CBW 标签,设备接收到 CBW 包后回复的 CSW 包中的 bCSWTag 应跟该标签一致

dCBWDataTransferLength

4 字节

主机期望通过 Bulk-In/Bulk-Out 端点传输的数据大小,如果该值为 0 则说明 CBW 和 CSW之间没有数据的传输

bmCBWFlags

1 字节

该域用来标识数据的传输方向,Bit 7 为 1 时传输方向为 Device->Host,相反为 Host->Device

bCBWLUN

4 位

该域为该 CBW 的目标逻辑单元

bCBWCBLength

4 位

该域标识 CBWCB 域的长度,单位为字节

CBWCB

最大 16 字节

命令块的内容

                                                表 4.1 CBW 各字段描述



Bulk-Only 协议中规定状态的传输使用 CSW 的数据格式,该数据格式定义如下:


                                                                   图 4.6 CSW 数据格式

关于 CSW 数据格式中各字段的定义如下:

字段

大小

说明

bCSWSignature

4 字节

CSW 的签名,用于验证该数据包是否是 CSW

bCSWTag

4 字节

CSW 标签,该域的值跟之前所接收的 CBW 中的 bCBWTag 对应

bCSWDataResidue

4 字节

该字段表示 CBW 期待传输的数据大小跟实际传输的数据大小之间的差值

bCSWStatus

1 字节

该字段指示命令的执行状态,具体状态的定义如下

                                                             表 4.2 CSW 各字段描述

                                                           图 4.7 命令执行的状态描述

五、常见 SCSI 命令

SCSI 命令通常使用 6 字节的命令描述块和 10 字节的命令描述块两种,具体如下图所示:

 
                                                     图 5.1 SCSI 6 字节命令描述块


                                                       图 5.2 SCSI 10 字节命令描述块

如下表所示为常见的 SCSI 命令介绍。

SCSI 命令名称

命令代码

描述

Test Unit Ready

0x00

查询设备是否准备好

Request Sense

0x03

主机请求设备返回执行结果、获取状态信息

Inquiry

0x12

获取设备信息

Mode Sense(6)

0x1A

向主机传输参数,采用 6 字节命令块

Mode Sense(10)

0x5A

向主机传输参数,采用 10 字节命令块

Read Capacity(10)

0x25

读取设备容量

Read(10)

0x28

读取设备的数据

Write(10)

0x2A

向设备写入数据

Read Format Capacity

0x23

查询当前容量及可用空间

Mode Select(6)

0x15

允许主机对外部设备设置参数,采用 6 字节命令块

Mode Select(10)

0x55

允许主机对外部设备设置参数,采用 10 字节命令块

Prevent/Allow Medium Removal

0x1E

禁止/允许存储介质移动

Start/Stop Unit

0x1B

启动/停止存储单元电源

Report LUNs

0xA0

索取设备的 LUN 数量和 LUN 清单

Verify

0x2F

在存储中验证数据

                                                       表 5.1 常见的 SCSI 命令

六、参考资料

  1. 《Mass Storage Bulk Only 1.0》, https://www.usb.org/document-library/mass-storage-bulk-only-10
  2. 《Mass Storage UFI Command Specification》, https://www.usb.org/document-library/mass-storage-ufi-command-specification-10
  3. 《Mass Storage Class Specification Overview》, https://www.usb.org/document-library/mass-storage-class-specification-overview-14

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论