QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1859|回复: 2

请教 CHW75 一个关于USBTEST的问题

[复制链接]
发表于 2005-9-12 17:00:38 | 显示全部楼层 |阅读模式
在你写的USBTEST 测试程序的整个文件包里
你用BUSHOUND 监视PC的USB端口,并有一个usbtest-bushound.txt 文件里面有监视的数据:
13.1  DI       04           .                                        1.1.0        
13.0  CTL     a3 00 00 00  GET STATUS               2.1.0(2)     
                   02 00 04 00                                     2.1.4        
13.0  DI       01 01 01 00  ....                               2.2.0        
13.0  CTL    23 01 10 00  CLEAR 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 [6]=0X04
在你的 standard device request里有个处理函数U8 UsbGetStatus(U8 *SetupPkt)对它进行处理,其中有个判断
                 if(SetupPkt[6]!=2)
                return 1;      
按我的理解就会执行这条指令,错误返回 ,是这样的吗?
发表于 2005-9-12 18:30:54 | 显示全部楼层
你看的停仔细的,这个程序大部分是zhaoic提供的,我主要是做移植的工作。
我认为:
(1)  a3 00 00 00 02 00 04 00 是USBTEST程序里接收到那8个字节 SetupPkt ,但只是get status,除了get status,还有其他的标准的usb设备请求命令。在代码中有如下标准usb设备请求命令,主要通过SetupPkt[1]判断:
U8 (*StdDevReq[])(U8 *SetupPkt) = {
        UsbGetStatus,
        UsbClrFeature,
        UsbReserved,
        UsbSetFeature,
        UsbReserved,
        UsbSetAddress,
        UsbGetDescriptor,
        UsbReserved,
        UsbGetConfiguration,
        UsbSetConfiguration,
        UsbGetInterface,
        UsbSetInterface,
        UsbReserved,
        UsbReserved,
        UsbReserved,
        UsbReserved
};
(2)SetupPkt [6]=0X04 表示设备(lumit4510)向主机回送字节数,
在usbtest-bushound.txt 中,在get status的下一行四个数据就是的。
例如:
  13.0  CTL    a3 00 00 00  GET STATUS               2.1.0(2)     
               02 00 04 00                           2.1.4        
  13.0  DI     01 01 01 00  ....                     2.2.0  
其中,DI     01 01 01 00 就是对get status的响应。
(3)if(SetupPkt[6]!=2)
return 1;
我认为它表示不是标准的请求命令,见代码
if(!StdDevReq[SetupPkt[1]&0xf](SetupPkt));
    return;
至于为什么这样编程,我也不是很明白。
可能实现这个程序的初衷并不是为实现点灯测试程序,而只是用点灯例子来验证这个程序中的部分功能吧?
回复

使用道具 举报

 楼主| 发表于 2005-9-13 16:33:24 | 显示全部楼层
按你和我的理解那就是执行了
if(SetupPkt[6]!=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的通行协议问题啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-25 10:47 , Processed in 0.080933 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表