测试了CH579的USB device例程,是官网下载的CH579EVT.ZIP。发现两个例程电脑都无法识别,显示未知设备。电脑是win7 64位系统,有问题吗?板子是可以正常通过USB接口下载程序的,硬件肯定没问题。两个例程应该一个是HID的一个vendor的,照道理HID也不需要装驱动啊,请帮忙看看什么原因,论坛找了一圈看没人问这个问题,程序估计也没问题。用jlink调试发现R8_USB_INT_FG返回是0x09。
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,不做任何修改,试试能不能枚举
果然是打印的问题,把打印去掉就可以枚举了,感谢支持!
强调一下,USB枚举阶段对于setup包相应的时间是有要求的,不建议加过多或者过于频繁的打印,会影响设备回包,造成枚举异常。
一般调试可以借助bushound(纯软件,网上可以搜索到),或者使用USB分析仪抓包工具进行USB通讯分析。
http://www.wch.cn/downloads/USB11Monitor_ZIP.html