車載ネットワーク(8)CAN ハードウェア

40年前の技術の影響

40年前に開発された CAN の仕様は、当時の技術を強く反映している。当時のマイクロプロセッサは、 8ビット処理でクロックも4MHzや8MHz 程度であった。メモリーも非常に高価で容量も4キロバイトや8キロバイトが当たり前の時代だった。

マイクロプロセッサには高速処理は期待できず、十分なメモリ領域も確保できなかった。例えばプロセッサの処理能力不足に対応する「オーバーロードフレーム」機能や、エラーカウンタの最大値が 255(8ビット)に制限されているあたりに、当時の事情を思い起こさせるものがある。このような事情が背景にあり、ソフトウェア処理ではなくハードウェア処理が主役の制御方式になっている。

特にバスの特性を巧みに利用した制御方式は秀逸だ。しかし、この巧妙な方式が処理速度アップの障害になっているのも事実だ。CAN が活用したバスの主な特性は次の4点だ。ハードウェアに興味のある方は、読み進んでいただきたい。

送受信同時動作が可能

複数ノードが同時送信可能

全ノードがデータ共有

Wired OR 原理で「0」が優勢

バスの特性

送受信同時動作が可能

図1 のように、ECU(CAN ノード)には、ノードを制御するマイクロプロセッサとメモリや周辺回路がある。マイクロプロセッサの I/O の一つとして、CAN プロトコルコントローラがある。

CAN ノードの構成
図1 CAN ノードの構成

CAN プロトコルコントローラのTx(送信信号)は、CAN トランシーバ内で2本の差動信号 (CAN_H/CAN_L)に変換され、CAN バスに繋がる。また、2本の差動信号(CAN_H/ CAN_L)はCAN トランシーバで比較し、「0」または「1」のデジタル信号に変換され Rx
(受信信号)として CAN プロトコルコントローラが受け取る。

この構造から分かるように、Tx(送信信号)はバスを経由し Rx(受信信号) となる。このようなバス構造では、送信信号と同時にバスの状態を受信信号として同時モニターすることができる。他のノードの Tx(送信信号)により信号レベルが変化したり、外来ノイズ
等によりデータ化けを起こした場合にも、信号変化を検出することができる。

複数ノードが同時送信可能

信号衝突が発生するが、複数ノードは同時に送信することができる。

複数ノードの同時送信
図2 複数ノードの同時送信

全ノードがデータ共有

送信ノード1の信号(データ)は自分自身を含め全てのノードに配信される。

複数ノードの同時送信
図3 複数ノードの同時送信

Wired OR

複数のノードが同時に送信すると信号が衝突する。衝突時は、Wired or の原理でドミ
ナント「0」が優勢になる。

  • 全ての送信ノードが、同時に「1」を送信すると、CAN バス上は「1」
  • 全ての送信ノードが、同時に「0」を送信すると、CAN バス上は「0」
  • 複数のノードが同時送信し、「1」と「0」が混在すると、CAN バス上は「0」

Wired OR 動作原理

図4(左) のように、バス線が+5V に抵抗でプルアップされている。0V に繋がったスイッチは全て off になっている。この時は、バス線には全く電流が流れないため、 バス線はプルアップされた +5V になっている。図4(右)は、1つのスイッチがon になると+5V から 0V に向かい電流が流れる。スイッチ内部の抵抗はプルアップ抵抗(R)に比べはるかに小さいため、バス線はほぼ 0V に変わる。

Wired OR 原理
図4 Wired OR 原理

これが Wired OR の原理で、全てのスイッチが off の場合は、バス線は「High Level (リセッシブ)」になる。1つでもスイッチが on になると、バス線は「Low Level (ドミナント)」になる。実際の回路は、スイッチが CAN トランシーバに変わる。

スイッチ on は、図5 のように、CAN トランシーバ(送信側)が送信 Enable で「0」を送信した時に相当する。

CAN トランシーバ
図5 CAN トランシーバ

高速CAN

