首页 > 其他分享 >USB 概述及协议基础

USB 概述及协议基础

时间:2024-10-10 12:59:49浏览次数:7  
标签:协议 USB 主机 传输 描述符 概述 端点 设备

《圈圈教你学 USB》第 1 章学习笔记

1 USB 是什么?

  • 1)USB(Universal Serial Bus,通用串行总线)

2 USB 的特点

  • 1)USB 协议版本与速度:

来源:https://www.usbzh.com/article/detail-199.html

3 USB 的拓扑结构

USB 是主从结构,主机为 Host,从机为 Device。

  • 1)主从结构:主机 Host,从机 Device

  • 2)通常 PC 上有一个或多个 USB 主控制器(host controller,如下图的 USB Composite Device);每个主控制器下有一个根集线器(root hub,如下图的 USB 根集线器);而根集线器通常有一个或多个 USB 口:

当我将一个 USB 一拖四扩展坞插入电脑时,多出了一个 “通用 USB” 集线器(集线器只能扩展接口,不能扩展带宽),如下图所示:

  • 3)USB 数据交换只能在主机与设备之间。USB OTG 中一个设备可在从机与主机间切换。

关于 USB 集线器的层数,USB1.1 中最多 4 层,USB2.0 中最多 6 层。

4 电气特性

  • 1)连接线:

    • 4 线:电源 VBUS、GND,D- 和 D+ 差分数据线
    • 5 线:MINI USB 中添加身份识别(ID)线
    • 9 线:USB 3.0 时代,全新设计的 USB Type-A、Type-B 和Micro-B,但没有普及
    • 24 线:Type C
  • 2)NRZI 编码与位填充:数据为 0 时翻转电平,为 1 时不翻转;连续 6 个 1 时填充数据 0。

5 USB 的线缆、插头及插座

  • 1)Type A 型、Type B 型、MINI USB、Type C 型

6 插入检测机制

  • 1)集线器的 D+ 和 D- 分别接一个 15k 下拉电阻到地;USB 设备端则在 D+ 或 D- 上接一个 1.5k 上拉电阻到 3.3V:
    • (1)低速设备上拉电阻接 D-;
    • (2)全速与高速设备则接 D+。

设备插入到集线器时,数据线的分压大概在 15 / (15 * 1.5) * 3.3V = 3V,对集线器的接收端来说是一个高电平。

根据被拉高的数据线是 D+ 或 D- 来判断设备的速度类型。
高速设备会先识别为全速设备,然后两者再通信确认后切换到高速模式。(高速模式下为电流传输,要断开 D+ 的上拉电阻)

如果 USB 外设或芯片没有内部 1.5k 上拉电阻,则可以通过以下电路实现:

实验:在 USB 的 D+ 或 D- 上接一个 10k 上拉电阻,则 Windows 会提示发现新硬件,但无法找到驱动。

7 描述符

USB 是一条协议总线,而 USB 描述符则会记录设备的类型、厂商和产品 ID(加载驱动)、端点情况、版本号等内容。

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

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

端点:实现 USB 设备功能的物理缓冲区实体,USB 主机和设备通过端点进行数据交互。

8 枚举过程

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

控制传输:是 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

9 USB 的包结构与传输过程

9.1 USB的包结构及包的分类

  • 1)USB 以包为基本单位进行数据传输,一个包被分成不同的域,域使用 LSB 方式。

  • 2)包虽然由不同的域组成,但共同点为:同步域 + 包标识符(PID,Packet Identifier) + [域] + 包结束符 EOP(End Of Packet)

    • (1)同步域:

        1. 用来通知 USB 串行接口引擎准备好开始传输;还可以用来同步时钟(其由多个 0 组成,而 0 需要进行电平翻转)
        1. 发送端:低速、全速设备同步域为 0000_0001;高速设备使用 31 个 0,后面跟 1 个 1

      NRZI 编码后的低速或全速 USB 数据包(如下图)。当最后数据未翻转时,认为接收到包标识符 PID。

    • (2)包标识符:共 8 位,USB 协议只使用其中 4 位(PID0~PID3),而高 4 位是低 4 位的取反。

      • 0bxxxx_xx00:特殊包,special packet
      • 0bxxxx_xx01:令牌包,token packet
      • 0bxxxx_xx10:握手包,handshake packet
      • 0bxxxx_xx11:数据包,data packet

    每个包又可以分为几种类型:

    • (3)包结束符 EOP:
        1. 全速或低速设备为 SE0(D+、D- 同时为低)
        1. 高速设备为故意的位填充错误来表示。(即 CRC 正确,但位填充错误)

