USB学习——基本概念

文章目录

本文记录下学习USB相关的基本概念

USB(Universal Serial Bus)概述

USB全称为Universal Serial Bus(通用串行总线),是一种快速、灵活的总线接口。它是为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准。

USB一般分为USB低速,USB全速,USB高速和USB超高速,其分别对应于USB1.0,USB1.1,USB2.0和USB3.0,而USB3.0又分了GEN1,GEN2等。最新一代是USB4,传输速度为40Gbit/s,三段式电压5V/12V/20V,最大供电100W ,新型Type C接口允许正反盲插。

USB是一种电缆总线,支持在主机和各式各样的即插即用的外设之间进行数据传输。由主机预定的标准的协议使各种设备分享USB带宽,当其它设备和主机在运行时,总线允许添加、设置、使用以及拆除外设。

USB系统的描述

一个USB系统主要被定义为三个部分:USB的互连、USB的设备、USB的主机。

USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面:

  1. 总线的拓扑结构:USB设备与主机之间的各种连接方式;
  2. 内部层次关系:根据性能叠置,USB的任务被分配到系统的每一个层次;
  3. 数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式;
  4. USB的调度:USB提供了一个共享的连接。对可以使用的连接进行了调度以支持同步数据传输,并且避免的优先级判别的开销。

USB总线传输方式

USB2.0总线属一种轮讯方式的总线,主机控制端口初始化所有的数据传输。每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输运作的种类、方向,USB设备地址和终端号的USB数据包,这个数据包通常称为标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。USB中有一个特殊的通道------缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。

USB 的设备可以接在 PC 上的任意的 USB 接口上. 而使用 Hub 还可以扩展使更多的USB设备连接到系统中。USB的Hub 有一个上行的端口(到host) 有多个的下行端口(连接其它的设备),从而可以使整个的系统可以扩展的连接 127 个外设。其中 Hub 也算外设,对于USB 系统来说,USB的host永远在PC边,所有的其他连接到host都称为设备。在设备与设备之间是无法实现直线通信的,只有通过host的管理与调节才能够实现数据的互相传送。在系统中,通常会有一个根Hub,这个Hub一般有两个下行的端口。

USB的拓扑结构

  • USB的物理拓扑结构
    USB的物理拓扑指的是USB总线的实际物理设备连接关系。
    主机端提供USB根集线器,USB根集线器可外接USB外设,也可的外接USB的集线器HUB,用于拓展USB端点接口,拓展的USB集线器上的端口也可以外接USB设备。使用这种方式可实现USB设备的层层拓扑连接。不过这种拓扑关系最大的深度为7。

一个USB集线器(HUB)的物理构如下:

可以看到,一个USB集线器是将一个USB连接端点拓展成多个USB端点的设备。

  • USB的逻辑拓扑结构
    USB的逻辑拓扑结构是站在USB主机的角度来讲,所以的连接到该USB总线上的USB设备具有同等的地位关系。主机对外接的USB设备的寻址访问使用相同的方式,只是有的设备需要USB集线器中继访问,有些USB设备是直接访问。

USB的连接模型

USB是一种主从结构。主机叫做Host,从机叫做Device(也叫做设备),集线器也被当作一种特殊的设备处理,用于扩展USB端口(扩展的USB端口可以增加USB总线上物理设备的连接)。

USB的数据交换只能发生在主机和设备之间,主机和主机,设备和设备之间不能互连。为了在物理上区分主机和设备,使用了不同的插头和插座,可以参见USB硬件接口分类一节。USB总线上所有的数据传输都由主机主动发起,而设备只是被动的负责应答。例如,在读数据时,USB主机先发出读命令,设备收到该命令后,才返回数据。在USB OTG中,一个设备可以在从机和主机之间切换,这样就可以实现设备与设备之间的连接,大大增加了USB的使用范围。但这时依然没有脱离这种主从关系,两个设备之间必然有一个作为主机,另一个作为从机。USB OTG增加了一种MINI USB接头,比普通的4线USB多了一个ID表识线,用来表明它是主机还是设备,这个以后会讲到。

USB的拓扑结构为金字塔型。由一个USB主控制器出发,下面接USB集线器,USB集线器将一个USB口扩展为多个USB口,多个USB口又可以通过集线器为更多个接口。但USB协议中对集线器的层数是有限制的,USB1.1规定最多为5层,USB2.0规定最多为7层。

