串口接收数据无法判断完整性

发布于 2022-04-22 11:49:38

W801的DEMO里面,注册的串口回调,测试了下发送几十个字节,会进入3次串口回调,每次接收部分长度,如何可以改成根据时间来判断,超过多少ms未收到新数据,再进入回调,或者这个有查询启动时间的API么?我主任务来判断数据变化,超过多长时间没变,才处理数据

查看更多

关注者
0
被浏览
2.3k
大信
大信 认证专家 2022-04-22
硬件开发,软件开发,系统开发,工程架构,方案设计

因为串口收发数据,没有开始结束的标志。 因此发送一段命令,是否结束,需要靠解析命令的格式来进行。这也就是为什么很多 GPS,GPRS,4G 通信模块 使用 AT+ 指令的接口,AT就是一个命令的开头,按一定的格式,来判断是否接收到了完整的命令,这种常使用 ASIC 编码通信。
还可以通过时隙来判断,比如,收发端约定,两个命令间隔必须大于 0.5 秒,那么只有超过0.5秒时,才去判断指令是否发送完毕,这种模式一般跟第一种一起用。因为很多链路不保证通信速率,因此可能造成通信延迟。
这也就是很多 AT 指令设计了回应口令的机制。即,发送端发送一个命令后,接收端如果接收完整,那么回应一个OK,发送端如果没收到这个回应,那么发送端将尝试重发....
另外可以通过,在指令前后加一个校验,比如包格式,内带长度,CRC, CHEKKSUM 等信息,来校验指令的完整性,这个一般用在可靠性要求高的通信上,常用二进制数据通信。

这样,通过通信过程的控制个约定机制,来保证发送数据的完整和可靠。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览