请教一个发包时间的问题,使用的CH395,在文档中没有找到立即发送的指令;
那么我把一个小包(20byte)的数据放到tx buff之后,没有新数据进来的情况下,模块会在等待一定时间后通过tcp发出去,这个等待时间是多少?我测试下来有40ms,可以调整吗?
请教一个发包时间的问题,使用的CH395,在文档中没有找到立即发送的指令;
那么我把一个小包(20byte)的数据放到tx buff之后,没有新数据进来的情况下,模块会在等待一定时间后通过tcp发出去,这个等待时间是多少?我测试下来有40ms,可以调整吗?
您好,在使用CH395发送数据是,主控会调用类ch395_send_data()函数,写入socket索引、数据指针、数据长度三个参数。直至写完最后一个字节数据后,CH395才会启动传输,从此数计算到对端接收(局域网与PC直连),时间差不会达到毫秒级。您可以检查一下测量时间节点是否存在误差。
谢谢楼上2#,这个论坛没有回复功能吗?只在楼主层看到了“回复”按钮,2#没看到。。。
我上午又做了另一种测试,以10ms周期,定时通过CH395发报文(50Byte),接收端40ms才收到一次,一次收到四条报文,如下图所示,第一次收到一条报文,从第二次开始都是间隔40ms收到4条报文了,第二次、第三次的报文中,我用不同颜色表示出了四条报文:
但将间隔时间改为50ms,除了第一次是一次收到两条报文外,后续都是一次收一条报文了,如下图:
那么以10ms间隔时,我发的前三条报文肯定是有延时的,我没找到CH395的立即发送指令,如果确实没有的话,那他的机制应该是接收到SPI数据后,如果数据量不大,就会等待一段时间,以便把多个短报文拼成长报文,以提高通讯效率,如果没有后续报文,那么timeout时就会把buff中的短报文发送出去。
另外,我用其他的芯片测试过,可以排除调试软件的问题。
产生timeout发送是不正常的发送现象。CH395在使用发送的时候,需要确保在下一次调用发送函数之前产生“发送缓冲区空中断”和“发送完成中断”,具体说明可以参考 http://www.wch.cn/bbs/thread-65756-1.html 这条置顶帖。您使用10ms间隔发送的时候可能还没产生发送完成中断(10ms发50字节,速度过快)。
排出时间问题,您可以在接收中断里回传,可以看到上位机发送端的发送时间和上位机接收到的时间并会达到您说的延时值。
谢谢回复,上周我将TCP_MSS设置为60,并每次发送60字节,测试基本无延时。
再按您说的方式试试。