前言

USB也是当前应用比较广泛的设备,本文将挑重点对其做一些概要性的介绍,更详细的了解可以去网上找《圈圈带你学USB》这本书,属于介绍USB的经典之作。

USB分类

1按协议分

Usb1.1 :usb1.1是标准的USB规范,高速方式的传输速率为12Mbps,低速方式的传输速率为1.5Mbps,b/s位传输速度,bps位传输速率。

USB2.0:由USB规范1.1规范演变而来,传输速率达到了480Mbps,足以满足大多数外设的速率要求。

Usb3.0 理论速度大概是5Gbps,实际的话只能根本大不到,但是要比USB2.0快的多

USB3.1 理论速度10Gbps,

注:USB1.0,USB2.0最大输出电流500mA,USB3.0和usb3.1最大输出电流是900mA

2按接口分

android usb 类协议 usb协议分类_数据传输


android usb 类协议 usb协议分类_数据传输_02


android usb 类协议 usb协议分类_总线仲裁_03


Mini USB和micro usb都分为 TYPE-A 和TPYE-B类型,现在经常见的基本都是B类型的

硬件结构

1.引脚

android usb 类协议 usb协议分类_描述符_04


USB使用的是四线制,如上图所示,数据传输通过一个差分双绞线进行传输,另外两根是VCC和GND,为了区分,USB电缆中的线用不同颜色标注。

2电平信号

USB是利用差分信号来表示逻辑1和逻辑0的,定义如下

逻辑1      D+大于2.8V and D- <0.3V
逻辑0      D-大于2.8V and D+ <0.3V

3.USB设备插入检测

android usb 类协议 usb协议分类_总线仲裁_05


如图示,默认主机侧USBD+和D-接了一个下拉电阻,即线上成低电平,当接入低速设备时(低速设备D-接了一个上拉电阻),若检测到D-变为高电平且持续一段时间,则认为接入低速设备,同理,由于全速设备D+接了一个上拉电阻,则检测到D+变为高电平持续一段时间,认为全速设备接入。此处要说明的是低速设备指的是传输速率1.5Mbps,全速设备指的是12Mbps,高速设备指的是480Mbps.USB总线会根据外设情况自由地切换传输速度。

四种传输类型

1.控制传输
控制传输,支持外设与主机之间的控制,状态,配置等信息的传输,为外设与主机之间提供一个控制通道,每种外设都支持控制传输类型,这样主机与外设之间就可以传送配置和命令状态信息。
2.同步传输
又称等时传输,支持有周期性,有限的时延和带宽,且数据传输速率不变的外设与主机间的数据传输,该类型五差错校验,故不能保证正确的数据传输,支持像计算机-电话集成系统和音频系统与主机的数据传输。
3.中断传输
支持像游戏手柄,鼠标和键盘等输入设备,这些设备与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。
4.块传输
支持打印机,扫描仪,数码相机等外设,这些外设与主机间传输的数据量大,USB满足带宽的情况下才进行该类型的数据传输。

描述符

1.USB加载传输
a.当USB设备接入HUB或ROOT HUB后,主机控制器和主机软件能自动检测到设备的接入。
b.然后主机软件读取一系列的数据用于确认设备特征,即读取各种描述符
c.之后主机分配给外设一个单独的地址。地址是动态分配的,每次可能不同。
d.在分配完地址之后对设备进行初始化,初始化完成以后就可以对设备进行IO操作了。
2.什么是描述符
USB的描述符实质上就是对于一个具体设备所有属性,配置,能力等等所有信息的综合,这是一个将数据与数据处理过程分开来的典型例子;设备描述符:主要是指明设备的类型,使用的协议,VID,PID,设备版本号等。

设备描述符:  代表一个USB设备
配置描述符:  说明各个配置的特性,所含接口个数(例如配置成低功耗模式和高功耗模式各占一个配置)
接口描述符:  说明接口的特性(例如光驱使用文件传输时,使用大容量存储接口,播放CD时使用其音频接口)
端点描述符:  数据传输就是在主机和USB设备各个端点之间进行通信的,端点一般由USB接口芯片提供,每个端点的传输方向一般固定。0端点比较特殊(IN,OUT)且只支持控制传输。
字符串描述符:说明一些专用信息,如制造商名称,设备序列号,对USB设备而言可选。

通常一个设备描述符包含多个配置描述符,一个配置描述符包含多个接口描述符,一个接口描述符包含多个端点描述符。

其他一些知识点

1.USB存不存在总线仲裁
当多个从设备主动申请总线访问时需要考虑总线仲裁,但是USB通信是master-slave*N的结构,无论是发送还是接受都是主机先发起,所以不存在总线仲裁的问题。
2.ST进行USB相应库
目前ST标准外设库里面是没有USB库的,CUBE开发库里面有,但是呢,USB有独立于标准外设库之外的相应库使用,名字是“USB-FS 设备固件库”,下面这个链接是使用CUBEMX生成自定义HID的教程