检测串行 RX 在数据包之间何时空闲

检测串行 RX 在数据包之间何时空闲

我正在运行一台基于 ARM 的计算机,它通过串行从外部设备接收数据。外部设备在数据突发和空闲之间交替:25 字节,然后 3 毫秒空闲,25 字节,3 毫秒空闲,依此类推。然而,它时常会在数据包中间丢弃一个字节,并且只输出 24 个字节。由于存在轻微的不一致,我正在尝试找出一种方法来检测线路何时空闲,以便我可以确信我正在处理下一个数据包的开头。

该数据包确实使用起始字节和停止字节 0xF0 和 0x00,但它们不是唯一的。 0xF0 或 0x00 也可能作为数据包中间的数据到达,无需任何特殊处理。我相信检测 3 毫秒的空闲时间以及随后的起始字节是确定新数据包到达的唯一方法。

Linux 中有没有办法检测空闲线路并以这种方式同步到新数据包的开头?我主要在串行端口上使用 open() 和 read() 用 C 语言进行编码,但 shell 脚本也可以工作。

相关内容