usb的枚举过程是通过控制端点0使用控制传输方式来实现对usb 设备信息的获取和配置的,相对于其他传输方式,控制传输过程相对麻烦些,这里进行下说明。
一、USB控制传输
1 传输过程
usb 控制传输分为三个过程,分别为建立过程、可选的数据过程、和状态过程。
1)建立过程
建立过程细分为3步,分别是 host 发送sendup token ,host发送8字节的控制指令的数据包,device 返回ack应答包。其中数据包的类型必须为DATA0。
2)数据过程
数据过程是可选的,一个控制传输可能没有数据过程。如果有的话,那么其数据过程可以包含一笔或者多笔的数据。不过需要注意的是,如果是多笔数据,这些数据的传输方向是同向的。
比如数据过程是多笔输出数据,其多笔数据的过程为:
(host)OUT包-> (host)DATA1包-> (device)ACK ->(host)OUT包-> (host)DATA0包-> (device)ACK ->(host)OUT包-> (host)DATA1包-> (device)ACK …
其数据包均为OUT包。
比如数据过程是多笔输入数据,其多笔数据的过程为:
(host)IN包-> (device)DATA1包-> (host)ACK ->(host)IN包-> (device)DATA0包-> (host)ACK ->(host)IN包-> (device)DATA1包-> (host)ACK…
其数据包均为OUT包。
3)状态过程
状态过程使用的数据包类型必须为DATA1.
如果有数据过程的话,那么状态过程的传输方向与数据过程是相反的方向,即数据过程如果是输出包,那么状态过程就是输入包,反之,则为输出包。
如果没有数据过程,那么状态过程为输入包。
二、示例
下面展示使用逻辑分析仪抓到的full speed下一个控制传输过程:
1)建立过程
建立过程中的数据包总是DATA0
2)数据过程
3)状态过程
状态过程方向与数据过程方向相反,且数据类型为DATA1类型