2010-07-15 79 views
0

我有一个非常低速串行(RS485)数据连接: 9600波特 实际数据传输率约为25%。通过串行(RS485)传输ascii的简单鲁棒的纠错

串口线正在经历一个非常高的EMR区域。峰值波动可达3000千伏。我不是在强制改变物理介质的位置,但可以很容易地提供一个简单的稳健的前向纠错方案。该方案需要易于在PIC18系列微处理器上实现。

想法?

+0

我使用PIC18器件进行开发,目前使用MCC18和PICC18编译器。几周前我注意到PICC18的外设头错误地将Busy2USART()库宏映射到TRMT位而不是TRMT2位。在我发现问题之前,这使我在很短的时间内感到头痛。简单的代码: – Nate 2010-09-24 02:48:42

回答

1

This site声称在PIC18上实现了Reed-Solomon。我从来没有用过它,但也许它可能是一个有用的参考?

1

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

0

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

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

当Busy2USART()宏被错误地映射到TRMT位,我从来没有等待字节离开移位寄存器,因为我正在监测错误的位。在我意识到不准确的头文件之前,我能够成功通过485传输一个字节的唯一方法是在字节之间等待1毫秒。我的波特率是91912,字节之间的延迟导致吞吐量下降。 我也建议实施一种碰撞检测和校验和的方法。校验和便宜,即使在PIC18上也是如此。如果您能够聆听自己的传输,那么可以让您了解可能由于同一个循环中的重复地址和错误时间而导致的冲突。