stm32 USB知识和代码分析(一)


1.USB基础知识

  • USB:Universal Serial Bus,中文译为“通用串行总线”,USB设备最显著的优点是具有热插拔功能、传输速率快。USB是主从结构的系统,具有主机和设备这两个角色,即Host和Device。此外,还有两类特殊的USB设备,分别是USB集线器设备(USB Hub)和USB OTG设备。
  • USB目前的协议版本有:USB1.0、USB1.1、USB2.0、USB3.0。USB1.0和USB1.1只有低速模式(Low-Speed Mode)和全速模式(Full-Speed Mode),理论上最大传输速率分别为1.5Mbps和12Mbps。USB2.0引入了传输速度更快的高速模式(High-Speed Mode),理论上最大传输速率为480Mbps。而USB3.0在速度的提升上,实现了重大飞跃,最大传输速率理论值高达5Gbps。需要注意的是,这些都是理论值,实际开发过程中,很难达到这些理论值(需要自己去做性能上的优化)。
  • 在实际开发过程中,不同的传输类型有不同的传输速率,每一次的数据交互,都是一个相当复杂的过程,有令牌包的解析、数据包的传输、握手包的回应等等,这些都是额外的消耗,因此,传输速度是不可能达到理论值。USB有四种传输类型,分别是控制传输、中断传输、块传输、等时传输。

2. USB电气特性

2.1 USB信号线

  • USB使用差分传输模式,有两条数据线,分别是:
  • USB数据正信号线,USB Data Positive,即USB-DP线,简写为D+
  • USB数据负信号线,USB Data Minus, 即USB-DM线,简写为D-
  • 剩下的就是电源线(5V-Vbus)和地线(GND)。

2.2 USB主机如何识别设备是高速设备/全速设备/低速设备?

  • 主机的D+和D-都接有15K下拉电阻;全速USB设备的数据线D+接有1.5K的上拉电阻,一旦接入主机,主机的D+被拉高;低速USB设备的数据线D-接有1.5K的上拉电阻,一旦接入主机,主机的D-会被拉高。因此,主机就可以根据检测到自己的D+为高还是D-为高,从而判断接入的设备是一个全速还是低速设备。硬件结构图如下:
  • 全速设备/高速设备:硬件部分能区分低速和全速,软件协议上区分高和全速设备,刚开始设备接入后,识别为全速模式,但是设备支持高速,此时会通过某个协议向主机通告,如果主机也支持高速,那么两者就会工作在高速模式下,反之全速

3.USB设备分类

stm32解析jesion stm32usb解析_stm32解析jesion

  • 不同的类有不同的用途,不同的应用场合,对应不同的产品形态。有自己特殊的描述符,比如对于HID类,有报告描述符。有自己特殊的类请求,比如UAC的设置音量请求。

4.USB数据传输方式

  • USB总线是串行总线(跟串口一样),数据是一位一位地在数据线上进行传输的。LSB在前,最低位先发出,接下来是次低位,最后才是最高位(MSB),差分信号抗干扰。

5.总结以上文字

  • USB历史理论知识
  • USB版本:1.1,1.2 (低速:1.5Mbps),2.0(全速:12Mbps,高速:480Mps)和3.0(5Gbps)
  • USB传输类型:控制传输、中断传输、块传输、等时传输。传输的类型不一致,速度和延迟也都不太相同,后面会说
  • USB设备全速和低速靠硬件,软件上识别全速和高速