看了很多大神圖文并茂的流程解釋CRC的計算方法,感覺自己已經東了,但是看了這個檔案后,讓我有覺得很糊涂

1 請哪位大神幫忙解釋一下,第一根據 SAE J1850的CRC計算和我們之前到底有什么不一樣(我知道P(x)多項式不一樣,但是好像計算方法也不同,因為傳統的演算法計算出來的結果和他給出的例子完全對不上)?

2 圖片上話紅線的地方應該怎么理解
3 能否麻煩給出一個計算的實體嗎?謝謝
uj5u.com熱心網友回復:
第一個問題:其基本CRC演算法是一致的,只是多了一個初始值(0xFF),另外通過協議給定的方程式算出來的RX還要做取反操作。
關鍵在于對SAE J1850協議的給定的方程式和協議的理解.
第二個問題:
主要給你解釋一下這個方程式:

其中:1、X8*D(X)意思是將D(X)左移8位,為什么要左移8位呢?因為要求8位的CRC校驗碼,所以要在D(x)后補上8個00000000然后再
做模 2除法
2、方程式中+Xn+Xn+1+……Xn+7什么意思呢?n到n+7剛好8bit,Xn+Xn+1+……Xn+7代表的意思是111111110000.......0(n+7代表最高位資料),所以+Xn+Xn+1+……Xn+7就是給左移8位后的D(x)模2加上一個11111111......0(0xFF0000......0)就是第一個問題中所說的初始值0xFF。(為什么是n到n+7呢?因為原始資料為 n bit,在其后加上8個0后資料長度變成了n+8,所以最高資料為n+7)
第三個問題:
以計算 F2 01 83的CRC校驗碼為例:
首先 F2 01 83左移8位,即:0xF2018300 二進制:11110010000000011000001100000000
其次模2加上一個初始值: 0xFF000000 二進制:11111111000000000000000000000000
得到的結果: 00001101000000011000001100000000
再用這個得到數字模2除以P(X),即X8+X4+X3+X2+1 = 100011101
所得余數為:11001000
RX為對上述余數取反,即00110111(0x37),等于SAE J1850協議中舉例表中的值0x37
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/35277.html
標籤:網絡通信
下一篇:VOIPg726_VHDL下載
