你好,
我在使用CH9326进行通讯的时候,发现单片机发送给CH9326的信息几乎都是丢失的,无法顺利传送到计算机上。似乎CH9326对应答的时刻要求非常苛刻,只能收到后立即回送数据,只要单片机从一个子函数中返回再回送数据,计算机就无法接收到。请问能否帮忙分析一下。
我看到演示程序中有Timeout设定,但是不太确定这个超时设定是什么意思,这个超时是哪个环节的超时?另外超时设定的参数解释也不是很清楚,只是简单列举了几个数值,能否解释一下数值的含义。
谢谢
你好,
我在使用CH9326进行通讯的时候,发现单片机发送给CH9326的信息几乎都是丢失的,无法顺利传送到计算机上。似乎CH9326对应答的时刻要求非常苛刻,只能收到后立即回送数据,只要单片机从一个子函数中返回再回送数据,计算机就无法接收到。请问能否帮忙分析一下。
我看到演示程序中有Timeout设定,但是不太确定这个超时设定是什么意思,这个超时是哪个环节的超时?另外超时设定的参数解释也不是很清楚,只是简单列举了几个数值,能否解释一下数值的含义。
谢谢
更新一下:
经过几天无数次的折腾,我大致找到了问题的原因或者一个解决办法。
在单片机程序里面,查询并接收到CH9326发送的数据后,需要马上会送一些信息,一个字节都可以。没有去测试这个时间段有多短,反正程序从读取函数返回后再发送就来不及了。然后函数返回后,可以处理其他数据之后再发送就没有问题,计算机上都可以收到这些发送的内容。如果不这样做,计算机就不会收到数据。
这可能与USB的规范有关系,又或许是超时设定的问题,没有办法确认。
供大家参考。
您好,CH9326的库函数中设定的超时时间是USB操作的超时,如主机发送数据超时未成功或主机超时未读取到串口数据。(开启读线程时超时不起作用)
您反馈的问题并不正常,对于计算机读和写都是独立的,无论何时单片机上传都会读到数据才是正常的,您这个问题大概率时单片机程序问题,如实际并未发送成功。
感谢回复。
对于单片机程序的问题,我一开始也是这么认为的,肯定是我的程序有问题。我也做了几个简单的收发测试程序,工作正常,没有任何问题,可是只要一输入到项目程序里面就不工作,非常怪异。检查了各种可能与通讯冲突的地方,修改测试了无数遍那几行代码,翻来覆去修改所有可能相关的代码,他就是不工作,重写了很多函数也没有效果。我连有符号数到无符号数转换都检查测试,甚至怀疑过编译器,最终发现只要在串口读取指令后面加上指令回送一个字节或者随便什么东西,所有问题都解决了。所以如果说单片机发送不成功导致计算机收不到,也很奇怪。没有道理说在子程序里面发送就可以,返回之后发送就不可以。
关于单片机是否正确发出数据的问题,我用示波器检查了,即使计算机无法收到数据的情况下,可以看到单片机的数据脚是发出了脉冲信号的。
之前测试中还发现过一个怪现象,就是有的时候第一次通讯的数据包可以收到,再之后就不行了。不过没有发现什么规律,因为不能持续传输,也就没有继续深究。
关于USB操作的超时,大致了解了。如果说主机发送的时候可能会失败,可以理解CH9326同计算机之间是有握手信号的,那主机超时未收到串口数据可能是因为单片机根本就没有回送数据,这个超时应该没有太大意义。
您这边可以加下我们技术支持微信,在线帮你看下为什么产生这个问题。联系方式已私信你。