在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用CRC算法檢查數據傳輸的正確性

8ECz_icstudy ? 來源:未知 ? 2019-02-03 09:10 ? 次閱讀

還有半個多月就要過年了,工作之后時間過得真是飛快啊,才剛剛熟悉在各種文件上簽2018的日期,現在竟然又變成2019了。最郁悶的是又老了一歲,找誰說理去

大家都知道芯片有輸入輸出,根據不同的傳輸協議,輸入輸出的數據有可能是一串長長的數據,幾十個或者幾百個byte甚至更多。在數據傳輸過程中,由于某些意外的原因導致某些bit出現錯誤(0變為1,或者1變為0),從而接受方接收到錯誤的數據。

為盡量提高接受方收到數據的正確率,在接收方接收數據后需要對數據進行校驗,當且僅當校驗的結果為正確時接收方才真正收下數據。循環冗余校驗(Cyclic Redundancy Check, CRC)算法通常用于數字傳輸系統或者存儲器中,用來檢測意外事件對原數據的影響,判斷接受到的數據是否正確。

下面是IC君文武雙全的朋友文武寫的CRC文章,IC君稍微做了優化排版和少量的編輯工作提升大家的閱讀體驗。

1

前言:

因為CRC循環冗余校驗碼的算法和硬件電路結構比較簡單,所以CRC是一種在工程中常用的數據校驗方法。盡管CRC簡單,但在工程應用中還是有些問題會對工程師產生困惑。這篇文章將從以下三個方面介紹以下CRC,希望對大家有所幫助。

CRC 的數學原理;

CRC的通項公式,怎樣選取一個適合的通項公式;

CRC 硬件電路實現,串行電路到并行電路的實現。

2

CRC的數學原理:

在講CRC的數學原理之前,首先看一下下面的圖。圖1是A要給B發送1bit的信息0或者1。假設A發

圖1

送一個0給B,系統正常的情況下B會接受到一個0。但是如果有個干擾(比如信號線的串擾)在A和B相連的傳輸線上,那么B就有可能接受到一個1,傳輸數據發生錯誤。

為了改進這個傳輸過程,A和B約定(圖2)。

圖2

如果A要發送一個0給B,A就在一段時間連續發送兩個0(2’b00’)給B;

如果A要發送一個1信息給B,那么A就在一段時間連續發送兩個1(2’b11’)給B。

如果B接受了一個2’b01或者2’b10,B就知道他們之間有干擾;

要是B接受到了一個2’b00,B就會認為A發送的信息是個0;

那么A有沒有可能發的信息是2個1?這也是有可能的,不過2’b00變成2’b11比1’b0變成1’b1的概率要低的多。

如果A和B約定以圖3的方式進行傳輸,假設A要發送一個0給B,那么A就在一段時間連續發送3個0(3’b000)給B;如果A要發送一個1信息給B,那么A就在一段時間連續發送三個1(3’b111’)給B;

如果B接受到的值為3’b001、3’b010或者3’b100,B就知道他們之間有干擾,

圖3

并且B會自我判斷A給自己發送的信息是0不是1。這種判斷是合理的,因為誤判的概率很低。

圖1,圖2,圖3可以概括成圖4。

圖4 箭頭上的數字是海明距(HD)

海明距離HD的定義

兩個碼字的對應比特值不同(異或)的總數目稱為這兩個碼字的海明距離。一個有效編碼集中,任意兩個碼字的海明距離的最小值稱為該編碼集的海明距離。

圖4的第一種情況就是沒有編碼,0和1的碼距(HD海明距)是1;

第二種情況其實就是奇偶校驗,碼距是2,可以檢測1個錯誤;

第三種情況就是糾錯碼了,海明距是3,如果出現了1個錯誤是可以自己糾錯的,出現小于3個錯誤可以檢測。

第三種情況的有效碼字000,其中0是信息位,00是校驗位,2位的校驗碼來確定一位數據位,看上去有點太浪費了。

一種編碼的校驗和糾錯能力取決于它的海明距離。為檢測出d比特錯,需要使用碼距d+1的編碼;因為d個單比特錯決不可能將一個有效的碼字轉變成另一個有效的碼字。當接收方看到無效的碼字,它就能明白發生傳輸錯誤。

同樣,為了糾正d比特錯,必須使用碼距為2d+1的編碼,這是因為有效碼字的距離遠到即使發生d個變化,這個發生了變化的碼字仍然比其它碼字都接近原始碼字。

通過上面的例子大家理解了碼字(CODEWORD),信息位(DATA),校驗位(CHECK SUM),海明距(HD)等概念。

下面看一看圖5的CRC計算過程

圖5(來自wikipedia)

CRC在數學上就是除余運算,除數是個通項公式(固定數),

例如G(X)=X3+X+1 (1011),

被除數11010011101100,除數1011

DATA=11010011101100,

最終得到的余數 CHECK SUM=100,

所以需要傳輸的CODEWORD=11010011101100100。

