CRC-8計算を理解する

  未分類

全然理解してないわけではないけど、
シリアルインタフェースでCRCが出てきてもパッと計算できず、
結局は人様が作ったツールに頼り切ってしまう。(よく使うのは以下)
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

自作ツールを作りがてら、再勉強する。

Contents

多項式

まずは、CRC-8演算で使用される多項式は複数あるので、
以下を参考に整理。
https://en.wikipedia.org/wiki/Cyclic_redundancy_check

CRC-8-ATM
CRC-8/ITU
X^8 + X^2 + X + 1(0x07)ATM
CRC-8-CCITTX^8 + X^7 + X^3 + X^2 + 1(0x8D)シリアルバス
CRC-8-Dallas/MaximX^8 + X^5 + X^4 + 1(0x31)シリアルバス
CRC-8X^8 + X^7 + X^6 + X^4 + X^2 +1(0xD5)汎用
CRC-8-SAE J1850X^8 + X^4 + X^3 + X^2 + 1(0x1D)SAE J1850
CRC-8-AUTOSARX^8 + X^5 + X^3 + X^2 + X + 1(0x2F)Automotive
CRC-8-BluetoothX^8 + X^7 + X^5 + X^2 + X + 1(0xA7)無線通信
CRC-8-GSM-BX^8 + X^6 + X^3 + 1(0x49)モバイル通信
CRC-8-WCDMAX^8 + X^7 + X^4 + X^3 + X + 1(0x9B)モバイル通信
CRC-8-DRACX^8 + X^5 + X^4 + X^3 + 1(0x39)Radio Channel

ただ、実際は通信規格によって、初期値・入力反転・出力反転・XOR出力などの設定があり、単純に多項式だけでは決まらない。
が、全部調べきれてないので、まずは以下を基本としてC言語でアプリを作成。

  • Polynominal : 設定可変
  • 初期値:設定可変
  • 左送り
  • 入力反転:無し
  • 出力反転:無し
  • XOR出力:無し

アプリ作成

実際に作成したソースは以下。

使用方法

以下のオプションを指定して、スペース区切りで入力データをインプット
 ”-p”オプション:多項式
 ”-i”オプション :初期値

LEAVE A COMMENT