阅读:1723回复:5
D12的设备描述符问题(30分)
D12的设备描述符问题,按大家的意思我是这样理解的,设备描述符有18个字节,而一次性只能发16个字节,然后主机会使D12产生中断(ep0tx),在此中断中发送最后两个字节,实际上是不是这样?是PC机总线使D12产生中断才传上最后两个字节吗?
枚举成功了,可以正确地载入驱动程序,也可以正确运行应用程序。但我测试在中断中发送两个字节不是描述符中的最后两个字节(测试方法就是用变量记下发送的这两个字节,然后从主输入端点将它传到PC机来看),测试出的两个字节是9和2。但实际上是0和25,为什么呢,难道测试方法不对吗?但用同样的方法测出发送的 前16个字节却是相同的,怎么回事啊? 另,busHound是不是并不能完全捕获数据啊?看我得到的数据,就没有SetAdress啊,但我能测试出D12 是产生了SetAdress中断,而且GET DESCRIPTR好象也不只这么几次。如何来解释呢 附: 用busHound捕获得 12 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 0us 1.1.0 12 DI 12 01 00 01 - dc 00 00 10 ........ 4.7ms 1.2.0 71 04 66 06 - 00 01 00 00 q.f..... 1.2.8 00 19 .. 1.2.16 12 CTL 80 06 00 02 - 00 00 09 01 GET DESCRIPTR 131us 2.1.0 12 DI 09 02 2e 00 - 01 01 00 60 .......` 6.8ms 2.2.0 f0 09 04 00 - 00 04 dc a0 ........ 2.2.8 b0 00 07 05 - 81 03 04 00 ........ 2.2.16 0a 07 05 01 - 03 04 00 0a ........ 2.2.24 07 05 82 02 - 40 00 0a 07 ....@... 2.2.32 05 02 02 40 - 00 0a ...@.. 2.2.40 12 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 26us 3.1.0 12 CTL 80 08 00 00 - 00 00 01 00 GET CONFIG 3.2ms 4.1.0 12 DI 01 . 3.7ms 4.2.0 12 CTL 81 0a 00 00 - 00 00 01 00 GET INTERFACE 22us 5.1.0 12 DI 00 . 3.9ms 5.2.0 |
|
最新喜欢:![]() |
沙发#
发布于:2003-08-05 08:48
控制端口一定要有中断才能工作!所以,最后2byte你的描述是对的。set address是一定有的,busbound经常抓不到。GET DESCRIPTR里:80 06 00 01 - 00 00 12 00 是获取设备描述符。80 06 00 02 - 00 00 09 01 是读取配置描述符,80 06 00 02 - 00 00 ff 00是读取描述符集合。
|
|
板凳#
发布于:2003-08-05 09:48
我用的不是d12,所以不知道说的对不对
1。你说的描述符的问题,会不会你传回来的CRC,而不是描述符的后2位? 2。我用busband就很好啊,基本都能抓到 你可以试试把usb mass storage control也选上 3。还有你的SET CONFIG 后,怎么还有GET CONFIG ? 这会就应该发6字节的inquiry了啊 |
|
地板#
发布于:2003-08-05 12:23
楼上:操作次序与驱动程序有关,不同的驱动有不同的操作次序。
楼主:请检查一下第一次返回16字节数据之后,到下一次中断返回剩下的两字节数据之间,是否改变了设备描述符的指针。 |
|
地下室#
发布于:2003-08-05 15:17
买只usb bus analyzer吧,bushound总是不太好用的。
catc公司出的,买只支持high speed transfer的。 |
|
5楼#
发布于:2003-08-06 00:05
我对这两Bytes的数据是这样认为的:
PC是一次性将描述符的18Bytes全传至设备端(因为从Bus Hound capture到设备端的数据没有发两次)。是USB芯片产生了两次中断。 所以,在中断程序中要作好接收数据超过一个包大小的准备. 不知我的认为是对是错,请各位大侠指正。 |
|