9.2 令牌包

令牌包用来启动一次 USB 传输;

  • 1)令牌包有 4 种:输出(OUT)、输入(IN)、建立(SETUP)、帧起始(SOF,Start of Frame)

OUT、IN、SETUP 令牌包结构图:

SOF 令牌包结构图:

建立令牌包与输出令牌包的区别:
作用相同,都是通知设备要输出一个数据包;
不同的是,SETUP 包后只使用 DATA0 数据包,且只能发送到设备控制端点,并且设备必须接收,而 OUT 包没有这些限制。

9.3 数据包

数据包用来传输数据。所有数据包有相同的结构:

设计不同类型的数据包,是用来在握手包出错时纠错。

9.4 握手包

握手包用来表示一个传输是否被对方确认。结构只有 同步域、PID、EOP。

  • 握手包有 4 种:ACK、NAK、STALL、NYET
    • ACK:数据正确接收。主机只能使用 ACK 握手包。设备则可以使用所有。
    • NAK:没有数据需要返回,或数据正确接收但没有跑空间存储。主机接收到 NAK 时,便知设备未准备好。
    • STALL:设备无法执行该请求,或端点已经挂起。表示错误状态,需主机干预来解除该状态
    • NYET:表示本次数据成功接收,但没有足够空间来接收下次数据,只有 USB2.0 高速设备输出事务中使用。主机在下次输出数据时,将先使用 PING 令牌包来试探。

9.5 特殊包

特殊包指在特殊场合使用的包。

特殊包有 4 种,PRE、ERR、SPLIT、PING。其中除 ERR 是握手包外,其余均是令牌包且是 USB2.0新增。

  • PRE:与握手包结构一致。全速模式中,需要传输低速事务时,发送 PRE 包通知集线器打开其连接的低速设备端口(因为平时为避免低速设备误动作,低速设备端口是关闭的)
  • PING:与 OUT 令牌包结构一致。但其不发送数据,而是等待设备返回 ACK 或 NAK,以判断设备是否能够传送数据。
  • SPLIT:高速事务分裂令牌包。
  • ERR:高速事务中表示错误使用。

9.6 如何处理数据包

一般 USB 接口芯片会完成如 CRC 校验、位填充、PID 识别、数据包切换、握手等协议。

USB 接口芯片正确接收数据时,如果有空间存储,则保存数据并返回 ACK 到主机,同时设置标志表示正确接收到数据;
如果没有空间存储数据,则自动返回 NAK。

USB 接口芯片收到输入请求时,如果有数据需要发送,则发送数据,并等待接收 ACK,收到 ACK 设置成功发送标志;
如果无数据发送,则自动返回 NAK。

通常要做的事是 根据 USB 接口芯片提供的标志,准备要发送的数据到端点,或者从端点读取接收到的数据即可。
而所谓数据,是指数据包中的数据,至于同步域、包标识、地址、端点、CRC 等由接口芯片处理。

10 USB 四种传输类型

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

USB 协议规定 4 种传输类型:批量传输、等时(也作同步)传输、中断传输、控制传输。
控制传输包括 3 个过程,建立过程、状态过程分别是一个事务,数据过程则可能包含多个事务;
其余 3 种传输方式则每传输一次是一个事务。

10.1 USB 事务

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

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

10.2 批量传输

批量传输使得批量事务传输数据。
一次批量事务有 3 个阶段:令牌包阶段、数据包阶段、握手包阶段(下图中两行虚线隔开了三个阶段)。
应用场景:数据量大、对数据的实时性要求不高的场合,如大容量存储设备(Mass Storage Device,MSD)、USB 打印机、扫描仪等

批量传输(Bulk)分为批量输出事务(主机写)批量输入事务(主机读)

批量输入事务的数据包如下:

批量输出事务的数据包如下:

10.3 中断传输

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

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

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

中断传输事务流程如下:

10.4 等时(同步)传输

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

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

等时事务流程图:

10.5 控制传输

控制传输分为三个过程:建立过程、数据过程(可选)、状态过程

