CH376接收大数据时出现丢数据现象,帮忙分析下看[原创]

现在有个问题,就是我的CH376做主机,连接CP2102(USB转串口芯片)。 通过上位机串口软件向CP2102发数据,然后数据转发给CH376,再通过CPU透传。 现发现CH376接收CP2102过来的稍大数据的时候,比如600多字节。会出现丢数据的现象,或是丢包现象。丢数据一般是丢掉最后一包的最后几个字节,丢包一包是丢了中间的一个包(每包最大64字节接收) CH376开始接收之前的超次寄存器设置如下: xWriteCH376Cmd (CMD20_SET_RETRY); //设置重试次数 xWriteCH376Data( 0x25 ); xWriteCH376Data( 0xCA ); //这里为超时3s 试50次

然后USB接收处理是在外部中断里面处理; USB数据查询是通过定时器来查询,每个500ms查询一次。 请问这样的设计思路是否有问题?

丢数据的概念是 比如一包数据是649字节,CH376会出现 最后几个字节的数据没接收到现象,有时候干脆一包。

而且把定时查询USB的时间缩短,比如缩到50ms查询一次,结果也是出现接收丢包现象。


按照标准的USB协议来说的话,对于全速设备一般是1MS一个包,一个包按照你描述符描述的可以是64字节,所以按照你说的59MS查询一次的话肯定也是会出现丢数据现象的,设置的定时时间应该为1MS或者少于1MS。因为对于USB主机来说不并不知道设备什么时候有数据来。所以需要不断的去发送IN的令牌包(一般为1MS),如果设备未有数据,则IN令牌包返回0X2A(NAK)的中断状态。如果有数据则返回0X14(ACK)。


嗯,明白了,查询间隔时间上我再调试下,应该是这个问题


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