2013年3月27日 星期三

[STM32F3 教學] CRC 介紹



如果需要做資料傳輸,在資料的安全上需要做一些比對與檢查,而一些比較容易做,會使用checksum(把所有的資料累加在一起,所得到的結果),但是這樣的方式,最容易遇到一個問題,就是當今天資料有對換的時候,就檢查不出資料異常,或是資料錯誤,這時候不仿可以考慮一下使用CRC(Cycle Redundancy Check)的確認方式,這樣可以增加資料的穩定,在STM32F3有內建CRC的硬體模組供使用,就不需要佔用太多CPU的資源了。





說了這麼多,我相信很多人還是有聽沒有懂,關於CRC的做法,有興趣可以參考筆者之前的文章「CRC的介紹





我們以checksum來做解釋:如果今天的資料為D0/D1/D2/checksum,共有4bytes,如下圖所示:







今天假設在傳輸的過程式發生了錯誤,造成了D0/D1的資料互換,那麼checksum的機制就會失效了。






如果今天使用的是CRC8,而載子為「x8,x3,x2,1」,那麼:






一樣的,D0/D1的資料互換,不過這時候的CRC8機制就可以有效的檢查出資料出現異常。








程式範例:有1個硬體與1個軟體所實現的CRC8 運算,如果2者運算結果相同即亮LED4(藍燈),反之,則亮LED3(紅燈)




注: CRC_Cal8Bits() 1個硬體實現的CRC運算。Check_CRC8() 為一個軟體實現的CRC運算。




下一篇:ADC介紹







沒有留言:

張貼留言