MSC(USBMassStorage)介绍之一:描述符/类请求/命令数据状态协议

原创 嵌入式Lee 2025-04-27 16:26

一. 前言

    本文来分享MSC(USB Mass Storage)设备的描述符,类请求,命令数据状态协议。以下都是基于Bulk-Only传输方式(BOT),因为这种方式是最普遍使用的方式。

参考文档

Universal Serial Bus Mass Storage Class Bulk-Only Transport》描述:描述符,类相关请求,CBW,CSW等内容。

Universal Serial Bus Mass Storage Class Specification Overview》描述:各种编码信息,Subclass编码,Protocol编码,类相关请求Request编码,类相关描述符编码.

Universal Serial Bus Mass Storage Specification For Bootability Revision 1.0 October 25, 2004》描述:支持Boot设备的,CBW中的CBWCB内容,INQUIRY,READ(10),WRITE(10)等命令。

Universal Serial Bus Mass Storage Class UFI Command Specification Revision 1.0 December 14, 1998:上面一个文档介绍的是Boot MSC设备支持的一些命令,本文档介绍的是所有的命令。常见命令参考二者之一即可。

.描述符

    本规范没有定义特定于类的描述符。使用以下标准描述符。

参考文档《Universal Serial Bus Mass Storage Class Bulk-Only Transport Revision 1.0 September 31, 1999

2.1设备描述符

    bDeviceClass,bDeviceSubClass,bDeviceProtocol都为0,即在接口描述符中指定设备类和子类,而不是在设备描述符中。

还有就是iSerialNumber必须要有,见后面的字符串描述符说明。

2.2配置描述符

配置描述符没什么特殊的

2.3接口描述符

该设备应支持至少一个接口,此处称为批量数据接口。仅包含批量数据接口的设备使用三个端点(控制端点,Bulk-IN,Bulk-Out)。

bDeviceClass

https://www.usb.org/defined-class-codes

0x08 MASS STORAGE Class.

bDeviceSubClass:

在《Universal Serial Bus Mass Storage Class Specification Overview》中定义:

其中0x06 对应SCSI 

bDeviceProtocol:

在《Universal Serial Bus Mass Storage Class Specification Overview》中定义:

其中0x50 BULK-ONLY TRANSPORT 

其中CBI只能用于全速的软盘驱动,不得用于高速设备或软盘驱动器以外的设备。不建议在任何新设计中使用CBI

2.4端点描述符

MSC设备应支持至少三个端点:控制、批量输入和批量输出。控制端点无需描述,所以只需要Bulk-InBulk-Out描述符。

Bulk-In端点描述符

用于IN数据和CSW状态

Bulk_out端点描述符

用于OUT数据和CBW命令

2.5字符串描述符

设备描述符的iSerialNumber字段,为包含序列号的字符串描述符的索引。

序列号应至少包含12位有效数字,表示为UNICODE字符串,所以字符串至少为2+2x12=26字节。序列号的最后12位数字对于每个USB idVendoridProduct对都是唯一的。

主机可以通过连接16idVendor16idProduct和由iSerialNumber索引的字符串描述符的最后12个字符表示的值来生成全局唯一标识符。

对应的字符串格式为注意是UNICODE编码,12位数字一个数字对应两个字节。

字符串只能包含以下

0030h ~ 0039h "0" ~ "9"

0041h ~ 0046h "A" ~ "F"

.类相关请求

类相关请求发送的目的都是接口。

参考文档《Universal Serial Bus Mass Storage Class Bulk-Only Transport Revision 1.0 September 31, 1999

请求的bRequest 在《Universal Serial Bus Mass Storage Class Specification Overview》中定义,如下:

3.1 Bulk-Only Mass Storage Reset


此请求用于重置大容量存储设备及其相关接口

在发送CBW 之前必须先进行该操作,该请求通过控制端点发送,

设备的Bulk端点的TOGGLE状态和STALL状态不受该RESET影响。

设备对该请求的状态阶段进行NAK,直到完成RESET状态

该请求格式如下

• bmRequestType: 接口主机到设备.

• bRequest =255 (FFh)

• wValue= 0

• wIndex =接口号

• wLength =0

3.2 Get Max LUN

设备可以多个逻辑单元,共享设备共同的特性。主机通过CBW中的bCBWLUN字段指定发给哪一个逻辑单元。该请求用于获取设备最大的LUN数。设备上的LUN0开始编号,最大到15

请求格式如下:

• bmRequestType: 接口主机到设备.

• bRequest =254 (FEh)

• wValue=0

• wIndex =接口号

• wLength =1

