热度 40
2010-3-18 11:31
5701 次阅读|
21 个评论
本篇 基于固件代码的开发及移植过程中可能引起的 USB 枚举失败的原因进行分析。 数据采集设备:“ HD-USB 12 ” 全速 / 低速 USB2.0 协议分析仪 一、 如图 1 所示的 USB 枚举失败 1 ) Index :表示主机向默认地址发送 GET_DESCRIPTOR 指令包。 2 ) Index :表示设备默认地址端点不可用。 3 )由上我们可以推断出 固件代码对 GET_DESCRIPTOR 指令包无响应。 (图 1 )(本数据由 HD-USB12 USB 协议分析仪采集) 二、 如图 2 所示的 USB 枚举失败 1 ) Index :表示主机向默认地址发送 SET_ADDRESS 指令包。 2 ) Index :表示设备完成 SET_ADDRESS 指令后,给主机发送一个空应答。 3 ) Index :表示主机向地址 DEC=01 重复发送 SET_DESCRIPTOR 指令包,但设备无任何应答,因此该事务包设备并没有接收到。 4 )由上我们可以推断出固件中设置地址的代码执行失败。 (图 2 )(本数据由 HD-USB12 USB 协议分析仪采集) 三、 如图 3 所示的 USB 枚举失败(图 3 为过滤掉 IN + NAK 及 SOF 包后的数据) 1 ) Index :表示主机向默认地址发送 SET_ADDRESS 指令包。但设备对该指令答,无应答。 2 )由上我们可以推断出 固件代码对 SET_ADDRESS 指令包无响应或响应没发送空应答。 (图 3 )(本数据由 HD-USB12 USB 协议分析仪采集) 四、 设备发送给主机的 描述信息不完整,如少发送接口或端点信息等导致枚举失败。这要求分析所有采集到的数据才能发现问题。由于数据量较大,就不用图片说明了。 以上是根据本人开发过程中曾经碰到的问题进行的总结分析,在实际情况中枚举失败的原因很多,不可能一一列出,但只要有一台总线协议分析设备能抓取数据进行分析是很容易找到原因的。 另外,附件中上传了一份《“ HD-USB12 ”全速 / 低速 USB2.0 协议分析仪技术文档》,有需要的同学可以下载。 http://forum.eet-cn.com/FORUM_POST_10012_1200154619_0.HTM