USB枚举过程描述


 1USB连上电脑(实际是集线器HUB),但是还没有上电。也就是说VCC还没有电压,到VCC上有5V电压有一个很短的延时过程。该过程主机PCHUB通信。

2USB上电,但是还没有被复位。此时不能响应USB任何事务,也没有被分配到任何设备地址,包括默认地址。集线器通过检测D+,D-上的电压来判断是否有新的USB设备连接。当检测到有新的USB设备连接时,报告给PC。该过程主机和HUB通信。

3】复位USB总线。PC通知HUB复位USB总线,获得传输模式低速or全速or高速。复位后,USB设备获得一个默认的设备地址号0。此过程PCHUB通信。

4USB设备获得地址号0后,可使用该地址号进行某些事务处理。 使用地址号0,控制传输,端点0,主机开始和USB设备功能层开始通信。 USB功能层是USB总线结构中的一个,USB总线结构由USB功能层,USB设备层,USB接口层构成。USB功能层,主要负责数据传输操作,就是控制传输,中断传输,块传输,同步传输。

5】主机开始获得USB设备的信息(例如刚开始要获得USB控制传输所支持的最大数据包长度),那么就要向USB设备发命令(发送GetDescription获得设备描述符信息),于是启动一个USB事务处理,而USB事务处理分为3个阶段:

             令牌阶段

             数据阶段

             握手阶段

       也就是说,这一步中,主机发送GetDescription请求读取设备描述符,获得USB控制传输所支持的最大数据包长度(只需读取前8个字节即可),这是一个USB事务,既然是事务,那么所有的USB事务必然从令牌包开始,于是USB固件首先等待令牌包到来,然后处理相应的命令。这样,主机通过发送GetDescription请求(USB 11中标准请求之一 ),读取设备描述符DeviceDscr,目的是获取控制传输支持的最大字节数(第8个字节),一旦检测到这个数,主机复位USB总线并开始进入枚举过程.

6】至此,开始进入枚举过程。主机向USB设备发送SetAddress请求,为其分配一个新的,唯一的设备地址(1127,总共128个)。以后,USB将使用这个新的地址号与主机通信。

7】主机循环向USB设备发出GetDescription请求,读取所有的描述符,获得该USB设备的全部配置信息。首先读取设备描述符DeviceDscr全部字段,然后读取配置描述符Configuration,接口描述符,端点描述符,其他各种设备类描述符以及自定义描述符等。

8】然后主机根据读取的PID,VID选择一个合适的驱动加载,如果第一次使用,则提示发现新硬件。

9】加载了USB驱动后,主机发送SetConfigration()请求为该USB设备选择合适的配置,主机为该USB设备选择一个配置值,一个接口,一个可替换设置值。

10】至此,USB枚举结束。

点击数: 1917    打印  添加到收藏   发布时间: 2014-09-26




上一篇:也说“筷搜”,靠谱吗?
下一篇:谐波失真及评价方法





» 相关内容
  关于静电防护的一些解释
  串口通讯影响鼠标指针乱蹿的终..
  GC气相色谱原理简介-物理分离..
  使用STM32提供的DSP库函数进行..
  设置VB.NET 窗体的全局热键
  产生随机注册名称和信息的方法
  wintoUSB实现独立操作系统随你..
  提升FPGA扇出能力方法及扇出效..
  原子力显微镜的那些事儿
  FPGA中nCEO引脚的重新分配
  PIC18F4550实现鼠标操作代码
  .Net下PostMessage发送字符串..
  字符型数组与字符串互相转换.n..
  Sendkeys你用对了吗,不再那么..
  VS2008集成Python新建工程模板..