近期在给客户做一个降本项目,其中涉及到USB输入设备相关的一些知识,问题排查过程会需要一些USB硬件结构的知识,此处对USB硬件基础做一个简单的整理。
USB相关的软件功能涉及 USB 存储、USB 输入设备(内置、外置) 相关模块,之前对于此部分没有具体的理解和封装,项目问题处理起来相对棘手,耗费的时间久,排查的方式相对有限。
目前相关问题解决的差不多了,考虑到这快的内容相对有价值(USB是嵌入式开发中比较常用的一种通信协议,学习IIC、SPI、UART、USB等通信协议是很有必要),值此契机,规整下 USB 相关的知识。
此次,先介绍下 USB 的基础,大致介绍一下其组成、类别、标准、软件架构、常见术语。
一、USB 组成:
USB实际上就是由四根线组成的分别是两根供电,两根差分传输数据的,如下图。
编号1、编号4:为USB的电信号线,连接到 USB 接口的主机后,由主机向外置设备进行供电。
编号2、编号3:为USB的数据传输线,编号2为负信号线,USB Data Minus, 即USB-DM线,简写为D-;编号3为正信号线,USB Data Positive,即USB-DP线,简写为D+。
USB的结构决定了他的一些特性,比如热拔插,其实现的原理就是和这四根线相关的:
1. USB插入时,USB 主机先向从属设备供电,而后两者才能进行数据方面的传输;
2. USB拔出时,USB 主从设备先终止的是数据传输,再断开了主机与从属设备的供电。
二、USB 类别:
USB日常见得USB接口有很多种,但是实际上只有A、B、C三种,他们是根据不同设备而产生的的,还可以更细区分比如有mini头的、micro头的,分类大致可以如下图展示。
三、USB 标准规范:
了解一下USB的规范也是很有帮助的,USB总成是通用串行总线,使得计算机上添加串行设备十分容易,将设别插入计算机USB端口中,系统就可以自动识别和配置。
需要注意的是USB3.0的规范引入的全双工数据传输,5根线两根传输数据两根发送数据,一根GND,此时就可以同步全速的进行读写操作了。
下面这个表可以明确的表示USB规范发展的历程:
USB版本 | 上线时间 | 最大传输速率 | 特性 | 应用 | 速率简称 | 最大输出电流 |
USB 1.0 | 1996年1月 | 1.5Mbps(192KB/s) |
| 交互式设备:
| 低速(Low-Speed) | 5V/500mA |
USB 1.1 | 1998年9月 | 12Mbps(1.5MB/s) |
| 电话、音频类、压缩的视频类
| 全速(Full-Speed) | 5V/500mA |
USB 2.0 | 2000年4月 | 480Mbps(60MB/s) |
| 视频、大容量存储
| 高速(High-Speed) | 5V/500mA |
2008年11月 | 5Gbps(500MB/s) |
| 应用广泛,深受各大PC厂商的认可 | 超高速(Super-Speed) | 5V/900mA | |
USB 3.1 | 2013年12月 | 10Gbps(1280MB/s) |
|
| 超高速+(Super-Speed+) | 20V/5A |
四、USB 系统架构:
USB系统是由三个逻辑层组成:功能层、USB设备层、USB总线接口层,并且每一层都是由主机和USB设备不同的功能模块组成如下图所示:
- 功能层:由客户软件和设备方的功能单元组成,其能够实现USB设备传输的特定功能,通过功能层可以直观的理解USB传输的数据内容。功能单元对于客户软件,可视为接口的集合。
- 设备层:由USB系统软件和USB设备的USB逻辑设备组成,实现主机与USB设备之间传输的具体配置,USB逻辑设备对于USB系统软件可以视为端点的集合。
- 总线接口层:由主机的USB主控制器和设备的USB总线接口组成,实现了实际的数据传输。
USB 主机:由客户软件、USB系统软件和USB总线接口组成。
客户软件负责和USB设备的功能单元进行通信,以实现特定的功能,客户软件与USB总线不能直接相连,客户软件包括USB设备驱动程序和界面应用程序两部分。
USB系统软件负责和USB逻辑设备进行配置通信,并管理客户软件启动的数据,一般包括USB总线驱动程序,USB主控制驱动程序和USB主机软件三个部分,由系统提供。
USB总线接口包括主控制器跟集线器两部分,其中主控制器是负责完成主机和USB设备间的数据实际传输。
设备部分:由三个功能模块组成,分别是USB总线接口、USB逻辑设备、功能单元。
功能单元看作是一个接口的集合;
USB 逻辑设备被USB系统软件看作一个端点的集合;
USB总线接口是USB设备中的串行接口引擎(SIE)。
五、常见术语:
- 设备:设备代表USB设备,它由一个或多个配置组成,设备描述符用于说明设备的总体信息,并指出其所包含配置的个数。
- 配置:使用USB设备前,必须为其选择一个合适的配置,如USB高消耗、低消耗模式分别对应一个配置,配置描述符用于说明USB设备中各个配置的特性。
- 接口:一个接口可以包含一个或多个接口,接口就是一个端点的集合,接口描述符用于说明USB设备中各个接口的特性。
- 端点:端点是USB设备中实际物理单元,USB传输就是在主机和USB设备各个端点之间进行的。
- 管道:主机软件(数据缓冲区)和USB设备的各个端点之间的数据传输链接,它是两者之间通信流的抽象。然而,实际的数据传输是由USB总线接口层来完成的。管道和USB设备中的端点一一对应,并且各个管道的数据传输是相互独立的。