CH375B外置固件模式程序调试新问题

这几天一直在调试CH375B的外置固件模式程序,内置固件模式已经调试好了(说明硬件没有问题)。

外置固件模式程序调试中发现,在0地址状态时发送了设备描述符的前8个字节给PC,按USB协议规定,之后PC会发一个新的工作地址给USB设备,即应该进入USB_INT_EP0_SETUP中断状态下的DEF_USB_SET_ADDRESS,但是调试中发现是进入了USB_INT_EP0_IN,之后就再没有中断了,请问在此时USB_INT_EP0_IN中断应该处理些什么呢? case USB_INT_EP0_IN: if(mVarSetupRequest==DEF_USB_GET_DESCR){ //描述符上传 mCh375DesUp(); mCh375Ep0Up(); } else if(mVarSetupRequest==DEF_USB_SET_ADDRESS){ //设置地址 CH375_WR_CMD_PORT(CMD_SET_USB_ADDR); CH375_WR_DAT_PORT(VarUsbAddress); //设置USB地址,设置下次事务的USB地址 } CH375_WR_CMD_PORT (CMD_UNLOCK_USB); //释放缓冲区 break;

这是贵公司例程中的程序

实际上按照USB的协议里面首先是上传9个字节的设备描述符告诉计算机端点0的大小是多大,在接着是设置地址,完了之后在获取完整的设备描述符。在你USB_INT_EP0_IN上传的时候,首先你需要将数据写到端点0上传缓冲区里面去,启动发送,等待上传完成,当上传完成之后,首先发送解锁的命令(USB_UNLOCK),完了之后在将数据写到端点0上传缓冲区里面去就可以了。


我最想知道的是:什么时候可以进入USB_INT_EP0_SETUP中断状态下的DEF_USB_SET_ADDRESS状态,能进入USB_INT_EP0_IN状态,说明设备描述符的前8个字节应该是成功上传到了PC,在USB_INT_EP0_IN状态中已经执行了USB_UNLOCK,但是在第二次进入USB_INT_EP0_SETUP中断时读取的EP08字节还是上传的设备描述符的前8个字节,感觉是这8个字节没有被释放


PC通常是先获取部分设备描述符(目的是获取设备描述符的总长度,以及控制端点的大小),然后就会给设备设置地址,即进入USB_INT_EP0_SETUP中断状态下的DEF_USB_SET_ADDRESS状态。 按照贴1中,设置地址后具体出现了什么情况?是出现无法识别的设备,还是其他


目前的情况是无法进入DEF_USB_SET_ADDRESS状态,我觉得应该是第二次进入USB_INT_EP0_SETUP后可以进入DEF_USB_SET_ADDRESS状态,可现在第二次进入后bmReuestType,bRequest等8个字节都是设备描述符的前8个字节,正常的话应该是bmReuestType=0x00,bRequest=0x05.

另外我发现例程中设备描述符的USB版本号是 ,0x10 //USB规范版本信息 ,0x01 这是USB1.1吗?


(1)如果先前上传的设备描述符内容及流程正确的话,那么第二次USB_INT_EP0_SETUP应该是设置地址。程序是否被修改过? (2)是指USB1.1


我用的是2407的DSP,程序结构基本按照例程,但有些小修改,目前程序只编写了部分,但按照USB协议流程,第二次进入USB_INT_EP0_SETUP应该是响应DEF_USB_SET_ADDRESS了。

感觉是EP0的8个字节没有被释放,一直被设备描述符的前8个字节占据了


我们MCS-51的示例是经过测试的,流程绝对是没问题的。 既然移植,有了改动,应该还是程序原因,可以把程序贴出来看看


在进入DEF_USB_SET_ADDRESS这个中断的后,由于没有数据阶段.进入状态阶段CH372上传了零长度的数据包作为ACK,这时候就会进入USB_INT_EP0_IN,在USB_INT_EP0_IN中去设置CH372的地址是因为这样做比较保险,PC正常的接受到ACK应答了.一定要上传0长度的数据,否则进入不了USB_INT_EP0_IN


好的,谢谢大家,我觉得还是程序改动的问题,会仔细检查的


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