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