关于RAK475透传模块的串口成帧时间uart_timeout和串口每帧接收最大长度uart_recvlenout


  • administrators

    最近有一些客户问到关于如何修改串口发送一包的速度和大小,这里就给大家介绍串口成帧时间uart_timeout和串口每帧接收最大长度uart_recvlenout这两个参数,让大家对串口收发数据有更加全面的认识。

    首先,串口成帧时间uart_timeout是指当模块的串口接收到第一个字节的数据后,就会记一个起始时间,然后每节收一个字节数据后,就会更新起始时间。如果设备在收到下一个字节数据的过程中,等待的时间大于了设置的串口成帧时间uart_timeout,模块机会自动跳出接收状态,将接收到的数据组成一帧数据发送出去。

    串口每帧接收最大长度uart_recvlenout是指当模块的串口接收到数据后,会记数据的个数,当串口接收到的数据个数大于设置的串口每帧接收最大长度uart_recvlenout时,串口就会停止接收,将数据组成一帧发送出去。

    那么现在很多人弄混淆的是,究竟这两个参数谁起到的作用大呢?这里给大家分析一下:首先,设备会判断接收到的数据的个数,也就是串口每帧接收最大长度uart_recvlenout是否达到,如果达到,就立即发送出去一包数据。当然,如果在接收到串口每帧接收最大长度uart_recvlenout这么多数据之前,串口等待下一个字节数据的时间超过了串口成帧时间uart_timeout,串口也会自动将这一包数据发送出去,无论长度是否达到串口每帧接收最大长度uart_recvlenout. 因此总结就是,这两个参数谁先达到判断条件,谁就先起作用,那么当前一包数据就是带有起作用的判断条件性质的包


  • administrators

    目前由于RAK475模块的串口成帧时间uart_timeout是由接收任务控制,所以时间间隔不能太短,因为如果设备处于任务繁忙时,时间就会不准,导致有的数据包没有按照设置的成帧时间uart_timeout去发送。如果对每一包数据要求非常严格的应用,可能就会造成合包的问题。因此目前对于RAK475,建议用户将串口成帧时间uart_timeout这一参数设置为20ms



  • 我用UDP传输的时候,不会连包,但是大概需要24ms周期才不会丢包
    用TCP传输的时候,921600下发送231个数据,时间周期从6ms到30ms大概都测试了,都会连包的。uart_timeout和uart_recvlenout都设置了,还是会连包


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待