参见:USB Mass StorageClass Bulk-Only Transport

1 规范概述和范围

前提条件:熟悉USB协议规范和USB海量存储类规范概述。

本规范只描述块传输,也就是仅通过块类型(而不是控制或中断类型的端点)的端点传输命令、数据和状态。本规范仅使用默认的通道清除块端点上的STALL条件,发出相关的请求如下。本规范不需要使用中断端点。

本规范定义了逻辑单元,该逻辑单元都有共同的设备特性。尽管这些特性给类似于海量存储的设备提供拥有相同的USB接口描述符支持,但是它不能用于实现接口桥接设备。

2术语和缩写

Command Block Wrapper (CBW)

一个包含一个命令块和关联的信息的数据包

Command Status Wrapper (CSW)

一个包含一个命令块状态的数据包。

Data-In

从设备到主机的数据传输。

Data-Out

从主机到设备的数据传输。

Device Request

使用默认通道传输的从主机到设备的请求。

Phase Error

从设备返回的处理结果,在设备复位之前,后续的CBW是不确定的。

Processed

接收到数据,而且设备到主机端点的内部控制不再需要考虑。

Relevant

发送到主机的数据是有意义的。

Reset Recovery

一个错误恢复过程,主机可以给设备准备好下一个CBW。

3功能特点

3.1 Bulk-Only Mass Storage Reset (class-specificrequest)

该请求是复位海量存储设备和其相关的接口。

这个类-相关请求可以准备好设备,用于主机的下一个CBW传输。

主机使用默认通道发送该请求到设备。设备需要维护块数据的toggle比特和端点STALL条件(BOT复位也需要保持)。在复位完成之前,设备返回设备的状态为NAK。

在默认通道上发送块存储设备复位请求前,主机需要发送如下的请求道默认通道:

· bmRequestType: Class, Interface, host to device

· bRequest field set to 255 (FFh)

· wValue field set to 0

· wIndex field set to the interface number

· wLength field set to 0

3.2 Get Max LUN (class-specific request)

设备可能实现了几个共享设备特性的逻辑单元。主机使用bCBWLUN域来指示CBW的目标是设备的第几个逻辑单元。Get MaxLUN设备请求是确定设备所支持的逻辑单元数。设备上的逻辑单元数应该是从LUN 0到最大LUN 15(Fh)连续的。发送一个Get MaxLUN设备请求,主机需要发送如下的命令到默认通道。

· bmRequestType: Class, Interface, device to host

· bRequest field set to 254(FEh)

· wValue field set to 0

· wIndex field set to the interface number

· wLength field set to 1

设备返回一个字节的数据来包含设备所支持的最大LUN数。比如说,如果设备支持4个LUN,LUN从0 到3,返回值是3。如果设备没有LUN,返回值是0。主机不能发送CBW到一个不存在的LUN。

在不支持多LUN的设备上发送Get MaxLUN请求,可能返回STALL。

3.3主机/设备数据包传输顺序

主机在读(DATA-IN)或写(DATA-OUT)数据前,必须先发送CBW,CSW命令在最后。主机需要在发送CBW前,发送数据读或CSW命令。过程:CBW à DATA IN/ DATAOUTàCSW。

如果dCBWDataTransferLength为0,设备和主机在CBW和CSW之间没有数据传输。

3.4 命令队列

主机在收到上一个CBW的CSW之前,不能发送CBW。如果主机连续发送了两个CBW,期间没有CSW或复位。设备响应第二个CBW是不确定的。

3.5 双向命令协议

在一个单独的命令中,该规范不支持双向数据传输。

4 标准描述符

设备支持如下几种标准USB描述符:

设备: 每个USB设备拥有一个设备描述符.

配置: 每个USB设备含有一个默认的配置描述符,该配置描述符至少支持一个接口.

接口: 设备支持至少一个接口,这里指海量数据接口. 有些设备支持其他的接口,提供其他的能力.

端点: 海量存储设备支持如下的端点,默认通道在所有的设备上都需要支持。

Bulk-In端点。

Bulk-Out端点。

其他类型的设备可能支持另外的端点,提供其他功能。主机使用第一个接口的Bulk-In和Bulk-Out端点。

字符串:设备支持唯一的串口数。

标准描述符的更详细的信息参考USB协议规范第9章,USB设备框架。

4.1 设备描述符

Table 4.1 - Device Descriptor

4.2 配置描述符

Table 4.2 - Configure Descriptor

4.3 接口描述符

