OMAP1710 USB模块,这里我选择的模式是6pin从模式,外部tranciver(TUSB1105),作device用。是不用OTG的。
我用bushound抓的数据显示在set_feacter之后的就一直是get_status,怎么也不能到set_descriptor,
但我的firmware里的串口打印却显示,在set_up这个与host端通信的中断中,直接就到set_descriptor命令去了。
之后中断就一直在endpoint0_RX0里,重复的进。
请问是什么原因?
用bushound抓到的数据是这样的:
Device Phase Data Description Cmd.Phase.Ofs(rep)
------ ----- -------------------------------------------------- ---------------- ------------------
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 1.1.0(2)
11.0 DI 01 05 01 00 .... 1.2.0
11.0 CTL 23 01 10 00 07 00 00 00 CLEAR FEATURE 3.1.0
11.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 4.1.0
11.0 DI 00 05 00 00 .... 4.2.0
11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 5.1.0
11.0 DI 00 05 00 00 .... 5.2.0
11.0 CTL a3 00 00 00 03 00 04 00 GET STATUS 6.1.0
11.0 DI 00 05 00 00 .... 6.2.0
11.0 CTL a3 00 00 00 04 00 04 00 GET STATUS 7.1.0
11.0 DI 00 05 00 00 .... 7.2.0
11.0 CTL a3 00 00 00 05 00 04 00 GET STATUS 8.1.0
11.0 DI 00 05 00 00 .... 8.2.0
11.0 CTL a3 00 00 00 06 00 04 00 GET STATUS 9.1.0
11.0 DI 00 05 00 00 .... 9.2.0
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 10.1.0(2)
11.0 DI 01 05 00 00 .... 10.2.0
11.0 CTL 23 03 04 00 07 00 00 00 SET FEATURE 12.1.0
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 13.1.0
11.0 DI 00 85 11 00 .... 13.2.0
11.0 CTL 23 01 14 00 07 00 00 00 CLEAR FEATURE 14.1.0
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 15.1.0
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 16.1.0(2)
11.0 DI 00 85 01 00 .... 15.2.0
11.0 DI 00 85 01 00 .... 16.2.0
11.0 CTL 23 01 10 00 07 00 00 00 CLEAR FEATURE 18.1.0
11.0 CTL a3 00 00 00 08 00 04 00 GET STATUS 19.1.0
11.0 DI 00 05 00 00 .... 19.2.0
11.0 CTL a3 00 00 00 09 00 04 00 GET STATUS 20.1.0
11.0 DI 00 05 00 00 .... 20.2.0
11.0 CTL a3 00 00 00 0a 00 04 00 GET STATUS 21.1.0
11.0 DI 00 05 00 00 .... 21.2.0
11.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 22.1.0
11.0 DI 00 05 00 00 .... 22.2.0
11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 23.1.0
11.0 DI 00 05 00 00 .... 23.2.0
11.0 CTL a3 00 00 00 03 00 04 00 GET STATUS 24.1.0
11.0 DI 00 05 00 00 .... 24.2.0
11.0 CTL a3 00 00 00 04 00 04 00 GET STATUS 25.1.0
11.0 DI 00 05 00 00 .... 25.2.0
11.0 CTL a3 00 00 00 05 00 04 00 GET STATUS 26.1.0
11.0 DI 00 05 00 00 .... 26.2.0
11.0 CTL a3 00 00 00 06 00 04 00 GET STATUS 27.1.0
11.0 DI 00 05 00 00 .... 27.2.0
11.0 CTL a3 00 00 00 07 00 04 00 GET STATUS 28.1.0
11.0 DI 00 85 00 00 .... 28.2.0
11.0 CTL a3 00 00 00 08 00 04 00 GET STATUS 29.1.0
11.0 DI 00 05 00 00 .... 29.2.0
11.0 CTL a3 00 00 00 09 00 04 00 GET STATUS 30.1.0
11.0 DI 00 05 00 00 .... 30.2.0
11.0 CTL a3 00 00 00 0a 00 04 00 GET STATUS 31.1.0
11.0 DI 00 05 00 00 .... 31.2.0
11.0 CTL 80 00 00 00 00 00 02 00 GET STATUS 32.1.0(6)
11.0 DI 01 00 .. 32.2.0
而在底层却收到一个set_descriptor的命令,然后就一直进IRQ_SRC.EP0_RX中断,直到PC等待超时。
我觉得我的get_status回的命令不太对,找不到原因,各位大大帮忙看看。谢谢
而且firmware从DATA中读到的数据一直都是set_descriptor的命令。
是不是从DATA中读数据的速度不够快?
问题应该是集线器未能在设备和主机之间建立一个信号通路
Ti 的片子就是麻烦 很多pin 是复用的 你仔细检查下 寄存器配置
bushound只能监控能识别的USB设备数据流,所以在这个阶段是抓不到SET_UP包的信息的,在FW里串口打印能收到GET_DESCRIPTOR命令,但三次之后,设备就挂起了,用示波器看能看到有波形发出,但不能辨认。麻烦。没有USB分析仪的日子真难过
大家有没有什么好的建议?