CH579例程USB device问题

测试了CH579的USB device例程,是官网下载的CH579EVT.ZIP。发现两个例程电脑都无法识别,显示未知设备。电脑是win7 64位系统,有问题吗?板子是可以正常通过USB接口下载程序的,硬件肯定没问题。两个例程应该一个是HID的一个vendor的,照道理HID也不需要装驱动啊,请帮忙看看什么原因,论坛找了一圈看没人问这个问题,程序估计也没问题。用jlink调试发现R8_USB_INT_FG返回是0x09。

usb.PNG

Usb的代码是不能仿真的,仿真会导致枚举失败。厂商自定义设备需要安装372的驱动。建议你用isp工具直接下载运行。



你好,我不是要下载程序,我是调试USB的功能。

我不用中断,用加打印测试了一下,还是有点问题。

我在CompoundDev例程的void USB_DevTransProcess( void )里所switch分支加了打印,从串口的输出情况看,打印内容如下:可以看出进入了枚举状态,但是主机下发的SetupReqCode一直是0,没有取设备描述符的0x06。

UIS_TOKEN_SETUP

SetupReqCode =0

USB_GET_STATUS

RB_UIF_TRANSFER

UIS_TOKEN_IN!

SetupReqCode =0

RB_UIF_TRANSFER

UIS_TOKEN_OUT!

SetupReqCode =0


后来简单修改了一下代码:

case USB_GET_STATUS:

printf("USB_GET_STATUS\n");

pEP0_DataBuf[0] = 0x00;

pEP0_DataBuf[1] = 0x00;改为0x06

这样修改后siwth分支能进入USB_GET_DESCRIPTOR,但是pSetupReqPak->wValue=0,所以也是不对,帮忙看看是什么问题,谢谢,以下是修改代码后的串口打印:

[22:25:28.043]收←◆RB_UIF_TRANSFER

UIS_TOKEN_SETUP

SetupReqCode =6

USB_GET_DESCRIPTOR



不用中断? USB从机建议用中断来操作,例子是直接可用的,还有中断里面不建议加过多的打印,会影响枚举。


不好意思,说错了,是不用调试,不是不用中断。


正常枚举  USB_GET_STATUS 不用发这个命令

你直接用evt里面提供的hex,不做任何修改,试试能不能枚举

image.png


果然是打印的问题,把打印去掉就可以枚举了,感谢支持!


强调一下,USB枚举阶段对于setup包相应的时间是有要求的,不建议加过多或者过于频繁的打印,会影响设备回包,造成枚举异常。
一般调试可以借助bushound(纯软件,网上可以搜索到),或者使用USB分析仪抓包工具进行USB通讯分析。
http://www.wch.cn/downloads/USB11Monitor_ZIP.html


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