




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、循環(huán)(CRC碼):是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯,其特 式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x對應(yīng)的代碼 3、CRC:若設(shè)碼字長度為N,信息字段為KR位(N=K+R),則對于CRC碼集中的任字,存在且僅存在一個R次多項式g其中 m(x)為K次信息多項式,r(x)為R-1次校驗多項式g(x) g(x)=g+gx+g g(x)CRCg(x)例如:信息字段代碼為 ;對應(yīng)假設(shè)生成多項式為:g(x)=x4+x3+1g(x)11001x4m(x)=x10+x8+x7+x4對應(yīng)的代碼記為:10110010000;采用多項式除法:得余數(shù)為:1010 發(fā)送方:發(fā)出的傳輸字段為:10110011010信息字 校驗字 CRC校驗。以前沒搞過這東東,以為挺簡單的。結(jié)果看看別人提供的匯編源程序,居然看不懂。花了兩天時間研究了一下CRCCRC的數(shù)學(xué)原理開始,一長串的表達式看的我頭暈。第一次接觸還真難以理 功夫,才搞清楚CRC根據(jù)”權(quán)”(即多項表達式)的不同而相應(yīng)的源CCITT為例。其實本質(zhì)都是一樣,搞明白一種,其他的圖1,圖2說明了CRC校驗中CRC值是如何計算出來的,體現(xiàn)的多項式正X16+X12+X5+1SerialData即是需要校驗的數(shù)據(jù)。從把數(shù)據(jù)移位開始計結(jié)束。此時,16位移位寄存器中的內(nèi)容就是CRC碼。XORX5Bit5,X12Bit12,1Bit0,X16比較特別,是指移DATAOUT??梢赃@樣理解,與數(shù)據(jù)位做XOR運算的是上次CRC值的Bit15。根據(jù)以上說明,可以依葫蘆畫瓢的寫出以下程序。(keilC7.10下 unsignedchar unsignedint codeucharcrcbuff0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3};uintcrc; //CRC碼void{ucharcrc CRCptr= //Bytecrc=crc16l(ptr,8);}uintcrc16l(uchar*ptr,uchar ptr為數(shù)據(jù)指針,len{uchari;{for(i=0x80;i!=0;{if((crc&0x8000)!=0){crc<<=1; 1else 2if((*ptr&i)!=0) 3}}}crc程序1-1,1-2,1-3可以理解成移位前crc的Bit15與數(shù)據(jù)對應(yīng)的Bit(*ptr&i)XORcrc^=0x1021。只要明白兩次異或8bitCRC碼的高字節(jié)(8bit)全byte的數(shù)據(jù)做XOR運算,根據(jù)運算結(jié)果來選擇一個值(稱為余式),與原來的CRC碼再做一次XOR運算,就可以得到新的CRC碼。256種可能的值,實際上就是0~255以CRC碼,可以通過函數(shù)crc16l1codetest[]={0x01};crc=0;ptr=crc=crc10211X16+X12+X5+1codeuint X16+X12+X5+10x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0uinttable_crc(uchar*ptr,uchar //{ucharda;{da=(uchar //8CRC8 //左移8 //XOR}}CRC計算的就是移位和異或。所以一次處理移動幾位都沒有關(guān)系,只codeuint0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,uintban_crc(uchar*ptr,uchar{ucharda;{da=((uchar)(crc/256))/16;crc<<=4;crc^=crc_ba[da^(*ptr/16)];da=((uchar)(crc/256)/16);crc<<=4;crc^=crc_ba[da^(*ptr&0x0f)];}}crc_ba[16]crc_ta[256]16uintcrc16r(unsignedchar*ptr,unsignedchar{unsignedchari;{for(i=0x01;i!=0;i<<={if((crc&0x0001)!=0){crc>>=1;crc^=0x8408;}elsecrc>>=1;if((*ptr&i)!=0)crc^=}}}0x8408CCITT的反轉(zhuǎn)多項式。影響CRC計算速度,故設(shè)反轉(zhuǎn)多項式?!比鏲odeucharcrcbuff[]={codeucharcrcbuff_fan[]=的源代碼的時候,也是說采用CCITT,但是是反相的。如圖 crc=ptr=crcbuff_fan;crc=crc16r(ptr,8);crccodeucharcrcbuff_fan_result[]ptr=crcbuff_fan_result;crc=crc16r(ptr,10);crc0;CRC請注意0x5f1d在數(shù)組中的排列中低位 在用半字節(jié)查表法進行反相運算要特別注意一點,因為是右移,所以CRC移出的4Bit與數(shù)據(jù)XOR的操作是在CRC的 以下列數(shù)組通過修改函數(shù)crc16r產(chǎn)生。codeucharcodeuint0x0000,0x1081,0x2102,0x4204,0x5285,0x6306,0x8408,0x9489,0xa50a,0xc60c,0xd68d,0xe70e,uintban_fan_crc(uchar*ptr,uchar{ucharda;{dada=(uchar)(crc&0x000f);crc>>=4;crc^=fan_yushi[da^(*ptr&0x0f)];da=(uchar)(crc&0x000f);crc>>=crc^=fan_yushi[da^(*ptr/16)];}}crc=ptr=crc=crc=CRC-16了,最后發(fā)現(xiàn)原來挺簡單嘛=+++=因因 一定為“1”,故略去計算只采用0x1021即 CRC_Byte:計算單字節(jié)的CRC值 CRC_Data:計算一幀數(shù)據(jù)的CRC值 CRC_HighCRC_Low:存放單字節(jié)CRC值 CRC16_HighCRC16_Low:存放幀數(shù)據(jù)CRC ;one;;CRCByte,;8STATUS,STATUS,0CRC_High,CRC_Low, one ; BufStart(A,B,C)(據(jù)的起始地址)(的字節(jié)數(shù) CRC16_HighCRC16_Low(果INDF,CRC_High,CRC16_Low,wwSTATUS, CRC ;說明:CRC的計算原理如下(一個字節(jié)的簡單例子 一個字節(jié)數(shù)據(jù),左 CRC-CCITT式 ^116b為項式 為余數(shù)據(jù) 0)p式P<-<-aaaaaaaaaaaaaaaa數(shù)( )ppppppppA )0pPaaaaaaaa <-數(shù)PHA1,此處的部分余數(shù)與前面兩字節(jié)算法中的第一次余數(shù)有如下關(guān)系,即1 PHA1 aaaaaaaa <- 0pPaaaaaaaaaaaaaaaaaaaaaaaa 1,1, 數(shù) <-0 即 aaaaaaaaaaaaaaaa 的 ( 設(shè)部分余數(shù)函 PA d其中 為一個字節(jié)的數(shù)據(jù)(注意,除非 = ,否則就不是原始據(jù),見下文第 次的部分余n PA( - 8)^d)d=( - >> n) n PA( - 8 f( n1 8 D( 可以注意到函數(shù) d 的參數(shù) 為一個字節(jié),對一個確定的多式 f( 的返回值是與 一一對應(yīng)的,總數(shù)為 項,這些數(shù)據(jù)預(yù)先算出保存在表里,f( )就轉(zhuǎn)換為一個查表的過程,速度也可以大幅提高,這也就是查表法計算 的原理再來看CRC表是如何計算出來的,即函數(shù)f( 的實現(xiàn)方法。分析面一個字節(jié)數(shù)據(jù)的計算過程可發(fā)現(xiàn) 對結(jié)果的影響只表現(xiàn)為對 的移異或,看計算異或,看計算 的三個 位的列中只低兩個字節(jié)的最后結(jié)果是余數(shù)而數(shù)據(jù)所在的高8位列最后都被消去了,因其中的運算均為異或,不產(chǎn)生進位或借位,故每一位數(shù)據(jù)只影響本列的結(jié)果,即d并不直接影響結(jié)果。再將前例變化一下重列如下 // ^P^0^P^0^P^0^1P現(xiàn)在的問題就是如何根據(jù)現(xiàn)在的問題就是如何根據(jù) 來對 移位異或了,從上面的例子看,也以理解為每步移位,但根據(jù)以理解為每步移位,但根據(jù) 決定中間余數(shù)是否與P異或。從前面原為0,因為 的定為1,即當(dāng)中間余數(shù)與 相應(yīng)位異或的 為1時,中間余數(shù)移位就和P 的移動表現(xiàn)了 的影響如何被排除在結(jié)果之外 HSB HSB a <-不含 <-不含 的 HSB 01100 0110000011000110 HSB 1100 0001 1101000110101101 HSB 101 1010001101011010 HSB 00 0101011010010101 HSB 010110100101010 HSB 01001010011101010100101001110101 CRC(CyclicRedundancyCheck)循環(huán)冗余是常用的,在早期的通信中運用廣泛,因為早期的通信技術(shù)不夠可(不可靠性的來源是通信技術(shù)決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認信息’的困惑,書上提到紅軍和藍軍通信聯(lián)合進攻山下的條確認信息,但是藍軍擔(dān)心的是‘確認信息’如果也不可靠而沒有成功到達紅軍那里,那自己不是很?于是紅軍再‘對確認的確認信息’,但同樣的問題還是不能解決,紅軍仍然不敢貿(mào)然行動。對通信的可靠性檢查就需要‘校驗’,校驗是從數(shù)據(jù)本身進行檢查,它依靠某種數(shù)學(xué)上約定的形式進行檢查,校驗的結(jié)果是可靠或不可靠,如果可靠就對數(shù)據(jù)進行處理,如果不可靠,就丟棄重發(fā)或者進行修復(fù)。CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,后部分是校驗碼,如果CRC碼共長nbit,信息碼長kbit,就稱為(n,k)碼。它的編碼規(guī)則是:1、首先將原信息碼(kbit)左移r位2、運用一個生成多項式g(x)(也可看成二進制數(shù))用模2除上面的式子,得到的余數(shù)就是。非常簡單,要說明的:模2除就是在除的過用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,是:即‘異’則真,‘非異’則假。由此得到定理:a+b+b=a也就是‘2減’和‘2加’直值表完全相同。有了加減法就可以用來定義模2除法,于是就可以用生成多項式g(x)。例如:g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產(chǎn)生的CRC碼就是:對于g(x)=x4+x3+x2+1的解釋:(都是從右往左數(shù))x4就是第五位是1,因為沒有x1所以第2位就是0。11101|110,0000(設(shè)a=11101 b511000a異或得到101101加上b沒有取到的00得到10100然后跟a異或得到01001也就是余數(shù)余數(shù)是1001CRC標準的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:CRC-CRC過普遍采用的一種提高數(shù)據(jù)通信可靠性的方法而CRC是一種在實際通信中應(yīng)用很廣泛的差錯控制編CRC校驗將輸入比特()式中,D可以看成一個時延因子,表示相應(yīng)的比特所處的位置。校驗比特()可由下式求得:,是生成多項式。式中的除法與普通的多項式長除法相同,其差別是系數(shù)是二進制,其2為基礎(chǔ)。常用的幾個LCRC生成多項式為:1632CRC校驗的C下面我們以CRC-16為例來說明任意長度數(shù)據(jù)流的CRC生成過程。我們采用將數(shù)據(jù)流分成若干個8bit字符,并由低字節(jié)到高字節(jié)傳送的并行方法來求CRC。具體計算過程為:用一個16bit的寄存CRC0x00008bit16bitCRC寄存器的高字節(jié)CRC寄存器高字節(jié);CRC1bit補零,同時檢查移出的最高1bit1bit01bit1CRC寄存器中的值與生成多CRC8bit數(shù)據(jù)處理完為止,則此時CRC寄存器中的值就是第一個8bit數(shù)據(jù)對應(yīng)的CRC;然后將此時CRC寄存器的值作為初值,8bit8bitCRC寄存器中的值即為整個數(shù)據(jù)流對應(yīng)的CRC。在用C語言編寫CRC的實現(xiàn)程序時我們應(yīng)該注意,生成多項式對應(yīng)的十六進制數(shù)為0x18005,由于CRC寄存器左移過,移出的最為1時與相異或,所以與16bit的CRC寄存器對應(yīng)的生成多項0x80058bit數(shù)據(jù)流的C源程序:unsignedshortcrc_dsp(unsignedshortreg,unsignedchar//reg為crcdata_crc8bit{unsignedshortmsbcrc1bitunsignedshortdata;unsignedshortgx0x8005i0igxdata=(unsignedshort)data_crc;data=data<<8;reg=reg^data;{msb=reg&0x8000;reg=reg<<1;if(msb==0x8000){reg=reg^}while(i<8);return}以上為處理每一個8bit數(shù)據(jù)流的子程序,在計算整個數(shù)據(jù)流的CRC時,我們只需將CRC_reg的初reg值便是我們所想得到的整個數(shù)據(jù)流的CRC校驗值。CRCCRC校驗值的算法,并給出了源程序,且CRCC文件CRC16.h#ifndef_CRC16_h#definestaticunsignedcharauchCRCHi[]=0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,/*CRC*/staticcharauchCRCLo[]0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xEC,0x2C,0xE4,0x24,0x25,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村壁爐修造方案(3篇)
- DB23-T2975-2021-消費品召回風(fēng)險評估-黑龍江省
- DB23-T2888-2021-楊樹人工造林間作北蒼術(shù)栽培技術(shù)規(guī)程-黑龍江省
- 公司總務(wù)后勤管理制度
- 廠內(nèi)小件物流管理制度
- 光伏公司績效管理制度
- 醫(yī)療機械設(shè)備管理制度
- 連排別墅重建方案(3篇)
- 會展比選方案(3篇)
- 公司檢修小組管理制度
- KCA試題庫完整版
- 2024年新版藥品管理法培訓(xùn)
- 柴油發(fā)電機組降噪解決方案
- 《老年人權(quán)益保障法》課件
- 2022年高中英語學(xué)科教學(xué)計劃
- DB51T 2845-2021 連續(xù)玄武巖纖維生產(chǎn)原料技術(shù)規(guī)范
- 2025屆湖南省高考化學(xué)第一輪復(fù)習(xí)模擬選擇題-化學(xué)與生活43道(附答案)
- 物理-2025年中考終極押題猜想(廣州專用)(原卷版)
- 醫(yī)院培訓(xùn)課件:《血液凈化質(zhì)量控制標準解讀》
- GB/T 36547-2024電化學(xué)儲能電站接入電網(wǎng)技術(shù)規(guī)定
- GB/T 44908-2024風(fēng)力發(fā)電場技改升級安全要求及評價方法
評論
0/150
提交評論