精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

CRC校驗的計算過程

TopSemic嵌入式 ? 來源:TopSemic嵌入式 ? 作者:TopSemic嵌入式 ? 2022-07-15 11:06 ? 次閱讀

據說剛過去的高考數學很難,小編當年上學時挺喜歡數學的,最近特意復習了一下CRC校驗的計算過程。

CRC是眾多校驗方式中的一種,校驗的目的是為了檢測數據的正確性。在詳細介紹CRC計算之前,我們先來看兩個常見的較為簡單點的校驗:串口通信中的奇偶校驗和身份證號碼中的MOD 11-2校驗。

先看奇偶校驗,假設要發送8位數據10110101,奇校驗是再加一位校驗位,讓這9位數據中的1的個數為奇數。

10110101->101101010 奇校驗

偶校驗是讓這9位數據中1的個數為偶數。

10110101->101101011 偶校驗

接收方收到數據后計算其奇偶性,如果不對,則說明數據傳輸中發生了錯誤。

奇偶校驗優點是使用簡單,缺點是檢錯率有限,只有奇數個數據位發生變化的錯誤能檢測到,偶數個數據位變化的錯誤它檢測不了。

最近拿著身份證去核酸檢測的次數太多了,讓我對身份證號碼的組成產生了興趣,尤其好奇的是為什么有的身份號號碼最后一位是X。身份證號碼總共18位,包括17位數字碼和1位校驗碼。

1)1-6位是地址碼,表示編碼對象所在縣。

2)7-14位是出生日期碼,表示編碼對象出生的年、月、日。

3)15-17位是順序碼,表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。

4)校驗碼,用來檢驗身份證號碼是否正確,采用MOD 11-2校驗碼系統。

5917011e-0360-11ed-ba43-dac502259ad0.png

校驗的公式如下:

592dbd00-0360-11ed-ba43-dac502259ad0.png

簡單來說它的校驗規則是:連校驗碼一起,由從右到左逐位乘以2的n次方取模11并求和,對11的余數必須為1。

以一個身份證號碼11010519491231002X為例,

5956ca42-0360-11ed-ba43-dac502259ad0.png

校驗碼計算如下:

1) 將前面的身份證號碼17位數分別乘以不同的系數。從左到右的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2) 將這17位數字和對應的系數各自相乘的結果相加7+9+0+5+0+20+2+9+24+27+7+18+30+5+0+0+4=167;

3) 用加出來的和167除以11,余數是2;

4) 余數2對應校驗碼是X;

看完上述計算方法之后,大家可以用自己的身份證號碼試試。

該校驗算法據說可以:

1) 如果某一位填錯了,則校驗算法可以檢測出來。

2) 如果身份證號的相鄰2位填反了,則校驗算法可以檢測出來。

這也是為什么要除以11而不是10的原因,其背后的數據理論推理已經超出了我的能力范疇,這里不再介紹了。

上面的兩種校驗和CRC校驗沒有什么關系,只是為了讓大家對校驗先有個感性的認識,下面來正式介紹CRC。

我在網上找了兩個計算CRC的軟件,輸入同樣的數據,選擇同樣的算法,得到的結果一樣,

596866da-0360-11ed-ba43-dac502259ad0.png

59964730-0360-11ed-ba43-dac502259ad0.png

這兩個軟件的對應關系如下:

59bf738a-0360-11ed-ba43-dac502259ad0.png

把CRC Calculator Info 中的這幾個參數弄明白,CRC的過程你也就清楚了

Name:算法的名稱,比如對于16bit的CRC來說就有好多個名字,也就是雖然都是16 bit CRC,但是計算方式也有好多種。

59e31ace-0360-11ed-ba43-dac502259ad0.png

Width:指的CRC校驗值的長度,通常有8bit,16bit,24bit,32bit等。

Poly:是多項式的值,以上面圖中的CRC-8:x8+x2+x+1為例,它表示二進制為100000111,去掉最高位的1,十六進制表示就是0x07

Init: Init 的位數和Poly的位數相同,它的值為全0或者全F,當全為0時,在算法開始前對數據(這個數據是根據RefIn的值得到的)后面補上CRC位數個0后就可以進行后續計算了。當全為1時,表示在算法開始前對數據的前CRC位數(高位)先和對應位數個1進行異或(即:前CRC位數的值按位取反),再在后面補上CRC位數個0,才進行后續計算。

RefIn和Refout:它們要么全為False,要么全為True。

RefIn為False表示,輸入的原始數據的每個字節的第7位作為最高有效位,第0位作為最低有效位,即正常計算即可

