Parsing 解析时间分隔的UART数据
在尝试对UART连接上的数据进行正确的反向工程和解码时,我得出了以下关于所接收数据格式的结论Parsing 解析时间分隔的UART数据,parsing,serial-port,uart,Parsing,Serial Port,Uart,在尝试对UART连接上的数据进行正确的反向工程和解码时,我得出了以下关于所接收数据格式的结论 数据以“包”的形式发送。每个数据包仅由传输之间的时间(空间)分隔 数据包长度可变。长度由序列中的第三个字节指定 数据不是使用任何特殊字符或带外信号来帧化的,但基于帧的校验和值的最终字节,有效数据包可以(假定)是有效的 当使用逻辑分析仪时,很容易识别数据包。然而,通过UART将数据传送到程序会使数据包的划分变得不可能。所有接收到的数据都由操作系统排队。虽然可以添加某些处理程序来触发接收到的数据事件,但这并
附录 一种可能的软件解决方案需要一个(高分辨率)周期计时器,U(S)ART驱动程序将使用该计时器来计算接收字符之间的时间间隔。使用PIO而不是DMA,驱动程序必须在接收每个字符时重置间隔的计数。当计数超过阈值时(即,
计数
*间隔时间
>消息间隔时间
),则接收器静默时间过长,表示消息间隔
澄清:您需要HR定时器来模拟如上所述的接收机超时。您不想简单地测量接收字符之间的时间间隔。
每当“下一条”消息的开始以某种方式延迟时,就容易出现“消息腐烂”的情况,因此,在“下一条”消息到达之前,不会检测到最后接收到的消息的“结束”。您只能在“正常”情况下可靠地执行此操作如果你写了一个驱动程序,那么你就可以很好地保证代码从收到UART中断的那一刻起会以相当短的延迟运行。这正是我希望避免的。我有备用的AVR和2-3个收集灰尘的FPGA,这可能是我要做的。如果我不能用AVR完成它,也就是说阅读Modbus,协议似乎与Modbus RTU非常相似。谢谢!