一、USB总体概况
1.1、USB通信过程简介
- 设备插到主机上
- 主机开始检测设备类型(高速/全速/低速)
- 复位设备
- 主机开始对设备枚举(根据枚举得到的各种信息加载合适的驱动程序,比如根据信息知道是一个鼠标设备,则加载鼠标的驱动程序对接下来的数据进行处理)
- 枚举完成后主机要发送令牌包(IN / OUT)查询有效端点是否有数据,有数据时设备自然会返还给主机
1.2、USB枚举过程简介
- 主机获取设备描述符(部分)
- 主机对从机设置设备地址(非零,相当于我们的学号id)
- 主机再次获取从机设备描述符(全部)
- 主机获取配置描述符(了解从机配置,接口,端点)情况
- 如果有字符串描述符还有获取字符串描述符
- 设置配置请求,就是激活配置,如果没有这一步对应的配置就不可用
- 针对不同的类,获取它们独特的类描述符(比如HID报告描述符)
注意:
- 上面的枚举1-4,6步骤是必须的,
- 主机和从机通信时,从机时不能主动发数据给主机的,必须要等主机给从机发送令牌包后,根据主机的需求发送相应的数据
1.3、USB 配置 接口 端点 的关系
1、一个设备可以有多个配置,不同的配置对应不同的功能
比如,一个USB接口的CD-ROM,作为一个设备,
它具有两种功能,1读取光盘 和 2播放CD,所以有2个Configuration描述符
2、一个功能的实现要涉及许多接口,
比如当CD播放机使用时,需要音频接口,同时还需要控制CD机的接口。
3、一个接口又有许多端点组成,一般真正通信都是针对端点进行的,比如用端点0来进行控制枚举传输
stm32 支持8个双向端点,16个单向端点,每个端点只能时一个方向(OUT / IN),除了端点0
、
二、区分高速全速 低速设备的方法
d+上面接电阻:全速/高速设备 d- 上接电阻:低速设备
、
三、USB设备插拔检测机制
3.1、没有插上usb设备主机情况
- D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;
- 同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态
3.2、 插上usb设备时
当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了
主机必需在驱动