用于通过串行传输ASCII的简单鲁棒纠错(RS485)
-
16-09-2020 - |
题
我通过串行进行非常低的速度数据连接(RS485): 9600波特 实际数据传输速率约为25%。
串行线正在通过极高的EMR区域。峰值波动可达到3000 kV。
我不是在位置(又一)以强制改变物理介质,但很容易提供简单的强大的前向纠错方案。该方案需要易于在PIC18系列Micro上实现。
想法?
其他提示
搜索Modbus ASCII协议中使用的CRC算法。
我用pic18设备开发,目前使用MCC18和PICC18编译器。我几周前注意到PICC18的外围标题错误地将BUST2USART()宏映射到TRMT位而不是TRMT2位。这导致我在发现问题之前短时间的重大头疼。示例,一个简单的传输:
putc2USART(*p_value++);
while Busy2USART();
putc2USART(*p_value);
.
当busy2usart()宏被错误地映射到trmt位时,我从来没有等待字节以离开移位寄存器,因为我正在监控错误的位。在我意识到不准确的头文件之前,我能够在485上成功传输字节的唯一方法是在字节之间等待1 ms。我的波特率是91912,字节之间的延误杀了我的吞吐量。 我还建议实施碰撞检测和校验和。校验和甚至在PIC18上都很便宜。如果您能够倾听自己的传输,请执行此操作,请允许您意识到可能由同一循环上的重复地址和错误的时序产生的碰撞。
不隶属于 StackOverflow