===================基础知识==============

相关定义与缩写:

  USB(Universal Serial Bus)通用串行总线, 采用4线电缆,其中两根是用来传送数据的串行通道,另外两根为下游(DOWN stream) 提供电源(一个供电,一个接地);USB 3.0 拥有9个引脚(另外4个共给SuperSpeed);USB3.1 Type-C 拥有24个;

   HID全称:human input device,主要实现的实现的是通过USB设备实现人机交互。如我们常用的USB键盘,USB鼠标等。HID规范定义了大量的HID设备,这些都是通过一个叫做报告描述符来进行设备类型和数据格式的描述上报的。

  UVC全称USB video class,主要用于USB视频传输领域内。常见的UVC设备就是USB摄像头。

  UAC规范全称USB AUDIO class,使用USB音频设备,如USB麦克风,USB音箱/USB耳机等音频设备。

  CDC全称Communication Device Class。它是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企业共同制定的一个标准,它提供了一种智能卡读写设备与主机或其它嵌入式主机实现相互通讯的功能。

  MTP:媒体传输协议(英语:MediaTransferProtocol,缩写:MTP)是一个基于图片传输协议(PictureTransferProtocol,PTP)的自定义扩展协议。USB开发者论坛在2008年5月将MTP标准化为一个成熟的USB类。自此以后MTP成为PTP的官方扩展,两者拥有相同的类代码。

  SCSI小型计算机系统接口(Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。

  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大容量存储。

  UASP全称USB Attached SCSI Protocol,从名字就能可以看出其针对性。UASP相比BOT最大的改变就是命令可以并行的发送,类似SATA的NCQ功能。另外支持UASP的Host都使用了单独的控制芯片,不会消耗CPU资源。

  OHCI,Open Host Controller Interface,是支持USB1.1的标准,但它不仅仅是针对USB,还支持其他的一些接口,比如它还支持Apple的火线(Firewire,IEEE 1394)接口。与UHCI相比,OHCI的硬件复杂,硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单。主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控。

  UHCI,Universal Host Controller Interface,是Intel主导的对USB1.0、1.1的接口标准,与OHCI不兼容。UHCI的软件驱动的任务重,需要做得比较复杂,但可以使用较便宜、较简单的硬件的USB控制器。Intel和VIA使用UHCI,而其余的硬件提供商使用OHCI。

  EHCI,Enhanced Host Controller Interface,EHCI定义了USB 2.0的主机控制器的规范,定义了USB 2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。

  xHCI 即Extensible Host Controller Interface,xHCI是针对的USB 3.0规范。也是定义了USB 3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。。xHCI 支持所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed)

USB总线标注相关信息:

  低速(halfSpeed) 1.5Mbps 和全速率(fullSpeed) 12Mbps;

  USB 2.0 支持高速率(highSpeed) 480Mbps;

  USB3.0 (super Speed) 5Gbps

  USB4.0 : 40Gbps

USB 接口: 

 

 雷电协议从雷电三开始使用type c接口,这个type c接口在支持usb协议的基础上增加了对雷电协议的支持,雷电协议的传输速率极快,可以达到40g比特每秒。它不仅可以拓展出相当多的接口,还能连接高速固态硬盘、高分辨率的显示器,甚至是外接一张显卡。雷电的出现也在个人电脑领域逐渐代替了火线接口(IEEE-1394)不过雷电是英特尔牵头的协议,雷电3免费,但是雷电4需要收取授权费用.

支持雷电协议的设备价格比同类usb设备就要贵很多,好在英特尔将雷电3的相关技术贡献给了usb标准,使得usb4开始拥有与雷电几乎一致的特性。

 

 USB 版本 与 标志: 

 

 USB 物理结构:

USB 拓扑结构:主机端提供USB根集线器,USB根集线器可外接USB外设,也可的外接USB的集线器HUB,用于拓展USB端点接口,拓展的USB集线器上的端口也可以外接USB设备。使用这种方式可实现USB设备的层层拓扑连接。不过这种拓扑关系最大的深度为7。一个USB主控制器最多可接127个设备,这是由数据包中的7位地址位决定的,

 

 在USB2.0规范中,定义了USB设备与集线器最大可以级联7层(包括根集线器),即根集线器之设备之间最多有5个继集线器。

 

 

 USB 基本传输模式:

USB 支持四种基本的数据传输模式:分别是控制传输(Control Transfer)、中断传输(Interrupt Transfer)、批量传输或叫块传输(Bulk Transfer)、实时传输或叫同步传输(Isochronous Transfer).

控制传输: 支持外设 与 主机之间的控制,状态,配置等信息的传输,为外设 与 主机之间提供一个控制通道。每种外设都支持控制传输类型,这样外设 与 主机之间可以传送配置 与 命令、状态信息;

中断传输:  类似游戏手柄,鼠标 和 键盘等输入设备,这些设备与 主机之间的数据传输量小,无周期性,但是对响应时间敏感,要求马上响应;

数据块(bulk)传输: 是为了支持在某些不确定的时间内进行大量的数据通信, 支持打印机、数码相机 等外设,传输数据量大,USB在满足带宽情况下才会进行该类型数据传输;

等时(Isochronous)传输 或 同步传输:是为支持某些对时间要求很高、数据量很大应用要求而提出的,使用这种传输类型的设备有麦克风、调制解调器、音频设备等。为了完成实时传输,总线必须事先提供足够的带宽。 支持周期行,有限的时延 和 带宽 且数据传输速率不变的外设 与 主机之间的数据传输。该类型无差错校验,所以不能保证正确的数据传输;

 

同时USB 还实现设备供电需求,越来越多的电子设备使用USB 线缆供电,各家也基于USB 标注研发除了自己快充方案,比如高通qc, 联发科pe, oppo的vooc, 华为的super charge; 

现在统一的USB 快充标准,USB-PD(Power delivery) 协议.

 

USB控制器及分类:

  USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。

 

 

USB设备的枚举过程分析:

USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend)).

  当一个USB设备被接入USB集线器端口后,USB设备开始被枚举,过程大概如下:

1.主机集线器检测到新设备

主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察

2.主机发送GET_STATUS请求

每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个GET_STATUS请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。

3.主机发送SET_FEATURE请求,集线器重启端口

当主机知道有一个新的设备时,主机给集线器发送一个SET_FEATURE请求,请求集线器来重启端口。集线器使得设备的USB数据线处于重启(Reset)状态至少10ms。

4.集线器在设备和主机之间建立一个信号通路

主机发送一个GET_STATUS请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状态了,设备已经准备好通过Endpoint 0 的默认流程响应控制传输,即设备现在使用默认地址0x0与主机通信。

5.集线器检测设备速度

集线器通过测定哪根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。(全速高速设备D+有上拉电阻,低速设备D-有上拉电阻)。

6.获取最大数据包长度

PC 向address 0发送USB协议规定的GET_DESCRIPTOR命令获取设备描述符,以取得缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应。该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能枚举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。

7.主机分配一个新的地址给设备

主机通过发送一个SET_ADDRESS请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。

8.主机重新发送GET_DESCRIPTOR命令读取完整设备描述符

主机向新地址重新发送GET_DESCRIPTOR命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。

9.主机发送GET_DESCRIPTOR命令,获取完整配置信息

主机向设备循环发送GET_DESCRIPTORn命令,要求USB设备回答,以读取全部配置信息。

10.主机发送GET_DESCRIPTOR命令,获得字符描述符(unicode)

描述字符集包括了产商、产品描述、型号

11.主机展示新设备信息

此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号

12.PC判断能否提供该类USB的驱动

根据设备描述符和配置描述符应答,PC判断是否能够提供USB的Driver

13.主机发送SET_CONFIGURATION(x)命令,请求为设备选择一个配置

加载了USB设备驱动以后,主机发送SET_CONFIGURATION(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。

枚举的过程用到总线的“控制传输(Control Transfer)”的传输方式。用于配置/命令/状态等情形,其中的设置操作setup和状态操作status过程的数据包具有USB协议定义的数据结构,控制传输只能通过消息管道进行。
枚举握手过程:

 

USB设备类型定义:

  依附在总线上的设备可以是需要特定的驱动程序的完全定制设备,也可能是属于某个设备类别。这些类别定义设备的行为和接口描述符,这样一个驱动程序可能用于所有此种类别的设备。一般操作系统都为支持这些设备类别,为其提供通用驱动程序。

在一个设备上有两个地方可以显示类代码信息放置。

 

 参考文章:

  USB学习网站:USB中文网

   http://www.busrom.com/article/detail-27.html

 

posted on 2022-09-06 15:34  学海一扁舟  阅读(1399)  评论(0编辑  收藏  举报