设备返回一个字节的数据,其中包含设备支持的最大LUN编号(注意不是最大LUN数而是编号,编号是从0开始的)。如果设备支持四个LUN,则LUN的编号将从03,返回值为3。如果没有LUN与设备关联,则返回的值应为0。主机不得向不存在的LUN发送CBW

不支持多个LUN的设备可能会STALL响应该命令

四. Command/Data/Status Protocol命令/数据/状态协议

参考文档《Universal Serial Bus Mass Storage Class Bulk-Only Transport Revision 1.0 September 31, 1999

MSCBulk-Only Transport方式,数据读写,分为三个步骤,即命令-数据-状态.

数据流如下

4.1 Command Block Wrapper (CBW)


主机应在相关数据OUT之前发送CBW,设备应在相关CBW之后和相关CSW之前发送数据IN

主机可以在发送相关联的CBW之前请求数据INCSW

如果dCBWDataTransferLength为零,则设备和主机不得在CBW和相关CSW之间传输数据。

在主机收到任何未完成的CBWCSW之前,主机不得发送新的CBW。如果主机在中间没有CSWRESET的情况下发出两个连续的CBW,则设备对第二个CBW的响应是不确定的。

本规范不支持单个命令中进行双向数据传输。

CBW用于传达要做什么;

CBW从数据包边界开始(后面的数据,CSW也一样);

CBW以短包结束,传输31个字节;

CBW按照小端,低字节在前传输。

CBW内容的具体含义如下

dCBWSignature:

固定为43425355h(小端),用于标志CBW

dCBWTag:

主机发送的CBW标签。设备在相应的CSWdCSWTag字段中将此字段的内容回传给主机。这样可以关联CBWCSW,知道CSW对应的是哪个CBW

dCBWDataTransferLength:

在执行此命令期间,主机希望在批量输入或批量输出端点上传输的数据字节数。如果此字段为0,则设备和主机不在CBW和相关CSW之间传输数据,并且设备应忽略bmCBWFlags中方向位的值。

bmCBWFlags:

 bit7: 0:out 即主机到设备 1:IN即设备到主机。

    bit[6:0]: 主机设置为0

bCBWLUN:

命令块要发送到的设备逻辑单元号(LUN)。对于支持多个LUN的设备,主机将此命令块所寻址的LUN放入此字段。否则,主机将此字段设置为零

bCBWCBLength:

CBWCB的有效长度(以字节为单位)。定义了命令块的有效长度。合法值是116(01h10h)

CBWCB:

设备要执行的命令块。设备将此字段中的第一个字节解释为由bInterfaceSubClass标识的命令集定义的命令块。如果设备支持的命令集使用长度小于16(10h)字节的命令块,则应首先传输有效字节,从偏移量15(Fh)处的字节开始。设备忽略超出偏移字节(15+bCBWCCBLength-1)CBWCB字段的内容。

设备对主机发过来的CBW先进行是否有效判断,条件如下(同时满足):

lCBW是在设备发送CSW之后或reset之后接收的

l收到的CBW31字节

ldCBWSignature 43425355h

然后进行是否有意义判断,条件如下(同时满足):

l所有保留Reserved位为0

lbCBWLUN是有效的LUN

lbCBWCBLengthCBWCB的内容都符合bInterfaceSubClass

4.2 Command Status Wrapper (CSW)


CSW从数据包边界开始;

CSW短数据包结束,传输13(0Dh)字节;

CSW按照小端,低字节在前传输。

CSW内容的具体含义如下

dCSWSignature:

固定为53425355h(小端),用于表示CSW

dCSWTag:

设备将此字段设置为对应CBWdCBWTag

dCSWDataResidue:

对于OUT,设备在此报告dCBWDataTransferLength中所述的预期数据量与设备处理的实际数据量之间的差异。

对于IN,设备在此报告dCBWDataTransferLength中所述的预期数据量与设备发送的实际数据量之间的差异。

简而言之就是剩余未处理的数据

dCSWDataResidue超过dCBWDataTransferLength即最多是设备不处理或者不发送数据,此时dCSWDataResidue=dCBWDataTransferLength

bCSWStatus:

用于表示命令的成功或失败。如果命令成功完成,设备应将此字节设置为零。

非零值表示命令执行过程中出现故障

bCSWStatus含义如下:

主机对设备发过来的CSW先进行是否有效判断,条件如下(同时满足):

l收到的CSW13字节

ldCSWSignature=53425355h

ldCSWTag=dCBWTag

然后进行是否有意义判断,条件如下(任一满足):

lbCSWStatus值为00h01hdCSWDataResidue小于或等于dCBWDataTransferLength