USB数据传输路径如下:USB主控制器发出数据包,通过根集线器,再通过下面的集线器(如果有的话),再发给USB设备;设备返回数据,交给它上层的集线器,上层的集线器再交给更上层的集线器,直到USB主控制器为止。而USB主控制器就可以跟CPU打交道了。在标准的PC机上,USB主控制器是挂在PCI总线上的。

USB控制器及分类

OHCI,UHCI,EHCI,xHCI区别与联系

USB主机控制器类型 对应的USB的协议和支持的速率 创立者 功能划分 常用于
OHCI USB 1.1=Low Speed和Full Speed Compaq,Microsoft和National Semiconductor 硬件功能 > 软件功能⇒硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单 扩展卡,嵌入式开发板的USB主控
UHCI USB 1.1=Low Speed和Full Speed Intel 软件功能 > 硬件功能⇒软件的任务重,可以使用较便宜的硬件的USB控制器 PC端的主板上的USB主控
EHCI USB 2.0=High Speed Intel 定义了USB 2.0主控中所要实现何种功能,以及如何实现 各种USB 2.0主控
xHCI USB 3.0=Super Speed Intel 定义了USB 3.0主控中所要实现何种功能,以及如何实现 各种USB 3.0主控

对应的EHCI规范,可以去Intel的官网找到:EHCI Specification

对应的xHCI规范,可以去Intel的官网找到:Extensible Host Controller Interface (xHCI) Specification for USB 3.0

USB描述符

USB 是一条协议总线,而 USB 描述符则会记录设备的类型、厂商和产品 ID(加载驱动)、端点情况、版本号等内容。每个 USB 设备由一个或多个配置(Configuration)组成,每个配置包含多个接口(Interface),每个接口包含多个端点(Endpoint)。

描述符 说明
设备描述符 设备唯一,向主机说明设备类型、端点 0 最大包长、设备版本、配置数量等
配置描述符 至少一个,主机只能选择一个,向主机说明配置包含的接口数、配置编号、供电方式、所需电流 等
接口描述符 至少一个,向主机说明接口编号、端点数(不包括端点0)、接口所使用的类、子类、协议等。通过接口来实现功能,固所需端点数不确定
端点描述符 可为0个,说明端点的端点号及方向、端点传输类型、最大包长度、查寻时间间隔 等
字符串描述符 提供一些方便人们阅读的信息,非必需。

主机首先获取 "设备描述符",然后获取 "标准配置描述符",根据其内部的配置描述符集合长度值,一次性将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符读回;字符串描述符是单独获取的。

USB 端点

端点(Endpoint):实现 USB 设备功能的物理缓冲区实体,USB 主机和设备通过端点进行数据交互。USB 通信的基本单位,分为控制端点(Control Endpoint)、中断端点(Interrupt Endpoint)、批量端点(Bulk Endpoint)和等时端点(Isochronous Endpoint)。

USB枚举过程

枚举,主机从设备读取各种描述符信息,并根据这些信息来加载合适的驱动程序,从而知道设备类型、如何通信等。

控制传输:是 USB 传输模式的一种,它保证数据正确性,是设备枚举过程中采用的传输方式

  • 1)控制传输的过程:

    • (1)建立过程:由 USB 主机发起;由 SETUP 令牌包 + DATA0 数据包 构成; 建立过程中指定数据长度为 0,则没有数据过程。
    • (2)数据过程(可选):控制读则输入数据;控制写则输出数据;
    • (3)状态过程:与数据过程传输方向相反;用来确认数据是否正确传输完成。
  • 2)枚举的详细过程:

    • (1)获取描述符:

        1. 主机检测到设备插入则对设备复位,复位后设备地址为 0。主机向地址 0 的设备的端点 0 发送获取设备描述符的标准请求(仅一次请求)(控制传输的建立过程)
        1. 设备收到请求后,将设备描述符返回主机(控制传输的数据过程)
        1. 主机接收到设备描述符,并确认无误后,返回 0 长度的确认数据包(控制传输的状态过程)
    • (2)设置地址。

        1. 主机向地址 0 的设备的端点 0 发出设置地址请求(控制传输的建立过程,该过程数据包中包含新的设备地址)
        1. USB 设备进入状态过程(因为该控制传输无数据过程),并等待主机请求状态返回(设备无法主动向主机返回)
        1. 设备收到主机输入的令牌包后,返回 0 长度的状态数据包。
        1. 主机发送应答包 ACK 给设备,设备收到后启用新的设备地址
    • (3)主机再次获取设备描述符:使用新的设备地址;获取全部 18 字节(可多次请求);

    • (4)主机获取配置描述符:共 9 字节;根据所描述的配置集体总长度获取配置集合;

    • (5)获取字符串描述符(可选):HID 设备还会获取报告描述符等;单独获取;

  • 可参考:https://www.usbzh.com/article/detail-110.html

