串口通信校驗方式:奇偶校驗、累加和校驗
利用串口傳輸數據時,近距離傳輸還好,遠距離傳輸由于線路長度影響,可能會使信號在傳輸過程中出現不可預知的錯誤,為了達到通信的穩定性,在遠距離通信時一般要引入一種校驗方式來去除干擾。
這里主要介紹幾種常見的校驗方式,也是我們串口通訊板子上需要添加的幾種校驗方式。
即奇校驗ODD,偶校驗EVEN,累加和校驗,CRC循環碼冗余碼校驗
方便簡單的奇偶校驗
奇偶校驗需要一位校驗位,即使用串口通信的方式2或方式3(8位數據位+1位校驗位)。
奇校驗(odd parity):讓傳輸的數據(包含校驗位)中1的個數為奇數。
即:如果傳輸字節中1的個數是偶數,則校驗位為“1”,奇數相反。
以發送字符:10101010為例
偶校驗(even parity):讓傳輸的數據(包含校驗位)中1的個數為偶數。
即:如果傳輸字節中1的個數是偶數,則校驗位為“0”,奇數相反。
還是以發送字符:10101010為例
數據和校驗位發送給接受方后,接收方再次對數據中1的個數進行計算,如果為奇數則校驗通過,表示此次傳輸過程未發生錯誤。如果不是奇數,則表示有錯誤發生,此時接收方可以向發送方發送請求,要求重新發送一遍數據。
優缺點:
奇偶校驗的檢錯率只有50%,因為只有奇數個數據位發生變化能檢測到,如果偶數個數據位發生變化則無能為力了╮(╯﹏╰)╭
奇偶校驗每傳輸一個字節都需要加一位校驗位,對傳輸效率影響很大。
奇偶校驗只能發現錯誤,但不能糾正錯誤,也就是說它只能告訴你出錯了,但不能告訴你怎么出錯了,一旦發現錯誤,只好重發。
雖然奇偶校驗有很多缺點,但因為其使用起來十分簡單,故目前仍被廣泛使用。
應用:
如何用編程確定一個字節中“1”個數的奇偶性?我們可以利用二進制數相加的特點:
0+0=0、1+0=1、1+1=0
可以看出,如果我們將一個字節的所有位相加
有奇數個“1”的字節的和為1
有偶數個“1”的字節的和為0
由此即可通過編程完成判斷。實際應用中,實現方法很多,但這是相對簡單的一種,這里不再贅述。
累加和校驗
所謂的累加和校驗有很多種,最常見的一種是在每次通信數據包最后都加一個字節的校驗數據,這個校驗字節里的數據是通信數據包里所有數據的不進位累加和。例如:
接收方接收到數據后同樣對一個數據包的數據進行不進位累加和計算,如果累加出的結果與校驗位相同的話就認為傳輸的數據沒有錯誤。
優缺點:
實現起來方便簡單,被廣泛運用。
檢錯率一般,例如一個字節多1,一個字節少1,則會出現誤判。
和奇偶校驗一樣,只能發現錯誤,但不能糾正錯誤。
另外,累加和校驗的數據傳輸格式可以表示為:通訊數據+校驗數據。這與我們之后要說的CRC循環冗余碼校驗是相同的。
審核編輯 :李倩
-
串口通信
+關注
關注
34文章
1626瀏覽量
55528 -
串口傳輸
+關注
關注
0文章
33瀏覽量
1797
原文標題:FPGA學習-串口通信校驗方式:奇偶校驗、累加和校驗
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論