《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > CRC校驗編程和硬件快速校驗探討
CRC校驗編程和硬件快速校驗探討
大連理工大學 鄒久朋 林瑤瑤 周建
摘要: 本文分析和解釋了實際CRC校驗碼的生成特點,據此給出節省RAM和ROM且運算快速的通用CRC校驗編程思想和程序結構,并探討了用少量硬件實現快速、可靠CRC校驗的方法。
Abstract:
Key words :

引 言
    循環冗余校驗(Cyclic Re&mdancy Check,CRC)是最為常用的計算機和儀表數據通信的校驗方法。CRC碼是一種線性分組碼,編碼簡單但具有很強的檢錯糾錯能力。除了各種嵌入式儀表、變頻器等設備,還有一些數字型傳感器的輸出數據也提供CRC碼,如數字溫度傳感器DSl8820、集成溫濕度采集芯片SHTll等。但是,各廠商所提供的CRC校驗多項式(用于同通信碼模除)互有差別,且有CRC一8和CRC一16之分。另外,規定模除余數初始值所有的位有全清0或全置1之分(其CRC硬件生成電路不同),故其模除求余的運算過程也不相同。初接觸者往往難以領晤,省略CRC校驗使通信的可靠性降低。而不少C語言程序,運算時需要使用較多的RAM單元,較難在80C51、PIC16等低檔單片機上運行。
    因此,對于嵌入式系統中的CRC校驗,事先根據特定的校驗多項式,算出1字節數據范圍所對應的256個余數,將其作為表格,編程寫到程序存儲器中查詢而避免在線運算,已是非常通用的做法。鑒于此,有些廠商在說明書中就直接給出了這個列表。但如果是CRC一16校驗,存儲表格要占512字節(CRC一32則需要1 KB),對于有限的單片機ROM資源來說所占比例不小,往往只因為多裝了此表,就不得不升級單片機的型號。
    本文分析和解釋了實際CRC校驗碼的生成特點,據此給出節省RAM和ROM且運算快速的通用CRC校驗編程思想和程序結構,并探討了用少量硬件實現快速、可靠CRC校驗的方法。