當RefIn為True時,輸入的原始數據的每個字節需要做個逆序的處理,注意:針對的每個字節,而不是整個數據,以一個4字節的原始數據為例:

5a213ee4-0360-11ed-ba43-dac502259ad0.png

當Refout為False時,輸出不做處理,當Refout為True,需要對輸出數據做一次整個數據的逆序處理,注意:這里做的逆序和RefIn不同,它不是按字節逆序,而是整個逆序,以CRC-32為例來說明,最后的數據為32位,當Refout為True時,翻轉如下:

5a4137b2-0360-11ed-ba43-dac502259ad0.png

XorOut:表示根據上面參數計算完后,和這個數再進行一次異或。

下面分析一下上面的結果0x79的由來:

1) 0x13 對應二進制為00010011

2)由于RefIn為False,所以0x13不做處理還是00010011

3) 因為Init為0x00,00010011后面加8個0即可,輸入數據變為0001001100000000

4) 多項式為x8+x2+x+1 對應二進制100000111,將上述0001001100000000 除以該多項式對應的100000111

整個計算過程如下:

5a4d1546-0360-11ed-ba43-dac502259ad0.png

最后得到余數:01111001

5) 由于RefOuT為False,所以余數不變,還為01111001

6) 由于Xorout為0,表示不用再取反,所以最終的結果就是01111001,即十六進制0x79

算一個不過癮,我們再來計算一個

5a5dd430-0360-11ed-ba43-dac502259ad0.png

這一次和上面唯一的不同是將初始值由原來的0x00換為了0xFF,這個例子就是給大家演示初始值到底什么意思.

下面分析一下上面的結果0x79的由來:

1) 0x13 對應二進制為00010011

2) 由于RefIn為False,所以0x13不做處理還是00010011

3) 因為Init為0xFF,00010011的高8位要先與0xFF異或,輸入數據變為11101100,后面再加入8個0,變為 1110110000000000

4) 多項式為x8+x2+x+1 對應二進制100000111,將上述1110110000000000 除以該多項式對應的100000111,最后得到余數:10001010

5) 由于RefOuT為False,所以余數不變,還為10001010

6) 由于Xorout為0,表示不用再取反,所以最終的結果就是10001010,即十六進制0x8A

這個例子演示了初始值的含義,我們再看最后一個例子,這個例子演示了RefIn和RefOut為True的具體含義

5a70e9e4-0360-11ed-ba43-dac502259ad0.png

1) 0x13 對應二進制為00010011

2) 由于RefIn為True,所以0x13需要逆序一下得到11001000

3) 因為Init為0x00,所以11001000后面直接添加4個0即可,得到110010000000

4) 多項式為x4+x+1 對應二進制10011,將上述110010000000 除以10011,最后得到余數:0010

5) 由于RefOuT為True,所以余數要逆序變為0100

6) 由于Xorout為0,表示不用再取反,所以最終的結果就是0100

CRC每種參數模型的檢錯能力,同時CRC也可以糾錯,這需要專業的數學計算,這也超出了我的能力,這里也不介紹了。

看完這些大家應該都清楚了CRC的計算,有些 MCU本身集成了硬件CRC模塊,你只需要配置寄存器,就可以算出CRC結果了,或者也可以通過軟件來實現,https://github.com/whik/crc-lib-c 有一個開源的代碼可以用。不管哪種方法,了解下詳細的計算過程還是有好處的。

CRC計算軟件和github 軟件代碼下載如下:

https://cowtransfer.com/s/05d6adadea654c 或 打開【奶牛快傳】cowtransfer.com 使用傳輸口令:diz36q 提取

審核編輯:湯梓紅

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

    關注

    0

    文章

    197

    瀏覽量

    29357
  • 計算
    +關注

    關注

    2

    文章

    437

    瀏覽量

    38608
  • 校驗
    +關注

    關注

    0

    文章

    40

    瀏覽量

    12581

原文標題:CRC校驗怎么算?

