2010-07-15 30 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上也是如此。如果您能夠聆聽自己的傳輸,那麼可以讓您瞭解可能由於同一個循環中的重複地址和錯誤時間而導致的衝突。