lbCSWStatus = 02h.

4.3 数据传输条件


主机和设备如何保持同步。

主机使用方向位和dCBWDataTransferLength字段指示CBW中的预期传输。

然后,设备确定实际方向和数据传输长度

设备按照6-主机/设备数据传输中的定义进行响应,通过传输数据、指定STALL端点并返回相应的CSW

命令传输:

主机通过批量输出端点发送31字节的CBW

设备接收CBW并进行ACK表示CBW的运输成功

如果主机在命令传输期间检测到批量输出端点的STALL,主机应响应Reset Recovery

数据传输:

所有数据传输应从数据包边界开始。

主机按照dCBWDataTransferLengthDirection位的指定,进行OUT或者IN传输

为了在数据传输完成之前报告错误并最大限度地提高数据完整性,设备可以通过STALL端点来终止命令

状态传输:

主机通过IN13字节CSW, 主机处理流程如下

4.4 主机错误处理


如果主机收到无效的CSW,则主机该要执行重置恢复Reset Recovery。如果主机收到无意义的CSW,则主机可以执行重置恢复Reset Recovery但是如果所是CSW中的bCSWStatus=0x02表示Phase Error这种无意义情况主机要进行Reset Recovery 处理。

Reset Recovery 处理过程如下:

1.Bulk-Only Mass Storage Reset

2.Bulk-In端点Clear Feature

3.Bulk-Out端点Clear Feature

4.5 设备错误处理


设备通过STALL对应管道来中止传输。但是总线上是不是出现STALL也要看设备准备STALL时刚好主机是否有继续请求数据。

如果CBW无效,设备对后续的Bulk-IN进行STALL

设备对后续的Bulk-Out进行STALL或者接收但是丢弃

上述状态保持到主机进行Reset Recovery

CBW无意义时设备如何响应未定义。

设备对于内部错误

STALL后面任意的INOUT传输并在CSW中返回Phase Error (bCSWStatus = 02h);

或者STALL后面所有的INOUT传输直到Reset Recovery

在识别出CBW有效且有意义后,设备仍可能无法满足命令。设备应通过返回命令失败状态(bCSWStatus=01h)来报告此情况。

在识别出CBW有效且有意义后,在没有内部错误的情况下,设备可能会检测到无法满足主机对数据传输期望的情况,如bmCBWFlags字段的Direction位和CBWdCBWDataTransferLength字段所示。在某些情况下,设备可能需要重置才能恢复。在这些情况下,设备应返回相位误差状态(bCSWStatus=02h)。关于哪些情况导致相位错误与非相位错误状态的详细信息,十三种情况如下

上表按照列看,分三种情况

1~3

Hn, 主机设置dCBWDataTransferLength=0,即不期望后续传输数据.

一般要求

方向位的值不应影响这些情况的结果

对于主机要求如下

对于设备要求如下

4~8

dCBWDataTransferLength不为零且方向位为1(数据输入)时,表示主机期望从设备接收数据。

对于主机要求如下

对于设备要求如下

9~13

dCBWDataTransferLength不为零且方向位为0(数据输出)表示主机希望向设备发送数据。

一般要求

主机不得发送零长度的数据包

对于主机要求

对于设备要求

四. 总结    

    以上分享了MSC(USB Mass Storage)设备的描述符,类请求,命令数据状态协议。可以看到MSC设备其实是比较简单的,从描述符和交互来说都比较简单清晰,不像UVC,UAC等有非常多的类相关的请求。