CAN は2線式のバス構造だ。主な物理層規格として「高速 CAN」と「低速 CAN」がある。高速 CANは、通信速度が最大 1Mビット/秒まで動作するため、主に高速なデータ交換が要求されるパワートレイン系で使用される。通信は2本線の差動方式で、2本の電圧差で「ドミナント」 (論理「0」)と「リセッシブ」(論理「1」)を判断する。差動方式は、外来ノイズがほぼ同時に2本の通信線に加わるが、電圧差で信号レベルが決まるため、ノイズは相殺し影響が少なくなる。外来ノイズの影響を受けにくい方式だ。図6 のように、CAN_HとCAN_Lの電圧差は規格では1.8Vで、両端の 120Ω 終端抵抗により 30mA の電流でCANトランシーバを駆動している。

高速 CAN
図6 高速 CAN

低速CAN

低速 CAN は、通信速度が最大 125kビット/秒まで動作するため、パワートレイン制御ほどの高速データ制御が要求されないボディー制御などで使用される。通常時は、高速 CAN と同じように2本の電圧差で「ドミナント」と「リセッシブ」を判断する。

いずれかの通信線に障害が発生した場合、シングルワイヤーモードに切り替わり単線で通信を継続する。フェールセーフな機能を持っている。図7 のように、2.2KΩ の抵抗で各電圧に繋がる。

低速 CAN
図7 低速 CAN

高速 CAN /低速 CAN の信号レベル

高速 CAN と低速 CAN の「リセッシブ」「ドミナント」の信号レベルは、図8図9 のようになる。

高速 CAN(ISO 11898-2)信号
図8 高速 CAN(ISO 11898-2)信号
低速 CAN(ISO 11519) 信号
図9 低速 CAN(ISO 11519) 信号

符号変換と同期

CAN の符号変換は NRZ(Non Return to Zero)方式だ。最も簡単な符号変換方式で、多くの通信プロトコルに採用されている。元の信号データが、そのまま「0」と「1」に変換される方式だ。この方式は変換が簡単だが、元の信号データで「1」や「0」が続くと NRZ 変換信号は変化しない。

CAN ノードは、各々独自の発振子(基準クロック)で動作しているため、ノードごとに、動作クロックの周波数や位相がずれている。受信ノードは、受信データに合わせたデータの取り込みが必要になる。このずれを抑えるため、CAN の受信ノードは、受信データの「立下り↓」で同期をとる仕組みだ。立下りがない期間が長くなると、タイミングのズレが大きくなりエラーが起きる。CAN は一定数の「0」や「1」が続くと、強制的に信号を反転させる「スタッフビット」を挿入することで、一定期間内に「立下り↓」を作り、必ず同期がとれるようになっている。

NRZ 符号変化/クロック同期タイミング
図10 NRZ 符号変化/クロック同期タイミング

CAN バスは、全てのノードが送信していないときは Bus Idle 状態(リセッシブ)で、送信が始まると SOF(ドミナント)に変化する。受信ノードは、この受信データの「立下り↓」でフレーム開始を認識し、受信を開始する。CAN の受信ノードは、データ受信中も「立下り↓」で同期を取り直すが、フレーム開始も「立下り↓」で同期を取り受信を開始する(図11)。

図11 フレーム受信開始

ビットスタッフィング

CAN では、スタッフビットを挿入することで、定期的にデータの「立下り↓」を作るようになっている。NRZ 変換の欠点を補完するためだ。具体的には、バス上で同じ状態が5回連続した場合に、送信側で強制的に信号を反転させる「スタッフビット」を挿入する。

スタッフビットの挿入で、バス上では同じ状態が6回以上連続することはなくなる。受信側は、データ受信後スタッフビットを削除し、元の状態に戻す。

スタッフビットの挿入により、少なくとも10ビットに1回はデータの「立下り↓」があり、再同期をかけることができる。最悪の状態では、10ビット×1.58%×2 = 31.6% の誤差が発生する。かなりきわどい誤差だ(図12)。

ビットスタッフィング
図12 ビットスタッフィング

車載ネットワーク

この記事を書いた人

岩崎 有平

早稲田大学 理工学部 電子通信学科にて通信工学を専攻。
安立電気(現 アンリツ)に入社後、コンピュータ周辺機器の開発を経てネットワーク機器の開発やプロモーションに従事する。
おもにEthernetを利用したリアルタイム監視映像配信サービスの実現や、重要データの優先配信、映像ストリームの安定配信に向けた機器の開発行い、Video On Demandや金融機関のネットワークシステム安定化に注力した。
現在は、Ethernetにおけるリアルタイム機能の強化・開発と普及に向けて、Ethernet TSNの普及活動を行っている。