基于USB的数据传输规范和最新的TYPE-C/USB数据传输接口,伴随着USB技术的发展,当前的USB及其子规范分类如下:
USB协议的基础,从最初的USB1.0到最新的USB4版本。
USB协议是所有USB设备数据传输的基础。
USB中文网含有大量的USB规范介绍:
- USB2.0规范:http://www.usbzh.com/article/forum-11.html
- USB3.2规范:http://www.usbzh.com/article/forum-9.html
- USB百科 :http://www.usbzh.com/article/forum-2.html
从以上的文章可以帮助大家快速的学习和了解USB规范和基础。
- HID规范:http://www.usbzh.com/article/forum-5.html
- 本人收录的HID报告描述符大全:http://www.usbzh.com/article/forum-10.html
UVC全称USB video class,主要用于USB视频传输领域内。常见的UVC设备就是USB摄像头。
UVC支持三个版本,分别为UVC1.0,UVC1.1和UVC1.5,本站基于UVC1.5规范,并兼顾UVC1.0和UVC1.1,做了大量的调试分析笔记:
- UVC规范:http://www.usbzh.com/article/forum-12.html
- UVC调试笔记:http://www.usbzh.com/article/forum-6.html
UAC规范全称USB AUDIO class,使用USB音频设备,如USB麦克风,USB音箱/USB耳机等音频设备。
UAC规范在3个版本,UAC1.0,UAC2.O和UAC3.0,比较常用的是UAC1.0,UAC2.0在windows10操作系统才开始支持。
- UAC规范(USB音频)http://www.usbzh.com/article/forum-1.html
- UAC设备实例分析 http://www.usbzh.com/article/forum-7.html
- USB-C/TYPE-C http://www.usbzh.com/article/forum-41.html
- DisplayPort http://www.usbzh.com/article/forum-39.html
- USB供电PowerDelivery http://www.usbzh.com/article/forum-40.html
- USB数据线颜色及usb数据线接法图解和USB接口引脚接线定义 http://www.usbzh.com/article/detail-206.html
CDC全称Communication Device Class。
CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。根据CDC类所针对通信设 备的不同,CDC类又被分成以下不同的模型:USB传统纯电话业务(POTS)模型,USB ISDN模型和USB网络模型。其中,USB传统纯电话业务模型,有可分为直接线控制模型(Direct Line Control Model)、抽象控制模型(Abstract Control Model)和USB电话模型(USB Telephone Model)。
我们平常使用的USB转串口就是使用的CDC协议。
CCID全称:Integrated Circuit(s) Cards Interface Device。该标准是由几大国际级IT企业共同制定的一个标准,它提供了一种智能卡读写设备与主机或其它嵌入式主机实现相互通讯的功能。
BOT (Bulk-Only Transport),诞生于1999年,专为USB 1.1所设计,至今最快的USB 3.1都可向下兼容这个基本的BOT传输协议。BOT传输用于USB大容量存储。
UASP (USB Attached SCSI Protocol),简称UAS,与USB 3.0一同诞生于2008年。BOT传输用于USB大容量存储。
- BOT传输协议和UASP传输协议 http://www.usbzh.com/article/detail-354.html
SCSI与BOT和UASP关系
BOT是基于USB数据包传输的基础上,为了配合SCSI协议,专门为大容量存储设备量身打造,在USB和SCSI中间又添加了一层协议(某软件大佬曾说过没有什么结构是分层解决不了的。。)
高度概括一下BOT的内容就是:
- 1、一次传输由CBW开始,到CSW结束,可以有或者没有DATA阶段。
- 2、USB在刚上盘的阶段会进行控制传输,给SCSI获取一些信息,其中包括判断是否为BOT模式。
UASP全称USB Attached SCSI Protocol,从名字就能可以看出其针对性。UASP相比BOT最大的改变就是命令可以并行的发送,类似SATA的NCQ功能。另外支持UASP的Host都使用了单独的控制芯片,不会消耗CPU资源。关于UASP相关的协议文档是 USB Attached SCSI -2
尽管从BOT换到了UASP,但是SCSI协议的操作还是基本保持一致的,除了多了几个公有命令要处理。
最后总结一下就是,最底层数据传输使用的USB,功能实现使用的SCSI,为了使USB和SCSI能衔接在一起,添加了BOT和UASP.
其数据传输过程如下:
u盘插入,主机得到U盘描述符后识别出U盘是支持bulk-only的大量存储设备。于是两者就通过bulk端点进行通信,主机和设备的通信过程即传输定义好的数据包的过程。主要的数据包有两个:
- CBW—-Command Block Wrapper(命令块包) ;
- CSW—-Command Status Wrapper(命令执行状态包)
过程如下:
1、主机发送CBW给设备,告诉设备要进行数据传输。通过bulk-out端点发送。
2、设备收到CBW包后进行解析,如果CBW包合法并且有意义的话,不合法的话,设备会中止bukl-in管道,直到主机reset。否则设备从bulk-in端点发送一个CSW包给主机,响应主机的要求。
3、主机收到CSW后同样进行解析,如果CSW不合法或无意义,则主机可能会进行reset recovery。否则便开始传输数据给U盘或从U盘传输数据。
在Bulk-Only的命令块包(CBW)中,有一段CBECB内容,它就是SCSI命令块描述符。其内容如下:
- Operation Code:是SCSI命令操作代码。
- Logical Block Address:逻辑块地址,对U盘而言应是扇区。前面已经讲过:通用海量存储设备是一个基于块/扇区存储的设备,因此在SCSI中要提供这个参数是很显然的。
- transfer length:为要传送的扇区数
SCSI中直接存取类型的存储介质的传输命令有很多,如:
- INQUIRY:其操作码为12H
- Test Unit Ready:其操作码为00H
- Format Unit:其操作码为04H
Bulk-Only Transport即存储设备和其它的普通设备类似,也有一些通用的描述符,如设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。
BOT大容量存储设备没有其它特殊的描述符。
一个标准的USB支持BOT的大容量设备描述符布局如下:
BOT大容量存储设备类型是接口描述符中定义的,所以在其设备描述符中,bDeviceClass、bDeviceSubClass、bDeviceProtocol的值必须为0。
iSerialNumber字符串的定义需要按照相关的格式定义(windows验证不严格);这个格式是序列号的字符串最后12字符必须为十六进制的数据位。
如本人手中的金士顿U盘的设备描述符如下:
配置描述符和标准的配置描述符保持一致。
bInterfaceSubClass支持的命令集

bInterfaceProtocol支持的协议

端点描述符定义一对输入输出端点,端点类型为批量传输类型
字符串描述符除了设备序列号有特殊的要求外,其余可可自定义.
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/9549.html