8051單片機串口通信中的檢錯方法
0 引言
對于基于flash控制器的8051的芯片結構,一般在進(jìn)行數據傳輸時(shí),都是先通過(guò)串口將數據傳送到flash控制器的buffer中。由于buffer的大小為512 bytes,所以每次傳輸的最大數據量為512bytes。本文中所討論的三種檢錯方法的傳輸數據量均為512 bytes。
1 檢錯方式
基于8051的串口數據通信系統的硬件開(kāi)發(fā)平臺框圖如圖1所示。利用該平臺進(jìn)行數據傳輸時(shí),通常有三種數據檢錯方式。
1.1 奇偶校驗
奇偶校驗是檢錯中比較常見(jiàn)的一種方法。它利用數據中的1的個(gè)數作為檢錯的標志位,若1的個(gè)數為奇數個(gè),則錯誤檢測的標志位為1,若1的個(gè)數為偶數,則錯誤檢測的標志位為0。在發(fā)送端和接收端同時(shí)檢測奇偶位,若得到相同的結果,則說(shuō)明數據傳輸過(guò)程無(wú)錯誤發(fā)生;若得到不同的結果,則說(shuō)明數據傳輸過(guò)程中有錯誤發(fā)生,此時(shí)8051會(huì )發(fā)送一個(gè)錯誤重傳的信號,讓PC端再次發(fā)送數據。
1.2 循環(huán)冗余校驗(CRC)
CRC是利用除法和余數的原理來(lái)進(jìn)行錯誤檢測(Error Detecting)。如果原始數據為多項式JP(x),則將P(x)對生成的多項式G(x)進(jìn)行模2除法,再將得到的余式R(x)作為生成的CRC校驗碼,用公式可以表示為:
P(x)=Q(x)?G(x)+R(x)
上式中的Q(x)為除法得到的商。發(fā)送端將原始數據P(x)和生成的CRC校驗碼R(x)發(fā)送到接收端。接收端則根據接收到的數據P'(x)算出另外的一個(gè)CRC校驗碼R'(x),然后對兩個(gè)CRC校驗碼進(jìn)行比較,即可得出在傳輸過(guò)程中是否有錯誤發(fā)生。若發(fā)生錯誤,則用發(fā)送端重傳。本文中所采用的CRC8所生成的多項式G(x)為:x2+x5+x4+1。
評論