CANデータ通信の仕組み
CANデータ通信の基本になるフレームとフォーマットの構造、それぞれの役割についてご説明します。
CAN通信の基本「ドミナント」と「レセシブ」
自動車を中心に産業機械やFA(ファクトリーオートメーション)など、幅広いシーンで活用されているシリアル通信プロトコル「CAN」。CAN通信では、情報を"0"と"1"で構成されたデジタル信号に変換して送信します。その際に"0"を「ドミナント(優性)」、"1"を「レセシブ(劣性)」と呼び、ドミナントとレセシブが同時に送信された場合はドミナントが優先される仕組みです。またCANは、さまざまな通信プロトコルで採用されているNRZ(Non-Return-to-Zero)方式でデータ変換を行い、送信を行っています。
CAN通信の単位「フレーム」について
CAN通信のデジタル信号には「フレーム」と呼ばれるまとまりがあり、「データフレーム」「リモートフレーム」「オーバーロードフレーム」「エラーフレーム」の4種類があります。
データフレーム
データを送信する際のフォーマットを「データフレーム」と呼びます。データフレームには、「標準フォーマット」と「拡張フォーマット」の2種類があります。
標準フォーマットのフレーム構造
主に乗用車のCAN通信で用いられる「標準フォーマット」のフレーム構造についてご説明します。
それぞれに記載されている数字は使用可能なビット長を表しています。上の線はレセシブ、下の線はドミナントを示し、ドミナント(もしくはレセシブ)にしか線がない場合はドミナント(もしくはレセシブ)固定、両側に線がある場合は送信データによって変化します。
- SOF
- ノードから最初に送信される部分。開始位置を示すことから「SOF(Start Of Frame)」と呼ばれ、ノード間での同期にも利用されます。
- ID
- データ内容や送信ノードの識別、通信調停の優先順位などを決定します。標準フォーマットでは11ビット長で構成され、拡張フォーマットでは11ビット+18ビットの29ビットとなります。
- RTR
- データフレームとリモートフレームを識別する「RTR(Remote Transmission Request)」は、データフレームの場合はドミナント、リモートフレームの場合はレセシブとなります。また、ID同様に通信調停にも使用されます。
- コントロールフィールド
- 1ビット長の「IDE(Identifier Extension)」と予約ビット「r」、4ビット長の「データレングスコード(DLC)」から構成されます。
- データフィールド
- 送信データ部分を「データフィールド」と呼びます。DLCの設定によって0~8バイト(0~64ビット長)になり、どのようなデータを割りあてるかは設計者が決められます。
- CRCシーケンス
- 送信ノードが「SOF」「ID」「コントロールフィールド」「データフィールド」の送信値を演算して、CRC(Cyclic Redundancy Check)シーケンスとして結果を送信します。受信ノードでも同様の演算を行うことで、正常に受信ができたかを判断します。
- CRCデリミタ
- CRCシーケンスの終わりを示します。CRCシーケンスとCRCデリミタを併せて「CRCフィールド」と呼びます。
- ACKスロット
- 送信したCRCフィールドまでのデータが正常に受信できたかを判断します。
- ACKデリミタ
- ACKスロットの終了を表します。ACKスロットとACKデリミタを合わせて「ACKフィールド」と呼びます。
- EOF
- データフレームの終わりに「EOF(End Of Frame)」が送信されます。
- ITM
- データフレームの範囲には含まれませんが、「ITM(Intermission)」と表記され、ITM後にバスアイドルとなります。ITMに関しては「オーバーロードフレーム」で唯一送信可能です。
拡張フォーマットのフレーム構造
拡張フォーマットは、標準フォーマットとはIDからRTRの部分が異なります。主にバスやトラックなどの大型車のCAN通信で使用されるフォーマットです。
- ベースID
- 標準フォーマットのIDは、拡張フォーマットでは「ベースID」と表記されます。内容については標準フォーマットに準じます。
- SRR
- 「SRR(Substitute Remote Request Bit)」は、1ビット長のレセシブになります。
- IDE
- 「IDE(Identifier Extension Bit)」は、1ビット長のレセシブになります。
- 拡張ID
- 標準ID11ビットと拡張ID18ビットを併せて29ビット長になります。識別可能な種類については、標準フォーマットは2048種類、拡張フォーマットでは約540万種類となります。
リモートフレーム
CAN通信では、データを必要とするノードからリモートフレームが送信され、そのデータを持ったノードからデータフレームを返すことで通信を行っています。リモートフレームの基本構造は、データフレームからデータフィールドを削除(もしくはDLCやデータフィールドが0バイト)したものになり、識別のためにRTRがレセシブ(データフレームではドミナント)になります。ただし、近年ではデータ占有率を下げるために、リモートフレームはとほんど使わず、各ノードへ定期的にデータフレームを送信する方式が一般的です。
オーバーロードフレーム
CANが登場したばかりのころはマイコンやCANコントローラの処理能力が低かったため、それを防止するために開発されたのが「オーバーロードフレーム」です。主にデータフレームの処理が間に合わないノードに対して送信し、次のデータフレームの送信開始を遅らせる働きがあります。
エラーフレーム
各種通信エラーが発生した際に送信されるフレームで、CANネットワーク上での異常を知らせる役目があります。