1)建立过程:使用建立事务。该过程中的令牌包(SETUP)、数据包(DATA0)、握手包(ACK)是固定的。

2)数据过程(可选):批量事务

3)状态过程:批量事务,只使用 DATA1 包。

控制传输要保证数据传输过程中的数据完整性,如枚举过程中各种描述符的获取以及设置地址、设置配置等。控制传输的实例如下:

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

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

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

10.7 传输类型与端点最大包长

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

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

标签:协议,USB,主机,传输,描述符,概述,端点,设备
From: https://www.cnblogs.com/luyaocf/p/18454992

相关文章

  • USB3.0 枚举过程
    USB3.0枚举是指主机和设备之间通过USB协议进行初始化和通信配置的过程。在USB3.0中,枚举过程的主要步骤包括电气连接建立、链路训练(LTSSM)、设备描述符读取等。以下是USB3.0枚举的详细过程:1设备连接与电源管理当USB设备插入USB3.0端口时,以下步骤会开始:供电:主机通过VBUS线为......
  • USB协议详解第12讲(USB传输-初探)
    1.USB传输、事务、包的关系USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当于这次传输过程中的5个事务,当然每件事肯定有......
  • HTTP协议介绍&各个版本功能差异对比
    http协议简介        HTTP全称超文本传输协议(HyperTextTransferProtocol),是一种广泛用于互联网中浏览器与服务器之间的应用层传输协议。简单来说,浏览器向服务器发送HTTP请求,服务器向浏览器返回HTTP响应,两者之间通过这种方式进行“交流”,来使得我们的浏览器可以......
  • PSI5协议之物理层
    概述        ECU和传感器之间只需要两根线就可以实现PSI5通信。ECU通过这两根线对传感器提供预调节电压,传感器通过这两根线进行电流调制向ECU发送数据信息。ECU与传感器可以实现多种连接方式,不同的连接方式在物理层有这不同的要求。包括供电线参数模型和多种拓扑接口......
  • USB协议详解第11讲(USB描述符-总结)
    描述符回顾总结1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备、设备需要的总线资源、和设备的通讯方式等等。2.每一个USB设备只有一个设备描述符,主要......
  • 【网络】初识https协议加密过程
    初识https协议加密过程为什么不用http而要使用https常见的加密方式对称加密非对称加密数据摘要&&数据指纹https的工作过程探究方案一:只使用对称加密方案二:只使用非对称加密方案三:双方都使用对称加密方案四:非对称加密+对称加密中间人攻击如何确认密钥是否被修改理解数......
  • (概述)TMS320C203PZ、TMS320C203PZA、TMS320C203PZ80、TMS320C203PZ57、TMS320C203PZA57
    TMS320C2x是TMS230C2系列数字信号处理器(DSP)的新一代产品,它采用静态CMOS集成电路制造技术,其结构设计以TMS320C2x系列为基础,并按低功耗进行优化。先进的哈佛结构、片内外围模块、片内存储器和高度专业化指令系统的结合是'C2xx器件工作灵活性和高速度的基础。TMS320C203为100脚PZ......
  • HTTP 协议
    HTTP协议是接口测试中最常见的协议,是用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。客户端向服务端发送HTTP请求,服务端则会在响应中返回所请求的数据。在测试过程中,常常需要校验请求和响应结果,所以了解HTTP协议,对于接口测试来说,是重中......
  • CC-Link IEFB转Modbus TCP总线协议转换网关
    一,设备主要功能捷米特JM-CCLKIE-TCP网关实现连接到CC-LinkIEFieldBasic总线中做为从站使用,连接到ModbusTCP总线中做为主站或从站使用。应用广泛:捷米特JM-CCLKIE-TCP广泛应用于支持ModbusTCP接口的上位机、变频器、仪表、马保等等。例如在印染设备中,通过该网关可以将印染......
  • Modbus RTU转CC-link总线协议转换网关
    一,设备主要功能捷米特JM-CCLK-RTU网关实现CC-Link从站和ModbusRTU主站(从站)。即将CC-Link作为CC-Link从站接入到ModbusRTU网络中。应用广泛:捷米特JM-CCLK-RTU应用于支持ModbusRTU接口的变频器、仪表、上位机、马保等等。在纺纱设备领域,ModbusRTU转CC-Link总线网关发挥着......