本篇基于固件代码的开发及移植过程中可能引起的USB枚举失败的原因进行分析。
数据采集设备:“HD-USB12”全速/低速USB2.0协议分析仪
一、如图1所示的USB枚举失败
1)Index[666 - 668]:表示主机向默认地址发送GET_DESCRIPTOR指令包。
2)Index[670 - 671]:表示设备默认地址端点不可用。
3)由上我们可以推断出固件代码对GET_DESCRIPTOR指令包无响应。
二、如图2所示的USB枚举失败
1)Index[697 - 699]:表示主机向默认地址发送SET_ADDRESS指令包。
2)Index[701 - 703]:表示设备完成SET_ADDRESS指令后,给主机发送一个空应答。
3)Index[705 - 710]:表示主机向地址DEC=01重复发送SET_DESCRIPTOR指令包,但设备无任何应答,因此该事务包设备并没有接收到。
4)由上我们可以推断出固件中设置地址的代码执行失败。
三、如图3所示的USB枚举失败(图3为过滤掉IN + NAK及SOF包后的数据)
1)Index[694 - 696]:表示主机向默认地址发送SET_ADDRESS指令包。但设备对该指令答,无应答。
2)由上我们可以推断出固件代码对SET_ADDRESS指令包无响应或响应没发送空应答。
四、设备发送给主机的描述信息不完整,如少发送接口或端点信息等导致枚举失败。这要求分析所有采集到的数据才能发现问题。由于数据量较大,就不用图片说明了。
以上是根据本人开发过程中曾经碰到的问题进行的总结分析,在实际情况中枚举失败的原因很多,不可能一一列出,但只要有一台总线协议分析设备能抓取数据进行分析是很容易找到原因的。
文章评论(0条评论)
登录后参与讨论