USB 四种传输类型

USB 总线上传输的基本单位是包,但需要将包组织成事务(Transaction)才能传输数据。

USB 协议规定 4 种传输类型:批量传输、等时(也作同步)传输、中断传输、控制传输。

控制传输包括 3 个过程,建立过程、状态过程分别是一个事务,数据过程则可能包含多个事务;

其余 3 种传输方式则每传输一次是一个事务。

USB 事务

事务通常由 2 个或 3 个包组成:令牌包、数据包、握手包

  • 令牌包:启动一个事务,由主机发送
  • 数据包:传送数据,方向由令牌包指定
  • 握手包:数据接收方接收正确后,发送握手包;设备也可使用 NAK 握手包来表示数据未准备好。

批量传输(Bulk)

批量传输使得批量事务传输数据。

一次批量事务有 3 个阶段:令牌包阶段、数据包阶段、握手包阶段(下图中两行虚线隔开了三个阶段)。

应用场景:数据量大、对数据的实时性要求不高的场合,如大容量存储设备(Mass Storage Device,MSD)、USB 打印机、扫描仪等

中断传输(Interrupt)

中断传输是一种保证查询频率的传输。中断端点在端点描述符中报告查询间隔,主机保证在间隔内进行一次轮值。(此中断非单片机中断,而是主机 Host 保证在某个时间间隔内进行一次传输)

中断传输也可以不断地检测状态,然后使用批量传输来传送大量数据。

应用场景:适合数据量小,但时间要求严格的设备,如从机接口设备(Human Interface Device,HID)中的鼠标、键盘等设备。

等时传输(Isochronous)

等时传输使用等时事务(Isochronous Transaction)来传输数据,不保证数据 100% 正确,但支持数据量大且实时性高。

应用场景:数据量大,实时性要求高,如音视频设备等。(与批量传输场景区别是等时传输可容忍少量数据错误,但保证不能停顿。)

控制传输(Control)

控制传输分为三个过程:建立过程、数据过程(可选)、状态过程。控制传输要保证数据传输过程中的数据完整性,如枚举过程中各种描述符的获取以及设置地址、设置配置等。

端点类型与传输类型的关系

一个具体的端点,只能工作在一种传输模式下。通常把工作在什么模式下的端点,就叫做什么端点,如控制端点、批量端点。

如,端点 0 是每个 USB 设备都必须具备的默认控制端点,它一上电就存在并可用。还记得枚举过程就是通过控制传输来进行的。

传输类型与端点最大包长

每个端点描述符都规定了端点所支持的最大数据包长。

传输 低速最大包长 全速最大包长 高速最大包长
控制传输 8字节 可选 8、16、32、64 字节 64字节
等时传输 不支持 1023 字节 1024 字节
中断传输 8字节 64 字节 1024 字节
批量传输 不支持 可选 8、16、32、64 字节 512 字节

参考

https://www.usb.org/
USB in a NutShell
usb
USB中文网
USB 概述及协议基础
USB 2.0 Specification
Universal Serial Bus Specification
Universal Serial Bus Specification
Universal Serial Bus 3.0 Specification
The History of USB Standards from 1.0 to USB4
usb made simple
USB 2.0 Architecture Explained
USB Descriptors

相关推荐
复园电子1 天前
朝天椒USB服务器在三枪集团财务中心的应用
运维·服务器·github·远程连接·usb
复园电子2 天前
朝天椒USB服务器在银泰证券虚拟化超融合场景的应用案例
运维·服务器·github·usb
0欧姆4 天前
USB 驱动开发 --- Gadget 驱动框架梳理
linux·驱动开发·usb·gadget
小仇学长5 天前
Linux内核编程(二十一)USB应用及驱动开发
linux·驱动开发·usb
ShiinaKaze2 个月前
【STM32】USB 简要驱动软件架构图
stm32·单片机·mcu·usb
记帖2 个月前
STM32H503开发(2)----STM32CubeProgrammer烧录
stm32cubemx·开发板·keil·usb·烧录·stm32h503cb·stm32cubeprog
【 STM32开发 】3 个月前
STM32 -- USB CDC 虚拟串口通信
stm32·usb·cdc·虚拟串口·stm32f407
硬汉嵌入式3 个月前
《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计
开源·usb
秋月的私语3 个月前
如何隐藏Windows10「安全删除硬件」里的USB无线网卡
usb·电脑知识