mirror of
https://gitee.com/Vancouver2017/luban-lite-t3e-pro.git
synced 2025-12-15 19:08:54 +00:00
22 lines
1.5 KiB
ReStructuredText
22 lines
1.5 KiB
ReStructuredText
USB 枚举
|
||
===========================
|
||
|
||
当我们了解了 usb 设备请求以后,就可以来学习下 USB 设备的整个枚举过程了,看看是如何枚举出一个串口、鼠标、u盘等设备了。枚举过程中主机会发送设备请求来获取相关信息(也就是描述符),具体发送哪些,参考下图。
|
||
|
||
.. figure:: img/usb_enum.png
|
||
|
||
- 首先设备接上 USB 线,然后插上电脑
|
||
- 设备插上以后上电,处于供电状态
|
||
- 主机通过 D+/D- 识别到设备插入
|
||
- 对设备进行复位
|
||
- 主机发送 **获取设备描述符请求**
|
||
- 可选的复位操作
|
||
- 主机发送 **设置设备地址请求**
|
||
- 主机发送 **获取配置描述符请求**,可能会获取多次,无所谓
|
||
- 主机发送 **获取字符串描述符请求**,正常会获取3个字符串,如果后面的描述符中指定了字符串,则继续获取指定的字符串
|
||
- 主机发送 **获取设备限定描述符请求**,用来获取在设备工作在其他速度上的请求,如果设备只能工作在全速模式,则必须回复 stall,并且协议栈中一定会打印该请求告诉你此命令设备不支持。
|
||
- 主机发送 **设置配置请求**,对设备的端点进行配置,通常是根据端点描述符中的配置进行设置。
|
||
- 到此标准的设备请求结束
|
||
- 主机根据接口描述符加载对应支持的 class 驱动,如果主机不支持,则会提示该设备找不到驱动
|
||
- 加载完成以后,开始执行该 class 相关的请求
|
||
- 最终进行 class 的数据流传输 |