當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1 基本原理串行數(shù)據(jù)的差錯(cuò)檢驗(yàn)是保證數(shù)據(jù)正確的必要手段,通常采用奇遇校驗(yàn)法和循環(huán)冗余校驗(yàn)法。這兩種方法都是通過冗余數(shù)據(jù)來提供必要信息。奇偶校驗(yàn)法適用于以字節(jié)為單位數(shù)據(jù)傳輸。例如用偶校驗(yàn)傳送1個(gè)ASCII字符時(shí)

1 基本原理

串行數(shù)據(jù)的差錯(cuò)檢驗(yàn)是保證數(shù)據(jù)正確的必要手段,通常采用奇遇校驗(yàn)法和循環(huán)冗余校驗(yàn)法。這兩種方法都是通過冗余數(shù)據(jù)來提供必要信息。奇偶校驗(yàn)法適用于以字節(jié)為單位數(shù)據(jù)傳輸。例如用偶校驗(yàn)傳送1個(gè)ASCII字符時(shí),要附加1個(gè)校驗(yàn)位,從而使全部9位中“1”的個(gè)數(shù)為偶數(shù)。奇偶校驗(yàn)簡(jiǎn)單易行,但當(dāng)數(shù)據(jù)崩潰或出現(xiàn)多位錯(cuò)誤時(shí),往往不能檢驗(yàn)出來,因而可靠性不高。

循環(huán)冗余碼校驗(yàn)法利用了循環(huán)和反饋機(jī)制,校驗(yàn)碼由輸入數(shù)據(jù)與歷史數(shù)據(jù)經(jīng)過較為復(fù)雜的運(yùn)算而得到。因此,冗余碼包含了更為豐富的數(shù)據(jù)間的信息,可靠性更高。校好的循環(huán)冗余碼可校驗(yàn)出以下錯(cuò)誤:①全部數(shù)據(jù)位任意奇數(shù)個(gè)位出錯(cuò);②全部數(shù)據(jù)位中任意連續(xù)2位出錯(cuò);③處于一個(gè)8位時(shí)間窗內(nèi)的任1~8位數(shù)據(jù)出錯(cuò)。

使用循環(huán)冗余碼校驗(yàn)方法通信時(shí),發(fā)送方先計(jì)算待發(fā)數(shù)據(jù)的校驗(yàn)碼,然后將數(shù)據(jù)與校驗(yàn)碼起發(fā)出;接收方接收數(shù)據(jù)的同時(shí)進(jìn)行循環(huán)冗余碼的計(jì)算,并將計(jì)算結(jié)果與來自發(fā)送方的校驗(yàn)碼相比較,如不相同表示傳輸過程中出現(xiàn)了錯(cuò)誤,接收方必須通知發(fā)送方再次發(fā)送該組數(shù)據(jù)。

假設(shè)要傳輸64位數(shù)據(jù)(最后8位是校驗(yàn)碼),并使用多項(xiàng)式x8+x5+x4+1來產(chǎn)生8位循環(huán)冗余校驗(yàn)碼(以下簡(jiǎn)稱CRC碼)。其邏輯結(jié)構(gòu)可用異或門和移位寄存器表示,如圖1所示。寄存器的值即為輸入數(shù)據(jù)的CRC碼。首先來輸入數(shù)據(jù)與最低位的異或值,如為“0”,只需將當(dāng)前CRC碼邏輯右移1位(首位補(bǔ)零),即可得到新CRC碼;如為“1”,則將當(dāng)前CRC碼與18H異或,再循環(huán)右移1位即可。該校驗(yàn)碼有以下特點(diǎn):①當(dāng)輸入的8位數(shù)據(jù)(低位在前)與當(dāng)前 CRC碼相同時(shí),輸出的CRC碼將是零。因此,當(dāng)包含8位CRC碼的全部64位數(shù)據(jù)輸入后,輸出的CRC碼應(yīng)為零。②只要有非零位即可判決傳輸錯(cuò)誤,而必復(fù)雜的校驗(yàn)技術(shù)。

2 用匯編語言產(chǎn)生循環(huán)冗長(zhǎng)余校驗(yàn)碼

