简单强大的纠错,用于串行传输ascii(RS485)

时间:2010-07-15 15:40:53

标签: error-handling data-transfer rs485

我通过串口(RS485)进行非常低速的数据连接: 9600波特 实际数据传输率约为25%。

串行线经过一个极高EMR的区域。峰值波动可达到3000 KV。

我尚未处于强制改变物理介质的位置,但可以轻松提供简单强大的前向纠错方案。该方案需要在PIC18系列micro上轻松实现。

想法?

3 个答案:

答案 0 :(得分:1)

This site声称在PIC18上实施Reed-Solomon。我自己从未使用它,但也许它可能是一个有用的参考?

答案 1 :(得分:1)

搜索MODBUS ASCII协议中使用的CRC算法。

答案 2 :(得分:0)

我使用PIC18器件开发,目前使用MCC18和PICC18编译器。几周前我注意到PICC18的外设接头错误地将Busy2USART()宏映射到TRMT位而不是TRMT2位。在我发现问题之前,这让我在短时间内感到头疼。例如,一个简单的传输:

putc2USART(*p_value++);
while Busy2USART();
putc2USART(*p_value);

当Busy2USART()宏未正确映射到TRMT位时,我从不等待字节离开移位寄存器,因为我正在监视错误的位。在我意识到不准确的头文件之前,我能够通过485成功传输一个字节的唯一方法是在字节之间等待1 ms。我的波特率是91912,字节之间的延迟导致了我的吞吐量。 我还建议实施碰撞检测和校验和。即使在PIC18上,校验和也很便宜。如果您能够收听自己的传输,请执行此操作,这样您就可以了解同一环路上的重复地址和错误时间可能导致的冲突。