CRC簡介
CRC即循環(huán)冗余校驗,是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或電腦文件等數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗碼的一種散列函數(shù),主要用來檢測或校驗數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯誤。它是利用除法及余數(shù)的原理來作錯誤偵測的。
CRC應(yīng)用
CRC校驗實用程序庫 在數(shù)據(jù)存儲和數(shù)據(jù)通訊領(lǐng)域,為了保證數(shù)據(jù)的正確,就不得不采用檢錯的手段。在諸多檢錯手段中,CRC是最著名的一種。CRC的全稱是循環(huán)冗余校驗,其特點是:檢錯能力極強,開銷小,易于用編碼器及檢測電路實現(xiàn)。從其檢錯能力來看,它所不能發(fā)現(xiàn)的錯誤的幾率僅為0.0047%以下。從性能上和開銷上考慮,均遠遠優(yōu)于奇偶校驗及算術(shù)和校驗等方式。因而,在數(shù)據(jù)存儲和數(shù)據(jù)通訊領(lǐng)域,CRC無處不在:著名的通訊協(xié)議X.25的FCS(幀檢錯序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等壓縮工具軟件采用的是CRC32,磁盤驅(qū)動器的讀寫采用了CRC16,通用的圖像存儲格式GIF、TIFF等也都用CRC作為檢錯手段。下面介紹硬件生成與計算CRC的過程。
硬件計算過程
1.設(shè)置CRC寄存器,并給其賦值FFFF(hex)。
2.將數(shù)據(jù)的第一個8-bit字符與16位CRC寄存器的低8位進行異或,并把結(jié)果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB補零,移出并檢查LSB。
4.如果LSB為0,重復(fù)第三步;若LSB為1,CRC寄存器與多項式碼相異或。注意:該步檢查LSB應(yīng)該是右移前的LSB,即第3步前的LSB。
5.重復(fù)第3與第4步直到8次移位全部完成。此時一個8-bit數(shù)據(jù)處理完畢。
6.重復(fù)第2至第5步直到所有數(shù)據(jù)全部處理完成。
7.最終CRC寄存器的內(nèi)容即為CRC值。
CRC構(gòu)成:
循環(huán)碼叫做CRC碼,是一種典型的分組線性碼,是一種高效能的檢錯和糾錯碼,碼組的構(gòu)成如圖1所示,由k個信息碼元和(n-k)個檢驗碼元構(gòu)成
循環(huán)冗余校驗的原理
?
CRC-16程序分析及LabVIEW仿真實現(xiàn):
1 CRC-16生成電路
CRC碼中位的數(shù)量等于生成多項式的最高指數(shù)。指數(shù)標(biāo)識包括邏輯1的生成多項式中的位位置。因此,對于CRC-16,其標(biāo)準(zhǔn)的生成器多項式G(x)等于x16+x15+x2+x0.圖2給出了生成CRC-16的塊特性校(BlockCharacterCheck,BCC)電路方塊圖.CRC生成電路需要給BCC中的每個位一個寄存器。圖中有16個移位寄存器。另外除了x0之外,對于包含邏輯1的生成多項式的每個位位置,都在移位寄存器的輸出處放置了一個XOR與或門.BCC是整條消息通過CRC生成電路之后16個寄存器的內(nèi)容
2.16位CRC程序算法、程序框圖及其Lab2VIEW編程語言
其算法如下:
1)設(shè)置一個16位寄存器為全1,稱之CRC寄存器;
2)把數(shù)據(jù)幀中的第一個字節(jié)的8位與CRC寄存器中的低字節(jié)進行異或運算,結(jié)果存回CRC寄存器;
3)將CRC寄存器向右移一位,最高位填充0,最低位移出并檢測;
4)如果最低位為0:重復(fù)第3)步(下一次移位);如果最低位為1:將CRC寄存器與一個預(yù)設(shè)的固定值(0xA001H)進行異或運算;
5)重復(fù)第3)步和第4)步直到8次移位,這樣處理完了一個完整的8位;
6)重復(fù)第2)步至第5)步來處理下一個8位,直到所有的字節(jié)處理結(jié)束;
7)最終CRC寄存器的值就是CRC的值。其程序框圖如圖3所示。
其對應(yīng)的LabVIEW編程語言程序
uInt16i,j,tmp,CRC;
uInt16buf[i]
;uInt8CRCHi,CRCLo;CRC=0xFFFF;
for(i=0;i《length;i++)
{
CRC=buf[i]^CRC;
for(j=0;j《8;j++)
{
tmp=CRC&0x0001;
CRC=CRC》》1;
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC》》8
3 LabVIEW程序仿真實現(xiàn)
結(jié)束語
基于LabVIEW技術(shù)(虛擬儀器技術(shù))能夠簡單地、形象地編寫CRC-16程序及其實現(xiàn)。因此,一個16位的CRC校驗碼生成程序能被廣泛地應(yīng)用于數(shù)據(jù)傳輸校驗,因為它能高效率地檢測數(shù)據(jù)傳輸?shù)恼_性。目前,磁盤驅(qū)動器的讀寫已經(jīng)采用了CRC-16,通用的圖像存儲格式GIF、TIFF等也都采用CRC作為檢錯手段。進一步采用LabVIEW技術(shù),可以推導(dǎo)和分析高階CRC程序和硬件實現(xiàn)的問題。
評論
查看更多