国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
CRC原來是這么回事!

CRC遠沒有網(wǎng)上所說那么簡單。
  
  首先我們有一個數(shù)據(jù)流,也就是你需要校驗的數(shù)據(jù),可以是N BIT,一般我們常用的4,8,16,32,128 BIT,這里我取幾個8的倍數(shù),是因為我們的硬件以二進制為基礎(chǔ),所以在存取數(shù)據(jù)比較容易,無須充填位數(shù)來滿足寄存器的要求。你用13,17,29 BIT也可以。

  有一點你要記住的是,你選用幾個BIT,那么在CRC編碼就需要移位幾次,8就是移位8次,13就是移位13次,128就是移位128次。

我們看看目前為止的CRC的標(biāo)準(zhǔn)或者行規(guī)有:
CRC8  = X8+X5+X4+1 
CRC16 = X16+X15+X5+1 
CRC12 = X12+X11+X3+X2+1 
CRC32 = X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1 
   
CRC-CCITT=X16+X12+X5+1

需要說明的:CRC后所帶的數(shù)字就是CRC的位數(shù),它與你的數(shù)據(jù)流是無關(guān)的。

CRC8,8位CRC校驗。
CRC16,16位CRC校驗。
CRC12,12位CRC校驗。
CRC32,32位CRC校驗。
CRC-CCITT,16位CRC校驗。

我們看到5個多項式,它的意義其實就是給出一個與數(shù)據(jù)流進行異或運算的初始值,
當(dāng)然你可以更改這個值。比如:

CRC8  = X8+X5+X4+1 》》》 CRC8  = X7+X3+X2+1

CRC16 = X16+X15+X5+1 》》》CRC16 = X15+X5+1

只要你做出的東西是相互連接,不用與其他的機器對接,推薦保密部門使用該方法。
如果修改上述的多項式,那么別人在分析你傳送來的數(shù)據(jù)時,該全部是錯碼。

補一下課:
 異或操作:
              RESULT
  0    0       0
  0    1       1
  1    0       1
  1    1       0
CRC8  = X8+X5+X4+1

X8 表示第7位需要異或運算
X5 表示第4位需要異或運算
X4 表示第3位需要異或運算
1  表示第0位需要異或運算

如圖,首先將CRC所有位清0。
假設(shè)我們的數(shù)據(jù)流為8位,數(shù)據(jù)流 == 00000011,并且從0位(LSB)開始送入CRC中,則有:

1)1000 1 100
1)1100 1 010
0)0110 0 101
0)1011 1 110
0)0101 1 111
0)1010 0 011
0)1101 1 101
0)1110 0 010

我們看看這個數(shù):
1110 0010 == 0XE2 --- 結(jié)果是錯的
0100 0111 == 0X47 --- CRC

CRC16 = X16+X15+X5+1 

X16 表示第15位需要異或運算
X15 表示第14位需要異或運算
X5 表示第4位需要異或運算
1  表示第0位需要異或運算

如圖,首先將CRC所有位清0。
假設(shè)我們的數(shù)據(jù)流為8位,數(shù)據(jù)流 == 00000011,并且從0位(LSB)開始送入CRC中,則有:

1)10000 1000000000 1 
1)01000 0100000000 0
0)00100 0010000000 0
0)00010 0001000000 0
0)00001 0000100000 0
0)00000 1000010000 0
0)00000 0100001000 0
0)00000 0010000100 0

CRC 
0001 0000 1000 0000 == 0X1080

CRC-CCITT=X16+X12+X5+1

比較特殊,所以再說說

CRC-CCITT 不同于 CRC-16在于它是個反相的CRC-16,所謂反相的意義指從第7位(MSB)開始移入CRC移位寄存器,

如圖,首先將CRC所有位清0。
假設(shè)我們的數(shù)據(jù)流為8位,數(shù)據(jù)流 == 00000011,并且從7位(MSB)開始送入CRC中,則有:

0)00000  0000000  0000
0)00000  0000000  0000
0)00000  0000000  0000
0)00000  0000000  0000
0)00000  0000000  0000
0)00000  0000000  0000
1)10000  1000000  1000
1)11000  1100000  1100

CRC 
0011 0000 0110 0011 == 0X3063
1.預(yù)置1個16位的寄存器(下稱CRC寄存器),初試化其內(nèi)容為十六進制數(shù)0xFFFF;
2.把第一個待計算的數(shù)據(jù)即通訊信息幀的首字節(jié)與CRC寄存器的低8位相異或,把結(jié)果放回CRC寄存器;
3.把CRC寄存器的內(nèi)容右移一位用0填補最高位即進行邏輯移位處理并檢查右移后的移出位;
4.如果移出位為0重復(fù)第3步即再次右移一位,如果移出位為1則CRC寄存器與CRC生成多項式0xA001(1010 0000 0000 0001)進行異或運算,結(jié)果放回CRC寄存器;
5.重復(fù)步驟3和4,直到右移8次,對整個8位數(shù)據(jù)全部進行同樣處理;
6.重復(fù)步驟2到步驟5,進行通訊信息幀下一個字節(jié)的處理;
7.將該通訊信息幀所有字節(jié)按上述步驟計算完成后,最后得到的CRC寄存器的內(nèi)容即為CRC校驗碼,將其附著在原通訊信息幀后進行傳輸即可。如果用于Modbus協(xié)議設(shè)備則還需交換高低8位,非Modbus協(xié)議設(shè)備可以不必交換。接收方依同樣方法進行計算,只是計算的內(nèi)容不要包括最后兩個字節(jié),然后比較生成的CRC校驗碼和數(shù)據(jù)幀中的是否相同即可。如果發(fā)送方交換CRC校驗碼的高低8位,則接收方可以計算包括交換后的CRC碼在內(nèi)的整個數(shù)據(jù)幀,傳輸正確的話結(jié)果恒為0x0000。


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
三菱PLC實現(xiàn)CRC(循環(huán)冗余校驗)計算程序,詳細案例解析
循環(huán)冗余校驗算法
CRC從原理到實現(xiàn)
200SMART如何編寫CRC校驗算法程序
【轉(zhuǎn)】CRC16查表法中表格數(shù)據(jù)計算方法及實例
【S7-1200】 CRC校驗原理以及梯形圖的實現(xiàn)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服