当前位置: 首页>編程日記>正文

CRC-8 原理

CRC-8 原理

CRC-8 校验

假设:

  1. 校验多项式是:​g(x) = X^8 + X^5 + X^4 + 1

  2. 需要校验的数据是:0x0102

计算过程:

  1. 校验多项式 g(x) 对应的二进制为 1 0011 0001 ,即 0x131

  2. 因为需要 8 位 CRC 校验,所以将需要校验的数据左移 8 位,得到:0000 0001 0000 0010 0000 0000

  3. 将步骤 2 中左移后的数中最高位的 0 全部去掉,得到:1 0000 0010 0000 0000

  4. 将步骤 3 中的结果按高位对齐的方式和校验多项式的二进制数进行异或运算:(低位不够补0)

              1 0000 0010 0000 0000

              1 0011 0001 0000 0000          // 异或

                          ————————————————————

              0 0011 0011 0000 0000

  5. 将步骤 4 中结果的最高位 0 全部去掉,得到:11 0011 0000 0000

  6. 将步骤 5 中结果按高位对齐的方式和校验多项式二进制数进行异或运算:(低位不够补0)

             11 0011 0000 0000

             10 0110 0010 0000      // 异或

                        ————————————————————

             01 0101 0010 0000

     7. 重复步骤 5-6,直到最终结果只剩下 8 位:

             1 0101 0010 0000

             1 0011 0001 0000             // 异或

                           ————————————————————

             0 0110 0011 0000

               100 1100 0100             // 异或

                           ————————————————————

               010 1111 0100

                10 0110 0010      // 异或

                                 ————————————————————

                00 1001 0110

 

     8. 校验结果为:1001 0110 ,即 0x96

 

 

总结

1. 写下这篇文章的缘由是用stm32驱动mlx90614温度传感器时,SMBus中线中有这个校验;

2. 任意字节数,经过CRC校验后的结果位数和CRC多项式二进制值相同。比如上面的例子,不管输入的传输的数是 0x0102 还是 0x01020304 ,结果都是 8 位的二进制值;

3. 校验码在线计算工具:CRC(循环冗余校验)在线计算_ip33.com

      

从上图可以看到,有很多参数模型可以选择:对于CRC8,就有四种:CRC-8,CRC-8/ITU,CRC-8/ROHC,CRC-8/MAXIM。

这四种都有什么区别呢?我们可以选择相应的参数模型后对比后面的参数差异。

这里主要解释一下,各个参数的意义:

        1. 宽度:即CRC多项式中最高次的指数。比如上面例子中的宽度就是 8 ;

        2. 多项式POLY:即多项式的二进制值(省略最高位,从上面的例子可以看到,最高位的结果一直是零)。上面的例子是 07 ;

        3. 初始值:CRC的初始值。(常见的初始值都为 0,但有的初始值全为 1,当初始值不为 0 时,传输 0x20 和 传输 0x0020 的校验结果是一样的,

            所以初始值不为 0 是为了检测出传输数据前面的 0 的个数不出错。)(说了这么多,我也不知道怎么个不为 0 法。。。)

        4. 结果异或值:这个很简单,就是对前面得出的结果再次和指定值进行一次异或。默认为 全0,任何数和 0 异或后结果不变。

        5. 输入数据反转:在进行所有计算之前,把输入数据按位反转所有位。假设上面的输入框写的是 “80 40”,则实际上是对 “01 02” 计算的校验码。

        6. 输出数据反转:在对结果进行结果异或值运算之前,按位反转所有位。

 

 

 

 


https://www.fengoutiyan.com/post/15548.html

相关文章:

  • CRC编码
  • crc解码程序
  • crc码生成原理
  • crc32算法原理
  • CRC算法
  • 单片机crc校验程序
  • CRC16
  • crc16校验原理
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機