如果需要做資料傳輸,在資料的安全上需要做一些比對與檢查,而一些比較容易做,會使用checksum(把所有的資料累加在一起,所得到的結果),但是這樣的方式,最容易遇到一個問題,就是當今天資料有對換的時候,就檢查不出資料異常,或是資料錯誤,這時候不仿可以考慮一下使用CRC(Cycle Redundancy Check)的確認方式,這樣可以增加資料的穩定,在STM32F3有內建CRC的硬體模組供使用,就不需要佔用太多CPU的資源了。
說了這麼多,我相信很多人還是有聽沒有懂,關於CRC的做法,有興趣可以參考筆者之前的文章「CRC的介紹」
我們以checksum來做解釋:如果今天的資料為D0/D1/D2/checksum,共有4個bytes,如下圖所示:
今天假設在傳輸的過程式發生了錯誤,造成了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介紹
沒有留言:
張貼留言