每个设备至少含有一个接口描述符。海量存储设备只有一个接口描述符,该描述符的介绍如表4-3所示。

Table 4.3 - Bulk-Only DataInterface Descriptor

4.3 端点描述符

海量传输的数据接口含有3个端点,分别是默认端点、读取CSW状态或数据的Bulk-In端点和发送CBW或数据的Bulk-Out端点。其中默认端点对于所有的设备都一样,海量存储的Bulk-In和Bulk-Out 端点描述符的介绍分别如表4-4和4-5所示。

Table 4.4 –Bulk-In EndpointDescriptor

Table 4.5 - Bulk-Out EndpointDescriptor

5 命令/数据/状态协议

图1介绍了命令、数据和状态传输的数据流程。

Figure 1 - Command/Data/Status Flow

5.1 命令块包(CBW)

每个CBW通过Bulk-Out端点进行传输,每个CBW的长度是31字节。CBW的传输是小端格式。CBW个字节的定义如表5.1所示。

Table 5.1 - Command Block Wrapper

dCBWSignature:0x43425355

dCBWTag:

dCBWDataTransferLength:主机期望传输的数据长度。

bmCBWFlags: 主要定义数据的传输方向,由bit7定义(0–out,1-in),其他比特默认为0。

bCBWLUN: 逻辑单元号。

bCBWCBLength:CB的有效长度。

CBWCB:设备执行的命令块,这里是SCSI命令,一般是16字节。

5.2 命令传输状态包(CSW)

CSW用Bulk-In端点进行传输,其长度是13字节,用于表示CBW传输的状态。

Table 5.2 - Command Status Wrapper

dCSWSignature:0x53425355

dCSWTag:

dCSWDataResidue:

bCSWStatus: CBW传输的成功或失败状态。为0表示传输成功,非0表示传输失败。如表5.3所示。

Table 5.3 - Command Block StatusValues

5.3 数据传输条件

本节描述主机和设备如何保持同步。主机使用CBW的方向和长度域(dCBWDataTransferLength)进行传输。设备确定实际的传输方向和长度。设备用合适的CSW返回CBW的结果。

Figure 2 - Status Transport Flow

命令传输

主机通过Bulk-Out端点发送CBW到设备,每个CBW中包含一个命令块。正确传输情况下,设备使用ACK回复主机,在命令传输期间如果主机检测到STALL,主机需要执行复位恢复。

数据传输

主机根据方向决定发送或接收dCBWDataTransferLength长度的数据。在数据传输完成或报告错误之前,设备可能以STALL 端点的方式结束命令。

状态传输

CSW返回CBW传输的状态,通过Bulk-IN端点进行传输。CSW的长度为13字节。

复位恢复(Reset Recovery)

复位恢复,主机需要发送如下的命令:

(a) a Bulk-Only Mass Storage Reset

(b) a Clear Feature HALT to the Bulk-Inendpoint

(c) a Clear Feature HALT to the Bulk-Outendpoint

6 主机/设备数据传输

6.1 有效和有意义的CBW

6.2.1 Valid CBW

The device shall consider the CBW validwhen:

· The CBW was received after the device had sent aCSW or after a reset,

· the CBW is 31 (1Fh) bytes in length,

· and the dCBWSignature is equal to43425355h.

6.2.2 Meaningful CBW

The device shall consider the contents of a validCBW meaningful when:

· no reserved bits are set,

· the bCBWLUN contains a valid LUN supportedby the device,

· and both bCBWCBLength and the content ofthe CBWCB are in accordance with

bInterfaceSubClass.

6.2 有效和有意义的CSW

6.3.1 Valid CSW

The host shall consider the CSW validwhen:

· the CSW is 13 (Dh) bytes in length,

· and the dCSWSignature is equal to53425355h,

· the dCSWTag matches the dCBWTag fromthe corresponding CBW.

6.3.2 Meaningful CSW

The host shall consider the contents of the CSWmeaningful when:

either the bCSWStatus value is 00h or 01hand the dCSWDataResidue is less than or equal to

dCBWDataTransferLength..

or the bCSWStatus value is 02h.

6.3错误处理

设备对于主机的请求,在不能满足的情况下,返回STALL错误。

主机收到CSW是无效或无意义的,使用复位恢复。

6.4 错误类型

In every transaction between the host and thedevice, there are four possible classes of errors. These classesare not always independent of each other and may occur at any timeduring the transaction.

6.4.1 无效CBW

If the CBW is not valid, the device shall STALLthe Bulk-In pipe. Also, the device shall either STALL the Bulk-Outpipe, or the device shall accept and discard any Bulk-Out data. Thedevice shall maintain this state until a Reset Recovery.

