打印
[MM32软件]

关于串口通信丢帧问题的处理

[复制链接]
778|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
豌豆爹|  楼主 | 2023-8-21 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文来简单聊一聊,如何避免串口数据通信过程丢帧的问题。
聊一聊
看到这个问题,有很多大佬给出了自己的看法,列举几点:
  • 校验+确认,没收到确认包就重发
  • 加序号包,少了哪个序号就重发
  • 丢帧就只能软件加校验,硬件做好抗干扰
  • 从串口原理设计的弱点进行分析,电磁打扰?波特率?数据帧太多?线太长?等等。
  • ......
你怎么看这个问题呢?接下来,根据我对题目的理解,来说几点处理措施,供参考。首先说一下对题目的理解,我觉得这个问题的侧重点在于,串口通信丢帧(或干扰)问题已经发生了,该如何进行处理。为了保证通信双方数据传输的可靠和正确性,我们一般会在硬件上做一些防止干扰的措施,同时在数据传输中添加校验等。接收端收到的数据校验不通过,则直接丢弃,不进行处理。加了这些措施,主要是为了保证接收并处理正确的数据。如果数据传输出错,这一帧数据不就直接丢弃了吗?接下来该怎么办呢?其实设备之间通信(不限于串口通信),都会设计数据通信协议,其中除了说明通信数据帧的格式之外,也会对出现丢帧情况如何处理进行说明,这样通信双方就按照这个规则进行处理。串口通信,稳定可靠的通信机制一般是:一问一答的方式;即发送方发送数据之后,需要收到应答,才能确保数据发送成功并被正确处理。否则的话,发送方就认为传输出错,根据具体情况,进行重发。为了能够确保数据发送与应答一一对应,可以通过在数据帧中添加帧序号的方法,确保每一帧数据的序号是唯一的,发送与应答的帧序号如果能够对应上,则说明应答帧接收到,可以进行后续处理。如果出现丢帧问题,根据具体的应用场景,会有不同的处理措施:(1)对于单指令控制场景控制端发送指令数据给被控端,接收端没有接收到数据或者接收到的数据出错,则不会进行控制动作以及发送应答帧。发送端一段时间内没有接收到指令应答,可以适当地进行指令重发。(2)连续发送多个数据包的场景这种场景,发送端可以给每一个数据包进行标号,同时接收端根据接收到的数据包序号进行处理,并给出应答数据包,其中应答数据包中可以携带期待的下一包数据的序号。如果发送端的数据出错,则不会收到应答帧,可以进行重发当前帧。如果接收端收到正确的数据帧,但是发送端收到的应答帧异常,则认为应答数据传输出错。发送端可以尝试进行重发当前帧,接收端在收到重复的数据包后,再重新发送相应的应答帧。最后这种一问一答的方式,虽然可以保证数据传输的可靠性。难免会存在传输效率低的问题。如果发送的数据包比较多,可否等到数据包全部发送完成后,最后再统一进行校验处理呢?这种处理该如何做呢?大家有兴趣可以思考一下。提示:可以在数据包中添加序号,并且在第一个数据包中添加总共要发送的数据包个数。剩下的工作交给接收端进行处理。先聊这些,如果你有更好的处理措施,欢迎一起探讨。感谢阅读,加油~

使用特权

评论回复
沙发
d1ng2x| | 2024-2-6 17:22 | 只看该作者
在串口通信中,可以使用校验位来验证数据的完整性

使用特权

评论回复
板凳
su1yirg| | 2024-2-6 18:10 | 只看该作者
当检测到丢帧时,可以通过重新发送丢失的数据帧来确保数据的完整性。这需要在通信协议中定义相应的重传机制

使用特权

评论回复
地板
q1d0mnx| | 2024-2-6 19:33 | 只看该作者
常见的校验方式包括奇偶校验、和校验、异或校验等。接收端可以通过校验位来检测数据是否正确接收

使用特权

评论回复
5
lamanius| | 2024-2-6 20:44 | 只看该作者
通过流控制机制,控制发送端的发送速率,避免接收端处理不过来导致丢帧

使用特权

评论回复
6
y1n9an| | 2024-2-6 21:37 | 只看该作者
优化串口通信硬件,包括提高波特率、增加缓冲区大小等,以提高数据传输的稳定性

使用特权

评论回复
7
t1ngus4| | 2024-2-7 08:12 | 只看该作者
用协议的方式就好了,丢包就重新发呗

使用特权

评论回复
8
zhizia4f| | 2024-2-7 09:24 | 只看该作者
一问一答的方式虽然好用但是确实比较浪费资源

使用特权

评论回复
9
p0gon9y| | 2024-2-7 10:16 | 只看该作者
我们一般都是用数据校验+协议的方式实现数据的完整性的

使用特权

评论回复
10
liu96jp| | 2024-2-7 11:58 | 只看该作者
丢包是不是因为受到干扰或者是程序处理不及时导致的啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

500

主题

1886

帖子

4

粉丝