关于CH569使用CH372Device程序实现BULK传输中上位机的CH375ReadEndP返回0的问题

目前情况描述:

1:本人现在使用CH569的与PC实现BULK通讯,其中CH569参考官方代码“CH372Device”和“CH569_BULK_HSPI_Lib”,PC代码参考“USB3.0Demo”,且CH569添加了HSPI传输的部分,每当HSPI收到一个完整的包,则CH569向上位机传输一次数据;HSPI每秒大概会产生1200个4k字节的数据包,所以PC每秒会向CH569进行1200次BULK传输。

2:上位机使用的库是“CH375DLL64.dll”和“CH375DLL64.lib”,软件是QT4.9

,目前问题描述:

1:上位机在循环当中一直使用CH375ReadEndP函数使用EP2向下位机请求数据,运行几秒到几十秒不等的时间后CH375ReadEndP()函数中的ioLength会返回0;在CH569的EP2_IN_Callback函数当中添加Print函数打印运行信息,发现当ioLength返回0后,串口么没有打印CH569的EP2_IN_Callback函数的运行信息,证明CH569并未完成BULK传输。

2:使用BUSBound抓包CH569发现当ioLength返回0的时候USTS先抓到一个C0000011的值,通过查询资料的得知这个值的意思是“The device returned a transaction error (defined for backward compatibility with the USB 1.0).”随后USTS抓到一个值C0010000,这个值的意思是“The USB stack reports this error whenever it completed a transfer because of an AbortPipe request from the client driver.”。

image.png

3:在贵司的技术社区上发现也有人碰到CH375ReadEndP,当时评论说的是“打开设备的函数里 ,有没有调用缓冲上传模式,如果调用缓冲上传模式,读数据可能会返回0”。我在函数CH375OpenDevice当中没有找到开关缓冲上传模式的参数,于是我尝试用函数CH375SetBufUpload和CH375SetBufDownload关闭上下传缓冲区,发现无法解决问题。

4:由于目前的CH375ReadEndP是在一个循环里面一直被调用的,我试着在循环当中添加一个Sleep(1)的延迟,发现CH375ReadEndP函数的ioLength不会返回0且可以程序正常运行,但是读写速度也被极大的降低了(达不到每秒读取1200次),所以添加延迟的方案不太靠谱。

5:现在希望贵司能帮我看看如何解决CH375ReadEndP的ioLength返回0的情况。

您好

您描述的问题还有更多细节需要确认下

如:是在读过程中偶尔有某一次lenth会等于0还是出现状况之后一直都等于0?

您可以与将问题发送至我的邮箱:dxy@wch.cn或拨打我的电话:025-52635387与我联系


只要在读取的过程中出现一次lenth=0的情况,后续的读取操作lenth一直都是0


可以试下调用这个CH375SetTimeout函数设置一下读写超时,设置成1000试一下,正常读写速度不受影响,就是偶发硬件那边上报的慢的话不会超时退出,这样就不会出现CH375ReadEndP函数返回0的情况


我尝试在上位机调用函数CH375SetTimeout,并且设定timeout时间是1000,CH375ReadEndP函数还是会返回0。


您好,可以通过邮箱或者电话联系我哦


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