6.4.2 设备内部错误

The device may detect an internal error for whichit has no reliable means of recovery other than a reset. The deviceshall respond to such conditions by: either STALLing any datatransfer in progress and returning a Phase Error status (bCSWStatus = 02h).

or STALLing all further requests on the Bulk-Inand the Bulk-Out pipes until a Reset Recovery.

6.4.3 Host/DeviceDisagreements

After recognizing that a CBW is valid andmeaningful, and in the absence of internal errors, the device maydetect a condition where it cannot meet the host’s expectation fordata transfer, as indicated by theDirection bit of thebmCBWFlags field and the dCBWDataTransferLength fieldof the CBW. In some of these cases, the device may require a resetto recover. In these cases, the device shall return Phase Errorstatus (bCSWStatus =02h). Details on which cases result inPhase Error vs. non-Phase Error status are given in 6.7 TheThirteen Cases.

6.4.4 命令失败

After recognizing that a CBW is valid andmeaningful, the device may still fail in its attempt to satisfy thecommand. The device shall report this condition by returning aCommand Failed status (bCSWStatus = 01h).

USB Mass Storage相关推荐

  1. USB Mass Storage大容量存储 The Thirteen Class章节的理解

    http://blog.csdn.net/xgbing/article/details/7002558 USB Mass Storage 6.7 The Thirteen Class章节的理解 Cas ...

  2. 如何实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write LinuxUSB MSC (Mass Storage Class) Driver Crif ...

  3. ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)

    ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...

  4. 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍

    USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...

  5. Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识

    第 2 章 USB Mass Storage大容量存储的基本知识 摘要 USB Mass Storage所对应的层次和要实现哪些东西: 图 2.1. USB Mass Storage Framewor ...

  6. USB Mass Storage协议

    简介 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个 ...

  7. usb mass storage设备枚举过程

    8月份从PC开发岗位换到底层嵌入式驱动开发来了.接到的第二个活,是在高通8650平台上实现驻留支持SCSI指令.8650平台是高通推出的EVDO RevB的双核平台,和之前6085相比性能更强,软件结 ...

  8. USB Mass Storage Class

    编辑博客时,回车的意思是切换段落,shift+回车才是换行. SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEa ...

  9. USB mass storage驱动分析

    1. USB驱动代码在/drivers/usb/gadget下,有文件:android.c,其他驱动文件f_adb.c,f_mass_storage.c:其中android.c 依赖于f_adb.c ...

最新文章

  1. tensorflow2.0中dataset API 总结
  2. 计算机桌面文件夹删除如何找回,电脑删除文件如何恢复 误操作的一剂后悔药...
  3. 其他综合-跳板机jumpserver的安装
  4. .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
  5. python使用rabbitmq阻塞_python – Celery/RabbitMQ unacked消息阻塞队列?
  6. php正则表达式经典实例,php半小时精通正则表达式
  7. python 模块路径查找 及 添加
  8. When is nearest neighbor meaningful
  9. linux常用命令_linux常用命令
  10. 基于R语言时间序列的平稳时间序列模型预测
  11. Microsoft Visual Studio 2010(vs2010) 中文版安装
  12. 滤波器频率响应 matlab,滤波器频率响应与实际滤波情况不符合
  13. actived生命周期_vue组件的生命周期和执行过程
  14. Ansys Lumerical | 铌酸锂热调制波导仿真
  15. 计算机网络基础实验报告--利用数据包嗅探器Wireshark捕获数据包实验
  16. MS SqlServer海量数据分页存储过程收集
  17. pandas dataframe query()
  18. 可折叠的table表格
  19. 如何通过命令提示符进入MySQL服务器
  20. 希腊神话中神的命名树

热门文章

  1. 网易游戏回应裁员 10%;字节跳动秘密研发手机;iOS 13 beta 5 发布 | 极客头条
  2. 常见六大 Web 安全攻防解析 | 技术头条
  3. 坐地起价?三星首款折叠屏手机 1.3 万起!
  4. 前端薪资竟最差?程序员跳槽时如何才能谈个好价钱
  5. 比特币价格会达到10万美元?有人用蒙特卡罗方法预测了一下
  6. socket编程之回声服务器
  7. 第 12 章 组合模式
  8. linux电脑内存查看工具,Linux内存查看工具---Smem
  9. android 日历图,Android中的自定义日历视图
  10. 怎么重置unity界面_请问itween如何重置?