在8051單片機(jī)上,由以下代碼可得8位CRC碼(存于變量CRC中),8位輸入數(shù)據(jù)暫存于ACC中。
DO_CRC:PUSH ACC ;保存輸入數(shù)據(jù)
PUSH B ;保存B寄存器
PUSH ACC ;再次保存
MOV B,#8 ;共有8位數(shù)據(jù)
CRC_LOOP:XRL A,CRC
RRC A ;將最低位與輸入數(shù)據(jù)的異或值放入進(jìn)位標(biāo)志中
MOV A,CRC
JNC ZERO
XRL A,#18H;當(dāng)前CRC碼與18H異或
ZERO: RRC A ;右移1位
MOV CRC,A ;保存新CRC碼
POP ACC
RR A ;取出輸入數(shù)據(jù)的第2位
PUSH ACC
DJNZ B,CRC_LOOP ;循環(huán)
POP ACC
POP B
POP ACC ;恢復(fù)各寄存器
RET

上述程序?qū)γ恳晃惠斎霐?shù)據(jù)都要執(zhí)行一系列操作,運(yùn)算量很大,但內(nèi)存占用少,適合于內(nèi)存緊張的情況。當(dāng)內(nèi)存充裕時(shí),可以使用效率更高的查表法。

3 用查表法求CRC碼

將輸入數(shù)據(jù)按字節(jié)分開,每字節(jié)值在0~255之間。令當(dāng)前CRC碼為00H,當(dāng)分別輸入0~255時(shí),得到256個(gè)CRC碼。將它們順序排列就構(gòu)成了循環(huán)冗余校驗(yàn)碼表。用當(dāng)前CRC碼與輸入字節(jié)異或后的值作為下標(biāo),查表即可求出新CRC碼。下例中,crc存放CRC碼,ACC存放輸入字節(jié), crc_table為循環(huán)冗余校驗(yàn)表的入口地址。代碼如下:
XRL A,crc ;當(dāng)前CRC碼與輸入數(shù)據(jù)異或
PUSH DPH
PUSH DPL ;保存數(shù)據(jù)指針
MOV DPTR #crc_table
MOVC A,@A+DPTR;查表
MOV crc,A
POP DPL
POP DPH ;恢復(fù)數(shù)據(jù)指針
RET
crc_table:
DB 00H,5EH,BCH,E2H,61H,3FH,DDH,83H
DB C2H,9CH,7EH,20H,A3H,FDH,1FH,41H
DB 9DH,C3H,21H,7FH,FCH,A2H,40H,1EH
……

4 循環(huán)冗余校驗(yàn)碼的CPLD實(shí)現(xiàn)

用CPLD 作循環(huán)冗余校驗(yàn)碼的硬件實(shí)現(xiàn),其速度更快,性能更好,而且只占用極少的CPLD內(nèi)的資源。本人用Xilinx公司的XCV9536芯片,基于以下VHDL 代碼,實(shí)現(xiàn)了8位CRC碼生成電路。代碼下VHDL代碼,實(shí)現(xiàn)了8位CRC碼生成電路。代碼中,s_in為輸入串行數(shù)據(jù),q為輸出CRC碼,d_new為當(dāng)前CRC碼。
Library IEEE;
use IEEE.std_logic_1164.all;
entity crc is
port(clk,s_in,reset:in STD_LOGIC,q:out STD_LOGIC_VECTOR (7 downto 0));
end crc;
architecture crc_arch of crc is
signal t1,t2,t3:std_logic;
signal d_new:std_logic_vector(7 downto 0);
begin
t1<=d_new(0)xor s_in; --t1為最低位與輸入異或值
t2<=d_new(4)xor '1';
t3<=d_new(3)xor'1';
process(clk,reset)
begin
if clk event and clk='1'then
if reset='1'then
d_new<=x"0"; --復(fù)位時(shí),CRC碼置零
elsif t1='1'then
d_new<=t1&d_new(7 downto 5)&t2&t3&td_new(2 downto 1);--t1為"1"時(shí)的新CRC碼
elsif t1='0'then
d_new<=t1&d_new(7 downto 1); --t1為"0"時(shí)的新CRC碼
end if;
end if;
end process;
q<=d_new;--輸出CRC
end crc_arch;

5 總結(jié)

基于以上介紹的8位循環(huán)冗余校驗(yàn)碼的軟件及硬件實(shí)現(xiàn)方法,可以設(shè)計(jì)各種類型的循環(huán)冗余校檢方法。由上述例程可以看出,循環(huán)冗余碼校驗(yàn)是一種可靠性高、易于實(shí)現(xiàn)的校驗(yàn)方法。
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