请教 CHW75 一个关于USBTEST的问题
在你写的USBTEST 测试程序的整个文件包里你用BUSHOUND 监视PC的USB端口,并有一个usbtest-bushound.txt 文件里面有监视的数据:
13.1DI 04 . 1.1.0
13.0CTL a3 00 00 00GET STATUS 2.1.0(2)
02 00 04 00 2.1.4
13.0DI 01 01 01 00.... 2.2.0
13.0CTL 23 01 10 00CLEAR FEATURE 4.1.0
02 00 00 00 4.1.4
请问第二行GET STATUS 发出的数据a3 00 00 00 02 00 04 00 是不是USBTEST程序里接收到那8个字节SetupPkt啊?
如果是的话第七个字节即 SetupPkt =0X04
在你的 standard device request里有个处理函数U8 UsbGetStatus(U8 *SetupPkt)对它进行处理,其中有个判断
if(SetupPkt!=2)
return 1;
按我的理解就会执行这条指令,错误返回 ,是这样的吗? 你看的停仔细的,这个程序大部分是zhaoic提供的,我主要是做移植的工作。
我认为:
(1)a3 00 00 00 02 00 04 00 是USBTEST程序里接收到那8个字节 SetupPkt ,但只是get status,除了get status,还有其他的标准的usb设备请求命令。在代码中有如下标准usb设备请求命令,主要通过SetupPkt判断:
U8 (*StdDevReq[])(U8 *SetupPkt) = {
UsbGetStatus,
UsbClrFeature,
UsbReserved,
UsbSetFeature,
UsbReserved,
UsbSetAddress,
UsbGetDescriptor,
UsbReserved,
UsbGetConfiguration,
UsbSetConfiguration,
UsbGetInterface,
UsbSetInterface,
UsbReserved,
UsbReserved,
UsbReserved,
UsbReserved
};
(2)SetupPkt =0X04 表示设备(lumit4510)向主机回送字节数,
在usbtest-bushound.txt 中,在get status的下一行四个数据就是的。
例如:
13.0CTL a3 00 00 00GET STATUS 2.1.0(2)
02 00 04 00 2.1.4
13.0DI 01 01 01 00.... 2.2.0
其中,DI 01 01 01 00 就是对get status的响应。
(3)if(SetupPkt!=2)
return 1;
我认为它表示不是标准的请求命令,见代码
if(!StdDevReq&0xf](SetupPkt));
return;
至于为什么这样编程,我也不是很明白。
可能实现这个程序的初衷并不是为实现点灯测试程序,而只是用点灯例子来验证这个程序中的部分功能吧? 按你和我的理解那就是执行了
if(SetupPkt!=2)
return 1;
这样的话,PC 向开发板 发送了GET STATUS 而ARM 却执行了错误返回,根据ARM 的代码,没有向PC 返回任何的数据,但usbtest-bushound.txt 里却有
13.0 DI 01 01 01 00 .... 2.2.0
所以usbtest-bushound.txt 里的数据和实际ARM的执行好像是矛盾的 啊?
除非 13.0 DI 01 01 01 00 .... 2.2.0 是D12自己向PC发送的而非受ARM的控制。
哎! 有些困惑!好像D12很独立的处理与PC的通行协议问题啊? :?:
页:
[1]