CH552 USB Setup包处理问题

我这边使用switch 语句处理Setup包,标准请求UsbSetupBuf->bRequestType应该是0x80,Vendor 的IN,OUT分别是0xC0、0x40才对,但是使用switch 的方法就是没办法枚举成功,系统频率是24M的,是处理速度太慢了吗?

switch语法如下:

switch(SetReqtp) {

    case USB_REQ_TYP_STANDARD | USB_REQ_RECIP_DEVICE | USB_REQ_TYP_IN: 

    。。。。。。。。    

    case USB_REQ_TYP_VENDOR | USB_REQ_RECIP_DEVICE | USB_REQ_TYP_IN:

    。。。。。。。。

    case USB_REQ_TYP_VENDOR | USB_REQ_RECIP_DEVICE | USB_REQ_TYP_OUT:

    。。。。。。。。

    default :break;

}


www.denis-pharm.com/downloads/CH554EVT_ZIP.html

你好,可以参考一下我们EVT中的USB设备例程,具体位置位于USB/device文件夹下


不是,我意思是我这边使用if判断就没问题,但是使用switch语句就有问题。用if也可以实现,但是没有使用switch架构好,我这边是打算修改为switch的。


我这边使用dataflash即时存储收到的端点0的数据,


80 06 00 01 00 00 40 00 

00 05 0C 00 00 00 00 00 

80 06 00 01 00 00 12 00 

80 06 00 02 00 00 FF 00 

80 06 00 03 00 00 FF 00 

80 06 00 02 00 00 2F 00 

00 09 01 00 00 00 00 00 

C0 F5 00 00 00 00 07 00 

40 AA 00 00 00 00 00 00 

40 9C 11 15 22 D9 00 00 


用if语句的数据都没有问题,switch语句的话就会卡在第二个80 06 00 02 00 00 FF 00 这里


你好 需要使用RAM来存储端点0枚举时通讯数据,不能使用dataflash来代替RAM。


这我清楚,端点0是位于xram的0x0000地址了的,CH552没法实时调试,我只能将接收到的Setup包数据临时存储到dataflash来分析的



是不是开优化了,SWITCH在优化级别高时可能会出错


不是优化问题,我目前是使用1级优化,另外,如果使用if语句先判断是否Vendor请求的话,会直接导致设备描述符无效


只有登录才能回复,可以选择微信账号登录