用上面CRC算法作為A和B的通信協議,傳輸數據只添加了3bit的checksum,編碼效率比圖2、圖3提高不少。但是編碼和解碼算法會變復雜,所以有得必有失吧。

具體傳輸過程如下:

A發送DATA=11010011101100給B,

發送之前先編碼

假設初始CODEWORD=11010011101100000

對G(X)=X3+X+1 (1011)除余數,

最后用初始DATA加上CHECK SUM=100得到最終發送:

CODEWORD=11010011101100100。

在B接受到CODEWORD 通過解碼來檢查A的發送有沒有錯。

解碼的過程:

用CODEWORD=11010011101100100對G(X)=X3+X+1 (1011)除余數,如果余數等于0即CHECK SUM=000,就認為B接受到的數據就沒有問題。

圖6

余數等于0,就一定沒有出錯嗎?當然不是,只能說出錯的概率很低。這個可靠性跟CRC的G(X)通項公式和信息位的長度相關;

怎樣選取一個適合的CRC通項公式呢?

CRC通項公式(生成多項式)很容易找到,網上隨便一搜就會有很多。

圖7(來自wikipedia)

生成多項式有很多表示方法,CRC3多項式表示法G(X)=X3+X+1;數字表示法0x3、0x6、0x5等。數字表示法簡潔,在用軟件語言實現CRC算法時常用。

提醒一下:當看到代碼poly=0x03,很難知道多項式是什么?因為數字表示法沒有統一的定義,容易產生歧義。建議寫數字表示的時候附上多項式,這樣不會產生誤會;程序變量poly=0x03,最好后面是注釋G(X)=X3+X+1。

下面總結一下數字表示法圖8,CRC的最高位和最低位系數都有。這些表示法無非就是順序排列丟掉高位或者低位;或者逆序排列丟掉高位或者低位。

圖8

數字表示法這樣定義是為了遵循CRC的研究者的習慣。

CRC多項式的檢錯能力其實有很多研究成果,這里以koopman phail舉例,因為可以在作者的個人主頁上找到一些算好的數據。作者還是美國著名的卡內基梅隆大學的Associate Porofesor。

在講他的成果之前,先還是給出一下一些概念。用圖6的CRC3的多項式 G(X)=X3+X+1編碼:

DATA=11010011101100,

CHECK SUM=100,

CODEWORD=11010011101100100。CRC3就3個校驗位最多也就8個狀態,要編碼的DATA=11010011101100有14位,總共就有2^14種可能的接受DATA,這么多的DATA肯定有很多校驗位是相同的。

校驗位CHECK SUM=100的DATA變成相同校驗位但是數據不同的DATA1,在接受端是沒有辦法知道出錯了的。所以koopman phail就把“幾乎所有的多項式”做了統計,這些多項式隨信息位DATA的長度的變化對應CRC多項式的海明距HD的關系。

圖9就是論文中的一張圖,虛線表示所有CRC8多項式的海明距的邊界,橫坐標表示的信息數據的長度;縱坐標表示誤碼率,誤碼率越小越好。

如果信息位是8bit以下,0x9C是比較好的多項式;

如果信息位是16bit到64bit之間, 0xEA和0x97都是比較好的多項式。

其實普通人也可以統計出來的,只要每個長度的DATA都窮舉所有的碼字空間再把它們的海明距找到就行。但是計算過程的運算量還是很大的,作為工程師去查koopman phail給的表就好了。如果你還是不夠用,可以去koopman phail的主頁上去找。

圖10

現在根據圖10的表格來選個好的多項式,假設CRC需要檢測2(HD=3)錯誤,你的信息位DATA的長度是256bit那就選0x167多項式。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7530

    瀏覽量

    164408
  • 數據傳輸
    +關注

    關注

    9

    文章

    1961

    瀏覽量

    64866
  • crc
    crc
    +關注

    關注

    0

    文章

    199

    瀏覽量

    29594

原文標題:想知道數據傳輸的正確性?CRC算法來檢查

