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