目前情况描述:
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.”。
3:在贵司的技术社区上发现也有人碰到CH375ReadEndP,当时评论说的是“打开设备的函数里 ,有没有调用缓冲上传模式,如果调用缓冲上传模式,读数据可能会返回0”。我在函数CH375OpenDevice当中没有找到开关缓冲上传模式的参数,于是我尝试用函数CH375SetBufUpload和CH375SetBufDownload关闭上下传缓冲区,发现无法解决问题。
4:由于目前的CH375ReadEndP是在一个循环里面一直被调用的,我试着在循环当中添加一个Sleep(1)的延迟,发现CH375ReadEndP函数的ioLength不会返回0且可以程序正常运行,但是读写速度也被极大的降低了(达不到每秒读取1200次),所以添加延迟的方案不太靠谱。
5:现在希望贵司能帮我看看如何解决CH375ReadEndP的ioLength返回0的情况。