issue token接收数据等不到中断,会是什么原因?

参考CH375LNK.c改的程序,先是调用host_send()发送数据,issue_token(( endp_out_addr << 4 ) | DEF_USB_PID_OUT)后能收到中断USB_INT_SUCCESS;紧接着调用host_recv()接收数据,issue_token(( endp_in_addr << 4 ) | DEF_USB_PID_IN)后总等不到中断,这可能是什么原因导致的?哪里没有配置好?

谢谢啦!

这个有2中可能性,一种是endp_in_addr端点地址以及TOG位出现错误。导致获取数据不到。另一种可能性就是你OUT数据的时候不符合设备的要求,设备没有反馈给你数据。导致IN数据取不到。


就是说只有ch375 host接收到设备数据才会产生中断?endp_in_addr应该没有错,它的值是从枚举过程中拿到的(0x1),TOG位是什么,麻烦解释一下哈;)


另外接收device来的数据,什么时候知道对方发送完毕?如果对方数据发送完毕,host又issue了token,这样host需要设置timeout,当timeout时才知道device没有数据发送了?


tog指的是toggle data0/data1吧?我两种情况都试过,仍然没有响应。


是的。你发一次IN令牌,会从设备获取到对应端点大小一样的数据,如果数据小于端点大小,那么设备就没有数据了,或者你发IN牌设备一直返回NAK直到超时(时间根据你的设备而定)说明也没有数据,而且数据的多少你事先不知道?!你在发IN牌前OUT数据代表什么意思什么格式?告诉你的设备返回什么样的数据?


发out数据是一个状态查询status query消息,要求设备返回一个状态报告。和设备的交互都是这样类似的消息,out一条command,等待一条response,这种模式下用ch375怎么编程方式比较好?

另外我想确认一下,如果发了一条IN令牌,usb设备没有响应,就不会受到ch375的中断吗?如果usb设备返回了NAK,会收到中断吗?


IN数据的多少不太好确定,因为要连不同厂家的设备,所以不能假定每个厂家回复都是同样大小的数据。


那就需要确定问题在什么地方,例如把你的设备接到计算机上面,先看下计算机发送什么数据,你按照这个数据发送下去在去取数据,看下是否可以取上来。


用计算机连接设备可以取上来。现在通过ch375发送一条和计算机一模一样的status query命令,却一直等不到ch375的中断。这个时候如果试图去读ch375的数据,就会一直读到0x14(前面out token的USB_INT_SUCCESS)。

另外说明一下,我们是用lpc2214和ch375连接的,枚举过程已经成功,中断一直处于打开方式。

还有什么好的调试方式?如查看某些ch375的状态,或者用usb monitor?比较急,谢谢贵公司。。


用bushound抓了下pc和设备的通信过程,其中有很多vendor request,而且设备用的芯片是cp2102,大概和这有关系吧? 网上搜了一下,发现cp2102似乎有点特殊的。看到论坛上的这篇文章:http://wch.cn/bbs/View.asp?T=1&S=101&I=52514,得知贵公司有CH374操作CP2102的例子程序,麻烦给我发一份,如果有ch375和cp2102的例子更好:) 谢谢!

我的邮箱个人信息保护,已隐藏


和CP2012通信前面是需要设置波特率以及设置串口的位数,包括数据位,起始位以及停止位等等,之后完成这些设置之后才能通信的。UploadImages/201314840336.rar


谢谢!


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