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

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

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

查看更多

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

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

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

1 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览