USB概述

1.USB系统概述

一个 USB 系统主要由三个部分组成,它们分别是 USB 主机、 USB 互连和 USB 设备。

  • 其中 USB 主机是一个起协调作用的实体,负责监督 USB 的拓扑结构,可以是电脑,也可以是 OTG 设备,在任何一个 USB 系统中,只能有一个主机,主机系统整合了一个根集线器,以便提供更多的连接点。
  • USB 互连指的是 USB 设备与 USB 主机之间的物理连接, USB 的物理连接采用的是分层的星型拓扑结构来连接所有 USB 设备:
    在这里插入图片描述
  • 塔顶为 USB 主控制器和根集线器,下面接 USB 集线器, USB 集线器将一个 USB 口扩展为多个 USB 口,多个 USB 口又可以通过集线器扩展出更多的接口,每个集线器是在星型的中心,每条线段是点到点连接, 从主机到集线器或其功能部件,或从集线器到集线器或其功能部件。 USB1.1 规定最多为 4 层, USB2.0 规定最多为 6 层。理论上,一个 USB 主控制器最多可接 127 个设备,这是因为协议规定每个 USB 设备具有一个 7 bit 的地址(取值范围0~127),而地址 0 是保留给未初始化的设备使用。 USB 设备主要分为集线器和功能器件, 每一个 USB 设备由一个或多个配置来控制其行为,使用多配置原因是对操作系统的支持;一个配置是由接口( Interface)组成;接口则是由管道( Pipe)组成;管道是和 USB 设备的端点( Endpoint)对应:
    在这里插入图片描述
  • 一个端点建立一个管道。 端点可分为输入和输出,其中输入端点是由设备向主机发送数据。输出端点是由主机向设备发送数据。 一个端点只能工作在一种传输模式下。 在固件编程中, USB设备、配置、接口和管道都是用描述符来报告其属性。

2.USB协议概述

在 USB 协议中,采用了分层的概念来说明 USB 的数据通信, 这么做的好处是可以分工协作,由不同的人去实现不同的协议层,从而减少开发难度,有利于协议的推广使用。 USB 协议分为三层,它们分别是功能层、设备层和总线接口层。

  • 功能层完成的是功能级的描述、定义和行为,我们其实就是在功能层上进行开发程序
  • 设备层完成的是从功能级到传输级的转换,把一次功能级的行为转换为一次一次的基本传输;
  • USB 总线接口层则处理总线上的比特流,完成实际物理通信的数据传输和总线管理。
    在这里插入图片描述
  • 功能层是我们在编写程序过程中直接面对的接口,这里屏蔽了繁杂的各种 USB 协议,直接实现从主机的内存到 USB 设备的 FIFO 之间交换数据
  • 设备层所有的数据传输都是基于端点的,端点是 USB 设备中的可以进行数据收发的最小单元。打个比方,端点就好比我们的手机,我们不用管手机内部是怎么工作的,想给谁打电话只需拨打手机号就行。类似地,我们只需配置好端点,然后就能使用端点进行数据传输了,端点之下的实现细节由 USB 芯片来完成
  • 总线接口层是物理层,负责比特流数据的传输。USB2.0 协议规定 USB 设备必须要有 SIE(串行接口引擎),而串行接口引擎就负责数据包转成串行数据。
  • USB 总线上传输数据是以包为基本单位的,一个包被分成不同的域,根据不同类型的包,所包含的域是不一样的。但是不同的包有个共同的特点,就是都要以同步域开始,紧跟着一个包标识符 PID( Packet Identifier),最终以包结束符 EOP( End Of Packet)来结束这个包。包标识符 PID 是用来标识一个包的类型的,它总共有 8 位,其中 USB 协议使用的只有 4 位 PID0-PID3,另外 4 位 PID4-PID7 是 PID0-PID3 的取反,用来校验 PID。 USB 协议规定了 4 类包,分别是:
    • 令牌包( Token packet, PID[1:0]为 01)。主要是用来启动一次 USB 传输, 总共有 4 种,分别是 OUT(输出)、 IN(输入)、 SETUP(建立)和 SOF(帧起始)。
    • 数据包( Data Packet, PID[1:0]为 11)。主要用来传输数据的,总共有 4 种: DATA0、 DATA1、 DATA2 和 MDATA。其中 DATA2 和 MDATA 两个是在 USB2.0 协议中新增的,主要用在高速分裂事务和高速高带宽同步传输中。
    • 握手包( HandshakePacket, PID[1:0]为 10)。主要是用来表示一个传输是否被对方确认,总共有 4 种,分别是 ACK(确认)、NAK(不确认)、 STALL(挂起)和 NYET(未准备好)。
    • 特殊包( Special Packet, PID[1:0]为 00)。主要使用在特殊场合的包,总共有 4 种:分别是 PRE(前导)、 ERR(错误)、SPLIT(分裂事务)和 PING(测试)。其中 ERR、 SPLIT 和 PING 三个是在 USB2.0协议中新增的。 PRE、 SPLIT 和 PING 是令牌包, ERR 是握手包。
  • 虽然 USB 总线上传输数据是以包为基本单位的,但是我们不能随意地使用包来传输数据,必须把不同的包组织成事务( transaction)才能传输数据。 我们在使用端点传输数据时有 4 种传输方式, 它们分别是控制传输( Control transfer)、中断传输( Interrupt transfer)、批量传输( Bulk transfer) 和同步传输( Isochronous transfer)。 这 4 种传输方式对应着 4 种事务,分别是控制事务、中断事务、批量事务和同步事务。每种事务都由包组成,通常有令牌包、数据包和握手包。不同的包根据传递的信息而拥有不同的功能, 下面我们列出这四种传输的特点:
  • 控制传输:主要用于在设备连接时,对设备进行枚举(各种描述符的
    获取以及设置地址和设置配置等)以及其他因设备而异的特定操作
  • 中断传输:主要用于对延迟要求严格、小量数据的可靠传输,如键盘和鼠标等
  • 批量传输:主要用于对延迟要求宽松、大量数据的可靠传输,如 U 盘等
  • 同步传输:主要用于对可靠性要求不高的实时数据传输,如语音 USB 音响等

