マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「CRC(巡回冗長検査)」についてです。
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。
今回は、初心者の方からよく質問される「CRC(巡回冗長検査)」についてです。
素朴な疑問から技術トラブルなどマイコンユーザーのあらゆる悩みに対し、マイコンメーカーのエンジニアが回答していく連載「Q&Aで学ぶマイコン講座」。
今回は、初心者から多く寄せられる質問です。
マイコンに「CRC計算ユニット」が搭載されていますが、そもそもCRCとは何ですか? 何の目的で、どのように使えばよいのでしょうか?
CRCは、Cyclic Redundancy Check(巡回冗長検査)の頭文字を取った略語です。主にシリアル通信*1)で、送信データと受信データが同じかどうか確認する手法です。「CRC計算ユニット」は自動でCRC計算を行う機能です。
最初に、通信の送信側と受信側で特定の値を決めます。この値を生成多項式と呼びます。送信側は、送信前に送信データを生成多項式で割り算します。すると、商と余りが求められます。この余りの値を送信データに付加して、送信します。
受信側は、送られてきたデータから余りの部分を取り除き、生成多項式で割ります。この時に求められた余りと、データに付加された余りを比較して、一致していればデータを正常に受信できたと判断します。
図1に、CRCの仕組みを示します。ここでは、二進数の値には添え字にbを付け、十進数の値にはdを付けて表します。この例では、送信データを8ビットデータで10110011b(179d)にします。生成多項式はCRC-4(x4+x1+x0)と呼ばれる値を使います。CRC-4は10011b(19d)です。
10110011b(179d)を10011b(19d)で割ると、商が10001b(9d)で、余りが01000b(8d)です。送信側は、送信データに余りを付加して、送信します。受信側は送信データと余りを受信し、受信データを生成多項式で割ります。その計算の余りと、送られてきた余りが一致すれば、正常にデータが受信できたことになります。一致しない場合、送信側に再送要求するなどの何らかの処理を行います。
Copyright © ITmedia, Inc. All Rights Reserved.