CH34X OTG,32字节 因buffer 大小,数据接收异常

您好,我们一直在用Ch34x芯片,并且应用在 安卓OTG  与我们的设备 进行通信。

之前一直很稳定,因为 我们的协议帧 长度固定10字节 or 130字节,后面  我们 在其它项目中,发出 不定长的数据,发现一个异常情况;

场景背景如下:

1.android 代码 我们目前 不是直接用的 sdk

2.我们有个线程 在读取 数据,我们的buffer,usbdata 长度为1024. 

CH34X问题.jpg


我们可以正常收发数据,并且在我们项目中验证了 3-4年都没问题。

现在 新情况为:我们新的项目中 与设备端 通信采用 非定长 协议(即 在协议中 约定帧长,动态解析),我们发现 当设备 发来32 字节的数据时,我们居然 收不到数据。  设备一直发32,一直收不到数据,直到  撑满1024的buffer,才一股脑的 从安卓底层上传数据上来。

针对此情况,我将接收buffer 长度调成 32字节,此时可以兼容此情况。但是 依旧存在一个问题:当设备端 发来 200+ 数据时,此时 铁定丢包。

请问有没有好的解决办法


上面照片可能看不清,补发一张。

现象为:

  1. 当我们 将 usbdata  = new byte[32]; 时,并且 mUsbRequest.queue(buf, usbdata.length) 能正常接收 32字节的数据

       但是有隐患: 设备发长数据时,会丢包

2.当我们 将 usbdata = new byte[1024]时,并且  mUsbRequest.queue(buf, usbdata.length),无法接收到 32字节的 固定长数据,感觉被缓存到了 底层? 直到 被撑满 usbdata 才会上报!



image.png


您好,如上情况是因为初始化CH340设备的时候,没有开启0长度包上传功能,导致按照1024长度读取USB数据时,遇到端点整数倍大小的串口数据无法返回。

1、安卓工程师联系您这边增加1条设备配置指令可解决此问题,已私信您;

2、使用USB和串口传输效率更高,端点更大的USB转串口芯片,如CH343解决;


好的,已经添加。感谢支持


请问解决了吗,我目前也遇到这个问题,大于和小于32字节的可以收到,等于32字节的串口就收不到


晕,照着安卓的DEMO写了个CH340串口调试app,今天正好看到,试了下也是32字节无法接收,发送没有问题。

DEMO程序好像可以,没看到哪个设备配置指令啊,能说明下吗


我是用registerDataCallback回调里获取串口接收数据的


您好,可直接对接安卓同事,联系方式已私信您。


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