Error handling 通过串行(RS485)传输ascii的简单鲁棒错误校正

Error handling 通过串行(RS485)传输ascii的简单鲁棒错误校正,error-handling,data-transfer,rs485,Error Handling,Data Transfer,Rs485,我有一个非常低速的串行数据连接(RS485): 9600波特 实际数据传输速率约为25% 串行线路通过一个EMR极高的区域。峰值波动可达到3000千伏 我现在还不能强迫改变物理介质,但可以很容易地提出一个简单的健壮的前向纠错方案。该方案需要易于在PIC18系列微型计算机上实现 想法?声称在PIC18上实现里德·所罗门。我本人从未使用过它,但它可能是一个有用的参考?搜索MODBUS ASCII协议中使用的CRC算法。我使用PIC18设备开发,目前使用MCC18和PICC18编译器。几周前,我注意到

我有一个非常低速的串行数据连接(RS485): 9600波特 实际数据传输速率约为25%

串行线路通过一个EMR极高的区域。峰值波动可达到3000千伏

我现在还不能强迫改变物理介质,但可以很容易地提出一个简单的健壮的前向纠错方案。该方案需要易于在PIC18系列微型计算机上实现


想法?

声称在PIC18上实现里德·所罗门。我本人从未使用过它,但它可能是一个有用的参考?

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

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

putc2USART(*p_value++);
while Busy2USART();
putc2USART(*p_value);
当Busy2USART()宏错误地映射到TRMT位时,我从未等待字节离开移位寄存器,因为我监视的是错误的位。在我意识到不准确的头文件之前,我能够通过485成功传输字节的唯一方法是在字节之间等待1ms。我的波特率是91912,字节之间的延迟扼杀了我的吞吐量。
我还建议实现碰撞检测和校验和的方法。即使在PIC18上,校验和也很便宜。如果您能够收听自己的传输,那么这样做将使您能够意识到由于同一环路上的重复地址和不正确的计时而导致的冲突。

我使用PIC18设备开发,目前同时使用MCC18和PICC18编译器。几周前,我注意到PICC18的外设标头错误地将Busy2USART()库宏映射到TRMT位,而不是TRMT2位。在我发现问题之前,这让我在短时间内头疼不已。简单代码: