1、概述
USB,Universal Serial Bus(通用串行总线),是一种计算机与外围设备进行数据交互的通信协议。
1.1 USB协议
USB2.0 或 USB3.1, 指的是传输标准; 而USB Type-C 或 USB Type-A, 指的是物理接口。
1.2 USB级联
USB集线器最多可以串联5个;
总线上最多能连接127个从机(有因素限制实际比127个少);
1.3端点
- 控制端点:USB从机都必须有一个控制端点:端点0,用于对设备进行枚举,以及对设备进行一些基本的控制。它的数据传输方向是双向的,而其他的普通端点的数据方向都是单向的
- 普通端点:USB从机除了控制端点外,可以有一个或多个普通端点。低速从机做多可以有2个,高速和全速从机最多可以有15个。普通端点需要在设备配置之后才能进行数据传输
1.4通讯方式
USB总线在传输数据时,是按位进行传输的,所以是串行通信,同时USB是小端字节序传输,这意味着,串行传输时,应该先传输数据的LSB(最低有效位)。例如数据0X1234,通过USB总线传输时,会先传输0X34,再传输0X12
通讯方向
USB2.0规范中,USB的数据传输仅支持半双工,因为仅有一对差分信号线,数据方向只能是主机->从机或从机->主机。
USB3.0规范中,USB的数据传输支持全双工,由于硬件上增加了超高速差分信号线,传输协议上也进行了更新,所以同一时刻,数据可以从主机->从机/从机->主机
同步方式
USB以异步传输的方式,USB主机和USB从机的时钟频率都分别由自身提供,但是在USB从机枚举时,会共同确定USB版本,以确定数据传输速率。
令牌包
令牌包用于表明要开启一次USB数据传输。由于USB总线系统是主从结构的,所以无论是数据输入还是数据输出,都是由USB主机向USB从机发送令牌包,表明要进行数据传输。令牌包有以下4种:
- OUT(输出):告知USB从机,USB主机即将要输出一个数据包
- IN(输入):告知USB从机,USB主机需要从USB从机获取一个数据包
- SETUP(建立):告知USB从机,USB主机即将要输出一个数据包,和OUT令牌包不同的是,SETUP令牌包会开启控制传输,USB主机之后将向从机发送一个DATA0类型(只能为此类型)数据包,数据包的目的地是USB从机的控制端点,此端点地址为0,USB从机必须接受此数据包
- SOF(帧起始):表明这是一个帧起始包,帧起始包在每个帧开始时都会以广播的形式发送
1.5 USB从机枚举简单流程
USB主机识别从机并配置从机的流程被称为枚举。当USB从机连接到USB总线上时,USB主机会检测有USB从机插入,同时USB从机通电并将USB描述符信息从非易失性存储器加载到描述符寄存器中,等到USB主机从寄存器中获取到USB描述符,就能知道USB从机的基本信息,在这个过程中,会给USB从机分配对应的设备地址
USB描述符分为设备描述符,配置描述符,接口描述符,端点描述符,它们具体描述了以下信息:
设备描述符
USB从机有且只有一个设备描述符,主要用于记录设备的基本信息,包括设备包含的配置数量,设备使用的USB协议版本,设备类型,设备版本号,设备序列索引,厂商ID(VID),产品ID(PID),厂商字符串索引,产品字符串索引,端点0的最大包长等
设备描述符可以理解为USB从机的身份标识
配置描述符
USB从机一个设备描述符下可以包含多个配置描述符,主要记录了设备配置包含的接口数量,配置的编号,供电方式,电流需求量,是否支持远程唤醒等
配置描述符使得USB从机可以通过切换配置进行功能的切换,使用上更为灵活
接口描述符
USB从机一个配置描述符下会包含多个接口描述符,主要记录了接口号,接口的端点数,接口使用的类,子类和协议等
接口描述符主要是为了封装端点描述符而存在的抽象概念,可以理解为端点组合
端点描述符
USB从机一个接口描述符下会包含多个端点描述符,主要记录了端点的端点号,数据传输方向,数据传输类型,最大包长度,查询时间间隔等
描述符之间的关系
综合上面对于描述符的介绍,描述符之间是存在层次关系的,如下图,最上层是设备描述符,接着分别是配置描述符,接口描述符,端点描述符。这意味着一个USB从机,可以拥有多种配置,而每种配置都会拥有一些接口,这些接口封装了很多端点,每个端点都用于数据传输,在需要时USB从机可以根据配置切换USB功能,USB主机会根据不同配置包含的端点信息,选择不同的信息传输方式,从而更方便的实现更多的功能。