文章出處:【微信號:TopSemic,微信公眾號:TopSemic嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于CRC校驗的問題,求解答

    ,uint16_t Len )//指針指向的數據順序影響校驗結果,{//此計算過程計算指針指向的最低字節uint16_t CRC_Reg;uint8_t num;uint8_t Da
    發表于 04-06 17:33

    CC1310的CRC校驗計算的問題,請問能否在Tx端計算CRC的值然后放在數據包的末尾當成CRC校驗的字節?

    CRC校驗的)Tx:CC115L、CC1310或其他,關閉CRC計算,給接收端發送一個數據包。一般結果:接收端顯示CRC
    發表于 06-06 00:49

    CRC-16/Modbus校驗計算

    CRC-16/Modbus校驗計算輸入進制字符串,輸出校驗計算
    發表于 09-11 14:44

    40位以內任意長度的CRC計算校驗的實現

    論述了40位以內任意長度的CRC計算校驗在TMS320C5000系列DSP中的實現方法。運用該方法能實現任意信息長度的40位以內任意CRC碼的計算
    發表于 05-05 20:31 ?1872次閱讀
    40位以內任意長度的<b class='flag-5'>CRC</b><b class='flag-5'>計算</b>及<b class='flag-5'>校驗</b>的實現

    CRC標準及計算過程

      標準   根據應用環境與習慣的不同,CRC又可分為以下幾種標準:   ①CRC-12碼;   ②CRC-16碼;   ③CRC-CCITT碼;   ④
    發表于 08-13 11:17 ?2627次閱讀

    crc校驗基本原理

    本內容介紹了crc校驗基本原理,CRC幾個基本概念,CRC碼的生成步驟.CRC即循環冗余校驗碼(
    發表于 12-21 16:55 ?4654次閱讀

    CRC校驗碼算法的研究與實現

    為了提高實際通信中檢查信號傳輸錯誤的能力,提高和推廣CRC校驗技術,本論文用邏輯代數知識、按模運算、代數知識和C語言編程工具設計了幾種具體實用的CRC校驗碼的
    發表于 05-28 15:41 ?0次下載

    crc校驗原理_怎樣修復crc校驗錯誤

    crc校驗原理 利用CRC進行檢錯的過程可簡單描述為:在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個校驗用的r位監督碼(
    發表于 09-05 09:26 ?3.5w次閱讀
    <b class='flag-5'>crc</b><b class='flag-5'>校驗</b>原理_怎樣修復<b class='flag-5'>crc</b><b class='flag-5'>校驗</b>錯誤

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

    CRC即循環冗余校驗碼(Cyclic Redundancy Check[1] ):是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(
    發表于 12-05 15:34 ?4.7w次閱讀
    <b class='flag-5'>crc</b><b class='flag-5'>校驗</b>錯誤_<b class='flag-5'>crc</b><b class='flag-5'>校驗</b>錯誤怎么解決

    CRC計算工具CRC校驗計算器應用程序免費下載

    本文檔的主要內容詳細介紹的是CRC計算工具CRC校驗計算器應用程序免費下載。
    發表于 07-01 08:00 ?132次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>計算</b>工具<b class='flag-5'>CRC</b><b class='flag-5'>校驗</b>碼<b class='flag-5'>計算</b>器應用程序免費下載

    CRC校驗 、STM32中CRC計算單元、 CRC應用

    CRC校驗、STM32中CRC計算單元、CRC應用
    的頭像 發表于 03-04 13:54 ?5849次閱讀

    CRC校驗碼并行計算的FPGA實現

    用軟件實現 CRC 校驗計算很難滿足高速數據通信的要求 ,基于硬件的實現方法中 ,有串行經典算法 LFSR 電路 以及由軟件算法推導出來的其它各種并行計算方法。以經典的LFSR 電路
    發表于 03-28 09:34 ?30次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗</b>碼并行<b class='flag-5'>計算</b>的FPGA實現

    CRC校驗原理及實現

    作者:王超首發:電子電路開發學習目錄前言CRC算法簡介CRC計算CRC校驗CRC
    發表于 01-26 17:37 ?30次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗</b>原理及實現

    CRC循環冗余校驗簡介

    CRC 是Cyclic Redundancy Check的縮寫,循環冗余校驗,用于校驗數據傳輸的完整性。一般情況下在數據發送前計算CRC
    的頭像 發表于 04-24 13:04 ?5915次閱讀
    <b class='flag-5'>CRC</b>循環冗余<b class='flag-5'>校驗</b>簡介

    工控常用LRC XOR累加和CRC校驗工具校驗碼自動生成軟件多計算方式

    CRC校驗工具 校驗碼自動生成軟件支持十幾種CRC計算方式,包括MODBUS協議的CRC-16
    的頭像 發表于 11-25 14:27 ?3124次閱讀
    工控常用LRC XOR累加和<b class='flag-5'>CRC</b><b class='flag-5'>校驗</b>工具<b class='flag-5'>校驗</b>碼自動生成軟件多<b class='flag-5'>計算</b>方式