1 CRC原理和實際校驗碼的反序生成特點
    一個k位二進制數據在傳送時,按一定規律附加一些冗余位而增大其碼距,就能檢錯和糾錯。標準CRC碼是將原數據左移r位,再用r+1位的特別約定多項式(poly—nomial funetion)模除之,獲得最多為r(8、16、32)位的余數,跟隨原數據之后生成k+r位的編碼發送。接收方再用相同的約定多項式,模除收到的數據,余數為O則傳輸無誤,為其他值則對應各個位的出錯。
    但是對于實際應用,為加快通信速度,r位的余數并不是每次都傳輸,而是采用累計模加(異或)的方法,不斷地與下一個k位數據異或運算,組成新的中間余數(仍為r位,因一般選擇r≥k),再被約定多項式模除得到新的余數值,依此類推,直到所有通信數據都同中間余數異或,再模除完為止。如此得到最終的r位余數,作為全組數據校驗的CRC碼附在該組數據之后發送。接收方以同樣的過程,算得收到數組的最終余數,再同最后收到的CRC碼對比(或將CRC碼也作為數據,看最后余數是否為O)。當然這樣只能查出該組數據的傳輸是否有錯,而不能糾錯。
    首數據的余數是唯一的,再異或進后續的任何一個特定數據之后,結果依然唯一。所以只要選擇r有足夠的位數,就能保證多個數據中一旦有個別位傳輸錯誤,其最終的CRC余數與傳輸正確的余數相等的可能性極低,因此能查出傳輸錯誤。
    對于元器件和不少的設備來說,其最終余數,即組校驗的CRC碼,是靠硬件快速生成的。為了使硬件電路簡化,也為了接收方易于校驗編程,往往采用變形生成的CRC碼和與其對應的校驗處理方式。
    對于模除余數的初始值,ISO/IEC 13239標準規定各位(8、16、32)均置1,而DSl8820器件和一些控制儀表的通信CRC碼卻是清0。在軟件編程時要根據不同器件賦予不同的初始值。
    特別約定多項式g(x)都是r+1位的,如ISO/IEC13239標準的CRC一8,g(x)=x8+x2+x+1。其最高位恒為1,將其隱含則可簡化模除運算,但這樣一來后面多位是O,較難在多字節(如16位需2字節)CRC校驗中定位計算和存儲。因此,大多數CRC碼生成和校驗的處理都采用將約定多項式反序的方法,即將最低位1放到最高位并丟棄最高次冪系數1,從而將運算和存儲都降為r位。
    對于CRC一8,g(x)=x8+x2+x+1,去高位反序后的模除數為11100000(OEOH),r=8。
    對于CRC一16,g(x)=x16+x15+x2+1,去高位反序后的模除數為OA001H,r=16。
    對于CRC一CCITT,g(x)=x16+x12+x5+1,同樣處理后的模除數為8408H,但也常用正序值1021H。
    對于CRC一32,g(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,處理后的模除數為0EDB88320H,r=32。
    如上處理后,按理說被模除數和余數也應該反序。但這樣的話r位的余數在同下一個k位數據模加時不但k位數據應反序,而且必須左端(最高位)對齊進行異或,處理起來不但麻煩也容易出錯。因此,實際CRC碼的生成和校驗一般仍是將余數,即被(模)除數,按正序排列,新數據也仍是右對齊異或進余數中。但是將被模除數原先的左移r位右添0改成了右移r位左添(r個)O。這相當于k+r位被模除數中僅r位被反序(放左端),而前面k位(現放于右端)依然正序。可以看出,按反序原則,實際上每一次都是異或進通信數據的反序值,如11001000B(0C8H)變為000100ll(13H),再異或進被模除數來求取CRC校驗碼。但由于所有二進制數的反序值都是唯一對應的,所以并不影響生成CRC碼的唯一確定性,只是接收方需要按照同樣的反序規則處理.

2 嵌入式系統CRC校驗的編程
    如上所述,k+r位的被模除數采用右移的方法不斷地同反序的約定多項式對位模除,也就遵從了從高位向低位不斷減余的除法規則。但由于不必求模除的商,因此只要將被模除數不斷地右移位,與去掉最高位的反序約定多項式模減,求得余數即可。
    但如果被模除數最低位右端的移出位是O,則無論從左端添進多少個O,也不夠模除約定多項式(其隱含的最高位是1)。在此情況下該位的商是O,余數不變,不應再同約定多項式對位模減,而要繼續左添O右移位,直到當前余數(被模除數)右移出的位值為1才夠模除(商1),才可將余數再對位模減一次多項式。由此看出,將約定多項式去掉最高位,可以使模減(異或)的計算位數r減少(一般r都正好是1字節位數的整數倍)。
    由于被模除數是k+r位的,因此總共需要右移k位,即左添進尼個O,才能模除到最低位結束。得到的余數最多是r位(約定多項式為r+1位),再將它異或人一個新數據,作為新的被模除數。
    每異或進一個數據,求新一輪CRC碼,都只進行走(字節數據是一8)次的右移和一般都少于是次的模減(異或)運算,而且模減的中間差值無需保留(后值覆蓋前值)。因此CRC碼生成的運算過程,就是右移位、判斷移出位為1則同多項式模減(C語言不能對移出位檢測,需將余數備份后同0xol相“與”)、差值回存后再右移的是次循環過程,如圖1所示。之后,再異或進下一個數據(該步與查表法一致)。編程得當的話運算量很小。
    筆者用51匯編語言編寫(2R(:一8校驗程序,算得1字節數據的CRC碼,只需64~80個機器周期,只多用1字節RAM單元(CR(:一16校驗多用2字節,時間加倍)來存儲余數,即下一次的被模除數(不斷覆蓋上一次已無用的)。因此,完全可以直接運算,而不必存儲大量的數據表格。C語言編程,要考慮語句代碼的優化以及只定義使用int和char型局部變量,以免耗時和占用RAM單元太多。

 

 接收方對于最后收到的r位CRC校驗碼,不需要再納入模除而使最終余數為O,只需同信息數據的模除余數比較,相等則確定通信正確。這樣可以減少模除循環次數,節省時間。


3 硬件CRC校驗的探討
    器件或設備的說明書中,常給出其硬件CRC碼的生成電路。以總線數字溫度傳感器DS18820為例,其8位CRC碼生成電路如圖2所示。

對應該硬件電路,等效的模除多項式為:
    g(x)=x2+x5+x4+1
    該模除多項式反序后,再隱含最高位,其多項式的值為8CH。
    8位移位寄存器的初始值清O(00H),通信數組數據的每個字節低位在前,按位依次輸入,當數據全部輸入完成后,移位寄存器各個位的存儲(輸出)值就是所需的CRC校驗碼。
    在實際應用中發現,Autonics等品牌的控制儀表,其通信CRC校驗碼與DSl8820的完全相同。
    對應于圖2的硬件生成電路,可用1片8D觸發器(如74HC373)和1片4封裝異或門(如74HCl36)連接而成,如圖3所示。

對于CRC賦初值OOH(74HC373清O)的操作,可先讀出DO~D7的隨機值,然后將讀出的數據再串行輸入即可。因為相同的數據相異或總是為O,再除以任何多項式仍為O。
    若MCU剩余足夠的I/O口,可將CRC碼的DO~D7位并行讀入。否則,還需加一片74HCl65,將D0~D7轉換成串行數據讀入。
    以少量的硬件實現快速CRC,能節省單片機的運算時間和存儲資源。用于發送端,能夠快速獲得CRC校驗碼,在系統其他任務很重時,能增強實時性。而用于接收端,除了上述優點之外,還能顯著增強系統接收和確認信息的可靠性,適用于一些遠程控制的執行裝置(如變頻驅動器、閥門定位控制器、重要的監測報警裝置等)。這些裝置對于接收到的數據或命令信息,一旦因誤校驗而不能正確地判斷執行,其后果都是比較嚴重的。因此,要提高嵌入式系統的可靠性和實時性,硬件CRC校驗是一種選擇。


結 語
    本文在分析了常用CRC碼的反序生成原理的基礎上,給出了其編程運算的統一步驟,并提出了由硬件快速生成CRC碼或對接收數據進行CRC校驗的電路和方法,可為嵌入式系統的可靠性和實時性設計提供參考.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久精品国产亚洲一区二区三区 | 国产美女精品一区二区三区 | 亚洲精品小视频| 韩国精品一区二区三区| 国产精品美女久久久浪潮软件| 欧美日韩日本国产亚洲在线| 欧美福利视频网站| 久久最新视频| 美国十次了思思久久精品导航| 久久久久久午夜| 久久精品国产99国产精品| 香蕉视频成人在线观看| 亚洲欧美日韩一区二区三区在线观看 | 亚洲欧美欧美一区二区三区| 亚洲午夜精品一区二区三区他趣 | 亚洲一区日韩在线| 亚洲影视综合| 性久久久久久久久| 欧美怡红院视频| 欧美自拍丝袜亚洲| 久久精品视频在线| 久久永久免费| 欧美多人爱爱视频网站| 欧美成人国产| 欧美日本韩国一区二区三区| 欧美午夜免费影院| 国产精品羞羞答答xxdd| 国产日韩精品一区二区| 国内精品久久久| 1769国内精品视频在线播放| 亚洲精品免费一区二区三区| 亚洲视频在线一区| 亚洲一区二区在线看| 午夜在线观看欧美| 亚洲第一搞黄网站| 亚洲精品一区二区三区在线观看| 一区二区三区 在线观看视| 亚洲一区二区黄色| 翔田千里一区二区| 久久精品一二三区| 欧美成人一二三| 国产精品v欧美精品∨日韩| 国产精品综合| 在线观看精品视频| 日韩一级黄色av| 亚洲欧美日韩国产中文在线| 亚洲第一中文字幕| 日韩午夜剧场| 欧美亚洲日本国产| 欧美bbbxxxxx| 国产精品高潮在线| 国内外成人在线视频| 亚洲欧洲综合另类在线| 亚洲午夜在线视频| 亚洲大片免费看| 亚洲午夜激情免费视频| 久久久久久亚洲精品杨幂换脸 | 欧美日韩精品一区| 国产欧美日韩中文字幕在线| 在线日韩av| 亚洲愉拍自拍另类高清精品| 亚洲国产精品一区二区第四页av | 国产精品丝袜久久久久久app| 精品成人一区| 亚洲视频一二三| 91久久在线播放| 午夜精品免费在线| 欧美成人一区二区在线| 国产精品网站在线观看| 亚洲国产精品视频| 西西裸体人体做爰大胆久久久| 日韩视频一区二区在线观看 | 免费在线观看一区二区| 国产精品美腿一区在线看| 伊人影院久久| 亚洲资源av| 一区二区毛片| 看片网站欧美日韩| 国产精品视频网| 亚洲精品一级| 亚洲国产成人精品久久| 亚洲男人的天堂在线aⅴ视频| 欧美肥婆在线| 国产在线视频不卡二| 一区二区三区免费看| 亚洲精品国产精品乱码不99 | 欧美国产视频在线| 国产日韩欧美在线一区| 91久久综合亚洲鲁鲁五月天| 久久精品成人| 香蕉久久夜色精品| 欧美日韩亚洲高清一区二区| 亚洲欧美另类综合偷拍| 国内精品视频一区| 在线成人av| 欧美一区二区在线免费观看| 亚洲欧美一区二区视频| 欧美日韩国产成人在线免费| 在线精品视频一区二区| 亚洲欧美日韩精品久久| 亚洲欧美久久久| 欧美性jizz18性欧美| 亚洲精品黄色| 亚洲日韩中文字幕在线播放| 卡一卡二国产精品| 国产一区二区三区四区hd| 亚洲一区二区在线播放| 亚洲视频网站在线观看| 欧美精品九九99久久| 亚洲高清激情| 亚洲欧洲三级| 免费日韩av电影| 亚洲大胆人体在线| 久久精品国产99国产精品| 久久超碰97中文字幕| 国产精品一区二区视频| 一级日韩一区在线观看| 中文精品一区二区三区| 欧美日本在线播放| 亚洲娇小video精品| 日韩午夜剧场| 欧美日本高清一区| 日韩视频在线观看免费| 在线视频日韩精品| 欧美日韩一区在线| 国产精品99久久久久久久久久久久| 一区二区三区四区五区视频| 欧美三区在线视频| 中文在线资源观看视频网站免费不卡| 亚洲午夜高清视频| 国产精品久久久久77777| 亚洲一二三区在线| 翔田千里一区二区| 国产日韩欧美在线一区| 久久高清国产| 欧美成人性生活| 最新高清无码专区| 一区二区三区不卡视频在线观看| 欧美欧美午夜aⅴ在线观看| 亚洲乱码国产乱码精品精98午夜| 亚洲一区二区三区四区五区午夜 | 欧美另类videos死尸| 亚洲精品一区二区三区四区高清 | 午夜久久资源| 国产亚洲在线观看| 91久久精品美女| 欧美日韩免费观看一区二区三区| 99精品国产高清一区二区| 午夜激情一区| 韩日欧美一区二区三区| 亚洲欧洲在线播放| 欧美日韩中文字幕精品| 亚洲男人的天堂在线aⅴ视频| 久久精品午夜| 亚洲激情网址| 午夜精品久久久久久久男人的天堂| 国产亚洲一区二区精品| 亚洲精品乱码久久久久| 欧美日韩直播| 欧美一区二区三区在线看| 欧美成人首页| 亚洲私人影吧| 蜜臀a∨国产成人精品| 日韩一二三区视频| 久久电影一区| 亚洲精品一区二区三区不| 羞羞答答国产精品www一本| 精品51国产黑色丝袜高跟鞋| 在线视频日韩精品| 国产日韩欧美一区| 亚洲精品看片| 国产麻豆午夜三级精品| 91久久精品久久国产性色也91| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 永久免费视频成人| 亚洲午夜激情网页| 国内精品伊人久久久久av一坑| av成人免费在线| 国产午夜精品美女毛片视频| 99国产精品视频免费观看一公开| 国产精品一区二区久久| 亚洲人成精品久久久久| 国产精品美女诱惑| 亚洲精品影视| 国产欧美日本一区视频| 日韩亚洲欧美高清| 国产丝袜一区二区| 亚洲香蕉伊综合在人在线视看| 狠狠色综合网站久久久久久久| 亚洲视频在线观看| 伊人久久噜噜噜躁狠狠躁| 亚洲专区一区| 亚洲国产精品久久久久婷婷老年| 欧美在线观看网址综合| 亚洲精品日韩在线| 久久综合九色综合久99| 亚洲一区二区免费视频| 欧美高清视频一区二区三区在线观看| 亚洲欧洲av一区二区| 欧美日韩精品免费看|