评论
  • 公司简介:致力于解析非结构化数据的 AI 企业Cinnamon AI 是一家全球性的人工智能技术公司,核心产品聚焦于处理非结构化数据,如电子邮件、语音记录和视频内容。他们提供的 AI 平台,能够帮助客户从海量数据中提取有价值的信息,提升业务效率。项目挑战:多云部署下的 CI/CD 持续优化难题在实际开发中,Cinnamon AI 面临以下几大挑战:需同时支持 AWS、Google Cloud Platform 和 Azure 等多个云平台,以及内部部署版本;希望持续缩短开发周期,提高产品更新频率
    艾体宝IT 2025-05-16 09:31 99浏览
  •   全球仿真软件开发代表性企业解析(按领域分类)   仿真软件开发领域覆盖多行业与技术方向,以下按领域梳理国内外具有代表性的企业及其核心特点:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在仿真软件,教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   
    华盛恒辉l58ll334744 2025-05-16 10:37 107浏览
  • 2025 年 5 月 16 日讯,英伟达首席执行官黄仁勋的专机于北京时间 13:29 抵达中国台北松山机场,其此行引起了广泛关注。黄仁勋此番赴台,主要是为了参加即将于 5 月 20 日至 23 日举行的台北电脑展(Computex 2025),他将在 19 日上午进行主题演讲。此次演讲备受期待,市场猜测其可能会宣布英伟达与富士康、广达等中国台湾地区 AI 服务器公司达成的更多合作,进一步推动 AI 技术的发展和应用。此外,据市场消息,黄仁勋将于 17 日邀请供应链伙伴聚餐,鸿海董事长刘扬伟、纬创
    鲜橙财经 2025-05-16 14:00 139浏览
  •   北京仿真软件开发代表性企业解析   北京作为国内仿真技术创新高地,集聚多家深耕细分领域的领先企业,其技术布局与行业适配性各具特色。以下为核心企业的优势解析及选型参考:   一、华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,
    华盛恒辉l58ll334744 2025-05-16 16:00 125浏览
  •   全球仿真软件头部企业核心能力与选型指南   仿真软件行业的领先企业因技术路径和行业聚焦不同形成多元格局,以下从技术能力、市场地位及行业适配性角度,解析全球范围内具有标杆意义的代表性企业:   华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽
    华盛恒辉l58ll334744 2025-05-16 11:13 120浏览
  •   仿真软件开发领域代表性企业概览   在仿真软件开发领域,众多企业以技术特色与行业深耕为核心竞争力,形成差异化布局。以下梳理国内外代表性企业及其核心业务方向:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。
    华盛恒辉l58ll334744 2025-05-16 10:51 113浏览
  • 公司简介:Ping Identity 是谁?Ping Identity 是全球领先的身份与访问管理(IAM)解决方案提供商,致力于帮助企业安全管理用户身份、控制应用和资源的访问权。作为行业先驱,Ping Identity 的客户遍布全球,其产品广泛应用于金融、医疗、政府等对安全要求极高的行业。然而,作为一家技术驱动型企业,他们同样面临来自软件供应链的安全挑战,特别是在广泛采用开源组件的背景下,如何实现自动化安全管理、降低法律风险并保障客户数据的安全,成为企业可持续发展的关键。挑战:如何保障应用安
    艾体宝IT 2025-05-16 09:35 115浏览
  • 一、芯片概述:功能与应用场景WTR096录音语音芯片,是一款高性价比、低功耗的语音处理解决方案,专为需要灵活录音与播放功能的智能设备设计。其核心优势在于支持多段录音、内置存储扩展、外挂Flash适配,可广泛应用于智能玩具、家用电器(如语音闹钟、门铃)、工业设备提示器、安防告警系统等领域。二、核心参数与技术特性1. 多段录音能力:灵活应对场景需求WTR096支持最大10段独立录音,用户可通过指令或按键切换不同录音片段。例如:智能门锁可分别录制“欢迎回家”“密码错误”等多段提示音;工业设备可分段存储
    广州唯创电子 2025-05-16 09:04 107浏览
  • 在现代影像技术的快速发展下,动态范围(Dynamic Range)成为评估影像质量的重要指针之一。无论是无人机在高空拍摄的画面、工作用相机在不同光线条件下的成像表现、还是随身记录仪在运动过程中的稳定录像,「动态范围」的数值高低直接影响画面的清晰度与细节还原能力。然而,拍摄环境中的极端条件,如耀眼的阳光、深沉的阴影或快速变化的光线,都对产品的影像拍摄提出了严峻的挑战。技术难题:不同环境下对影像设备的质量影响本次分享一家网络监控摄影机(Network Cameras) 制造厂商,经常收到客诉提到:在
    百佳泰测试实验室 2025-05-16 14:43 122浏览
  • FM(RDS) 与 DAB 是车用音响领域常见的两种广播接收方式。随着科技的进步,DAB 作为数字音频传输的代表,逐渐受到更多关注。FM(RDS)属于传统的调频广播,透过调变载波的频率来传送声音讯号。RDS(Radio Data System) 则是FM广播的一种辅助技术,可以在FM讯号中夹带额外的文字信息,例如电台名称、节目类型、交通讯息等。DAB(Digital Audio Broadcasting)数字音频传输(DAB)是透过数字化处理广播音频讯号的传输,音质较 FM 清晰,此外,除了一般
    百佳泰测试实验室 2025-05-16 11:06 129浏览
  •   全球仿真软件头部企业核心实力与行业地位解析   仿真软件行业的竞争格局随技术迭代和市场需求动态演变,以下从技术优势、行业应用等维度,梳理全球范围内具备标杆意义的企业:   1. 华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP
    华盛恒辉l58ll334744 2025-05-16 11:37 113浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