3.USB枚举

USB 枚举是指 USB 主机获得设备的基本描述信息的过程, 这样主机就可以根据这些信息来加载合适的驱动程序,从而知道是什么样的设备,如何进行通信等等。 由于 USB 协议是主从结构所有的传输都由主机发起。因此在 USB设备刚插上主机时, 主机需要通过一系列的标准设备请求获得 USB 设备的描述符以及为 USB设备分配地址

  • 描述符,它和我们编写固件程序息息相关。其实就是 USB 设备属性的集合,简单地说描述符起到的作用就是用一个关系数据库来涵盖所有的需要提交给主机的描述信息。
    在这里插入图片描述
    从 USB2.0 官方手册给出的表中可以看出, USB 描述符主要有 8 种类型: 1、设备描述符;2、 配置描述符、 3、 字符串描述符; 4、 接口描述符; 5、 端点描述符; 6、设备限定描述符; 7、其他速率配置描述符; 8、接口电源描述符;下面我们就对这些描述符分别进行介绍:

  • 设备描述符,给出了 USB 设备的一般信息,这包括对设备以及对所有设备配置起全程作用的信息,一个 USB 设备只能有一个设备。如表所示:
    在这里插入图片描述

  • 设备限定描述符,如果 USB 设备既有高速模式又有全速模式,那么设备限定描述符描述的是在另一速率下的设备信息。也就是说如果 USB 设备工作在高速模式下,那么设备限定描述符则指定了在全速模式下的信息:
    在这里插入图片描述

  • 配置描述符。主要记录了 USB 设备工作时的一些属性,如包含的接口数、配置的编号和供电方式等等, 一个 USB 设备至少要有一个配置描述符,也可以有多个配置描述符,这里我们需要说明的是,其他速率配置描述符与该配置描述符的参数一致:
    在这里插入图片描述

  • 接口描述符,定义了包含的端点数以及所使用的类等等,简单地说,接口就是一些端点的集合:
    在这里插入图片描述

  • 端点描述符,主要用来设置一些端点工作时的参数,如端点地址 D7 表示端点方向, 0 为输出,1 为输入;端点地址 D3-D0 表示端点号。端点属性 D1~D0 表示端点传输类型, 00 为控制传输,01 为同步传输, 10 为批量传输, 11 为中断传输。
    在这里插入图片描述

  • 字符串描述符,字符串描述符是可选的,它有两种结构,一种是语言 ID 描述符结构,另一种是字符串描述符结构。当 USB 主机请求获取字符串描述符时,索引值为 0 表示语言 ID,非 0 表示字符串。 在语言 ID 描述符中,这里只使用了一种美式英语, 即 0x0409。在字符串描述中, bString 字段是
    使用 UNICODE 编码的字符串, UNICODE 用 2 字节来表示一个字符,如果是英文字符,则直接在 ASCII 码前补 1 字节的 0 扩充为 2 字节的 UNICODE 码。
    在这里插入图片描述
    在这里插入图片描述

  • 标准设备请求, USB 协议定义了一个 8 字节的标准设备请求,主要用在设备的枚举过程中,这 8 字节的数据是在控制传输的建立过程通过默认控制端点 0 发出的,在这 8 字节的数据中,主要包含了数据传输的方向、长度以及数据类型等信息。
    在这里插入图片描述
    在这里插入图片描述

4.USB接口

由于 USB 是为了支持众多种应用而产生的,所以人们设计出了多种类型的 USB 接口,以便用于不同的应用。 下面我们就来简单的介绍一下不同的 USB 接口类型, USB 的接口类型,根据接口形状不同,主要可以分为三大类:
(1) 普通类型( Type)
(2) 小型类型( Mini)
(3) 微小类型( Micro)
在这三种类型中,每一种大类又可以分为两小类,分别是 A 类和 B 类。 Micro B,我们主要来介绍一下该接口
在这里插入图片描述
在这里插入图片描述
从该图中可以看出, 虽然它有五根线,但是只用到了其中的四根,分别是电源、 D-, D+和GND。

猜你喜欢

转载自blog.csdn.net/qq_43445577/article/details/114635826
usb