淺談CRC標(biāo)準(zhǔn)及計(jì)算過程
出處:awey 發(fā)布于:2011-09-01 23:00:54
標(biāo)準(zhǔn)
根據(jù)應(yīng)用環(huán)境與習(xí)慣的不同,CRC又可分為以下幾種標(biāo)準(zhǔn):
?、貱RC-12碼;
②CRC-16碼;
?、跜RC-CCITT碼;
④CRC-32碼。
CRC-12碼通常用來傳送6-bit字符串。
CRC-16及CRC-CCITT碼則是用來傳送8-bit字符串,其中CRC-16為美國采用,而CRC-CCITT為歐洲國家所采用。
CRC-32碼大都被采用在一種稱為Point-to-Point的同步傳輸中。
在國際標(biāo)準(zhǔn)中,根據(jù)生成多項(xiàng)式G(x)的不同,CRC又可分為以下幾種標(biāo)準(zhǔn):
?、貱RC-12碼: G(x)=X12+X11+X3+X2+X+1
②CRC-16碼: G(x)=X16+X15+X2+1
?、跜RC-CCITT碼: G(x)=X16+X12+X5+1
?、蹸RC-32碼: G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X+1
CRC-12碼通常用來傳送6-bit字符串。CRC-16及CRC-CCITT碼則用是來傳送8-bit字符,其中CRC-16為美國采用,而CRC-CCITT為歐洲國家所采用。CRC-32碼大都被采用在一種稱為Point-to-Point的同步傳輸中。下面以常用的CRC-16為例來說明其生成過程。
CRC-16碼由兩個(gè)字節(jié)構(gòu)成,在開始時(shí)CRC寄存器的每一位都預(yù)置為1,然后把CRC寄存器與8-bit的數(shù)據(jù)進(jìn)行異或,之后對CRC寄存器從高到低進(jìn)行移位,在位(MSB)的位置補(bǔ)零,而位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,否則如果LSB為零,則無需進(jìn)行異或。重復(fù)上述的由高至低的移位8次,個(gè)8-bit數(shù)據(jù)處理完畢,用此時(shí)CRC寄存器的值與下一個(gè)8-bit數(shù)據(jù)異或并進(jìn)行如前一個(gè)數(shù)據(jù)似的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為終的CRC值。
生成過程
下面以常用的CRC-16為例來說明其生成過程。
CRC16H EQU 40H ;16位的CRC寄存器
CRC16L EQU 41H
ORG 0000H
LJMP MAIN
MAIN: MOV 30H,#10H ;待校驗(yàn)的代碼,為六個(gè)
MOV 31H,#06H
MOV 32H,#40H
MOV 33H,#01H
MOV 34H,#00H
MOV 35H,#46H
MOV R0,#30H ;校驗(yàn)代碼的地址指針
MOV R1,#06H
LCALL CRC ;調(diào)用CRC計(jì)算程序
JMP
CRC: MOV CC16H,#0FFH ;CRC寄存器初始化
MOV CRC16L,#0FFH
LP1: MOV R2,#08H ;右移位8次
OV A,@R0
XRL A,CRC16L
MOV CRC16L,A
LP2: MOV A,CRC16H ;先移高8位
CLR C
RRC A
MOV CRC16H,A ;再移低8位
MOV A,CRC16L
RRC A
MOV CRC16L,A
JNC LP3 ;判斷被移出的位是‘0’還是‘1’
XRL CRC16H,#0A0H ;被移出的位為‘1’時(shí)CRC16寄存器與多項(xiàng)式#0A001H相異或
XRL CRC16L,#01H
LP3: DJNZ R2,LP2
INC R0
DJNZ R1,LP1
RET
END
CRC-16碼由兩個(gè)字節(jié)構(gòu)成,在開始時(shí)CRC寄存器的每一位都預(yù)置為1,然后把CRC寄存器與8-bit的數(shù)據(jù)進(jìn)行異或(異或:二進(jìn)制運(yùn)算 相同為0,不同為1;0^0=0;0^1=1;1^0=1;1^1=0),
之后對CRC寄存器從高到低進(jìn)行移位,在位(MSB)的位置補(bǔ)零,而位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,否則如果LSB為零,則無需進(jìn)行異或。重復(fù)上述的由高至低的移位8次,個(gè)8-bit數(shù)據(jù)處理完畢,用此時(shí)CRC寄存器的值與下一個(gè)8-bit數(shù)據(jù)異或并進(jìn)行如前一個(gè)數(shù)據(jù)似的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為終的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)式碼相異或。
5.重復(fù)第3與第4步直到8次移位全部完成。此時(shí)一個(gè)8-bit數(shù)據(jù)處理完畢。
6.重復(fù)第2至第5步直到所有數(shù)據(jù)全部處理完成。
7.終CRC寄存器的內(nèi)容即為CRC值。
CRC(12位) =X12+X11+X3+X2+X+1
CRC(16位) = X16+X15+X2+1
CRC(CCITT) = X16+X12 +X5+1
CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1
(注:對二取模的四則運(yùn)算指參與運(yùn)算的兩個(gè)二進(jìn)制數(shù)各位之間凡涉及加減運(yùn)算時(shí)均進(jìn)行XOR異或運(yùn)算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1,0 XOR 1=1,即相同為0,不同為1)
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04
- 高速PCB信號完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見問題分析









