産業環境で使用される電子システムは、極限的な周囲温度や電気的ノイズの多い環境など苛酷な条件にさらされる場合が多くありますが、そのような厳しい環境下でも正確に動作するものでなければなりません。たとえば、ロボット・アームの位置を制御するD/Aコンバータ(DAC)への入力データが破損すると、アームが予期せぬ方向に動くおそれがあります。これは危険なだけでなくコストの上昇にもつながります。アームが生産ライン上の自動車の側面に衝突することや、さらには作業者に衝突する可能性さえあるからです。
正しいデータが受信されたかどうかを、動作を実行する前に確認する方法はいくつかありますが、最も簡単なものは送信されたデータをコントローラでリードバックする方法です。受信データが送信データと一致しなければ、その一部が破損しているので、新しいデータを送信して確認します。この方法は信頼性の高いものですが、大きなオーバヘッドも伴います。すなわち、一連のデータごとに確認が必要となり、転送するデータ量も倍増します。
これに代わる方法としては、データ・パケットごとにチェックサムを送信するCRC(巡回冗長検査)があります。この場合は、受信側のデバイスが問題発生の有無を知らせるので、コントローラが受信確認をする必要はありません。一般に、チェックサムを生成する場合はデータに多項方程式を適用します。CRC-8を24ビット・ワードに適用すれば、8ビットのチェックサムが生成されます。チェックサムとデータを組み合わせ、その組合せをチェック/分析するデバイスにこれらの32ビット・データを送信して、エラーが発生した場合のみに送信側へ通知するというこの方法は、完全無欠なソリューションではありませんが、書込み/読出し方式よりは効率的です。
アナログ・デバイセズ(ADI)には、パケット・エラー・チェック(PEC)という形式でCRC生成機能を実装したDACが多くあります。PEC機能が不要なときには、24ビットのデータが書き込まれます。PEC機能を追加すると、24ビット・データに8ビットのチェックサムが追加されます。受信したチェックサムがデータの内容と一致しない場合は、出力ピンがローレベルになってエラーを示します。コントローラはエラーをクリアし、ピンをハイレベルに戻して、データを再送します。図1にSPIインターフェースを用いたデータの入力方法を示します。表1には、パケット・エラー検査を実行できるADI 製品の例を示します。

表1. パケット・エラー検査を実行できるADI 製品の例
製品番号 | 説明 |
AD5360/AD5361 | 16チャンネル、16/14ビット、±10V出力DAC |
AD5362/AD5363 | 8チャンネル、16/14ビット、±10V 出力DAC |
AD5748 | 産業用電流/電圧出力ドライバ |
AD5749 | 産業用電流出力ドライバ |
AD5750/AD5750-1 | 出力レンジプログラマブル産業用電流/電圧出力ドライバ |
AD5751 |
産業用電流/電圧出力ドライバ |
AD5755/AD5735 | 4チャンネル、16ビット、4 ~ 20mAの電流/電圧出力DAC |
AD5757/AD5737 | 4チャンネル、16ビット、4 ~ 20mAの電流出力DAC |
ADT7470 | 温度センサ・ハブおよびファン・コントローラ |
パケット・エラー・チェックサムの生成
CRC-8アルゴリズムには、多項式C(x) = x8 + x2 + x1 + 1を使用します。x = 2の場合、この値はバイナリ値100000111となります。チェックサムを生成するために、まず24ビット・データは8ビットだけ左にシフトされ、8個のロジック0で終わる32ビット値が生成されます。CRC多項式の値は、そのMSBが32ビット・データ内のもっとも左端にあるロジック1と揃うように配置されます。排他的論理和(Exclusive OR)計算がそのデータに適用され、 新しい(より小さい)数値が生成されます。(XORでは、両ビット値が一致するとロジック0、両ビット値が一致しないとロジック1が得られます。)CRC多項式の値はそのMSBが前の計算結果値のもっとも左端のロジック1と揃うように再配置され、引き続き同じ手順(XOR)が繰り返されます。最終的には、元のデータがCRC多項式の値より小さくなります。この値が8ビットのチェックサムです。図2に、チェックサムの生成方法を示します。

結論
図2の例は、16進値の0x654321を24ビット・データ・ワードとして用いています。ここでは、CRC-8多項式をデータに適用してチェックサム値0x86を生成しました。データとチェックサムをADI の互換製品に送信すると、両方のデータが正しい場合にのみ送信データは受け付けられます。この方法によってデータ送信の信頼性が向上し、破損データのほとんどを受領拒否することができます。