文章出處:【微信號:icstudy,微信公眾號:跟IC君一起學習集成電路】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    瑞薩RA MCU中CRC模塊的使用方法

    檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸正確性和完整。
    的頭像 發表于 12-07 10:23 ?2258次閱讀
    瑞薩RA MCU中<b class='flag-5'>CRC</b>模塊的使用方法

    如何為STM32編程節省代碼空間?在IAR中配置CRC參數有竅門

    基于STM32芯片IAR環境下的CRC配置。STM32全系列產品都具有CRC外設,對CRC的計算提供硬件支持,為應用程序節省了代碼空間。CRC校驗值可以用于
    的頭像 發表于 09-06 17:38 ?1.4w次閱讀

    CRC是什么意思

    檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸正確性和完整
    發表于 08-11 06:41

    如何正確實現EndDevice和Coordinator之間的數據傳輸

    無法將數據從Coordinator傳輸到EndDevice。雖然模板提供了數據傳輸的功能,但它并沒有告訴我如何以及在哪里調用該功能。所以我需要你幫助告訴我如何正確實現EndDevice
    發表于 03-24 08:38

    數據傳輸

    通信工程叢書--數據傳輸 這資料還是不錯的,可供參考學習哦!
    發表于 03-25 00:53 ?29次下載

    Modem數據傳輸標準

     Modem數據傳輸標準 數據傳輸標準是指MODEM的
    發表于 12-28 13:29 ?1039次閱讀

    數據傳輸速率是什么意思

    數據傳輸速率是什么意思 數據傳輸速率是通過信道每秒可傳輸的數字信息量的量度。數據傳輸速率也稱為吞吐率。數據傳輸速率由很
    發表于 03-18 14:45 ?4998次閱讀

    crc校驗方法及示例

    檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸正確性和完整。
    發表于 12-04 09:35 ?1.6w次閱讀
    <b class='flag-5'>crc</b>校驗方法及示例

    crc校驗錯誤_crc校驗錯誤怎么解決

    檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸正確性和完整。
    發表于 12-05 15:34 ?4.8w次閱讀
    <b class='flag-5'>crc</b>校驗錯誤_<b class='flag-5'>crc</b>校驗錯誤怎么解決

    關于MSP430微處理器的光無線數據傳輸系統

    本文介紹了一種基于MSP 430單片機的移動對象數據傳輸系統,它設計了一個面向對象的數據采集和接收模塊,描述了系統的工作過程,保證了數據正確性和高速
    發表于 04-25 09:18 ?2次下載
    關于MSP430微處理器的光無線<b class='flag-5'>數據傳輸</b>系統

    USB數據傳輸CRC校驗碼的并行算法實現

    文章介紹了用于 USB 總線數據傳輸CRC 校驗的原理和算法,并且采用并行電路實現 USB2.0 中的 CRC產生和CRC校驗,與傳統的串
    發表于 03-28 09:32 ?11次下載
    USB<b class='flag-5'>數據傳輸</b>中<b class='flag-5'>CRC</b>校驗碼的并行<b class='flag-5'>算法</b>實現

    傳輸時限的跨數據中心數據傳輸調度算法

    數據中心數據傳輸調度算法MSTB( Multi-source tree- Based algorithm)。在多源機制和多播轉發樹的
    發表于 05-18 16:41 ?11次下載

    單片機中幾種常見的校驗算法介紹

    CRC數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查CRC)是一種數據傳輸檢錯功能,對
    發表于 06-05 14:25 ?1848次閱讀
    單片機中幾種常見的校驗<b class='flag-5'>算法</b>介紹

    虹科技術|保障數據傳輸穩定性:BabyLIN產品的CRC算法實現

    文章將以CRC8校驗為例,介紹在BabyLIN產品中如何使用CRC校驗算法。 CRC校驗原理 在CAN報文中,增加Checksum校驗,能夠用來檢測和校驗
    的頭像 發表于 01-02 10:45 ?574次閱讀
    虹科技術|保障<b class='flag-5'>數據傳輸</b>穩定性:BabyLIN產品的<b class='flag-5'>CRC</b><b class='flag-5'>算法</b>實現

    虹科技術 | 保障數據傳輸穩定性:BabyLIN產品的CRC算法實現

    CRC校驗(循環冗余校驗)是數據通訊中最常采用的校驗方式。CAN協議中,總線通信節點也常采用CRC算法對各種總線傳輸
    的頭像 發表于 01-02 17:23 ?595次閱讀
    虹科技術 | 保障<b class='flag-5'>數據傳輸</b>穩定性:BabyLIN產品的<b class='flag-5'>CRC</b><b class='flag-5'>算法</b>實現
    主站蜘蛛池模板: 天天操夜夜欢 | 国产人成精品免费视频 | 韩国免费人成在线观看网站 | 精品一区 二区三区免费毛片 | 日本黄色大全 | 69日本xxxxxxxxx96 69日本xxxxxxxxx98 | 一区二区三区四区视频在线观看 | 国产资源在线视频 | 四虎4hu影库永久地址 | 五月天福利视频 | 国模私拍一区二区 | 亚洲国产情侣偷自在线二页 | 色婷婷色综合激情国产日韩 | 高清视频一区二区三区 | 日韩免费三级 | 日韩免费观看的一级毛片 | www.四虎影院在线观看 | 一区二区三区四区在线观看视频 | 日本精品高清一区二区2021 | 亚洲第成色999久久网站 | 国产三级在线 | 激情综合激情 | 日本久久黄色 | 色综合久久综合 | 国产在线精品美女观看 | 狠狠干狠狠干狠狠干 | 国产精品1区2区3区 国产精品1区2区3区在线播放 | 天天热天天干 | 久久青草国产手机看片福利盒子 | 三级黄色在线观看 | 欧美三级一区二区三区 | 羞羞漫画喷水漫画yy漫画 | 久久婷婷人人澡人人爱91 | 五月婷婷综合网 | 成成人看片在线 | 免费澳门一级毛片 | 天天激情站 | 182.t v香蕉人人网站 | 在线观看免费xx高清视频 | 亚洲羞羞裸色私人影院 | 丁香五月缴情综合网 |