株式会社サニー技研 > 製品情報 > CANツール > CAN(Controller Area Network)とは

CAN(Controller Area Network)とは

CAN(Controller Area Network)とは

CANは、ISOにて国際的に標準化されたシリアル通信プロトコルです。
これまで自動車産業では、安全性、快適性、低公害、低コストを求め、自動車の電子制御システムを様々に開発してきました。これらの制御システムは、システムごとに複数のバスラインに構成される場合が多く、ワイヤーハーネスの増加、それに伴う重量及びコストの増大が問題となっていました。そこで、”ワイヤーハーネスを削減する”、”複数のLANを介して大容量のデータを高速に通信する”ことを目的に、ドイツの電装メーカBOSCH社が自動車の電子制御システム向け通信プロトコルとしてCANを開発しました。

CANはISO11898で規格化され、自動車LANの標準プロトコルに位置づけられています。また、現在ではCANの高い性能と信頼性が認められ、FA、産業機器等、多方面にわたり使われています。

ISO11898ではデータリンク層がISO11898-1で規定され、2015年には従来のCAN(Classic CAN)に加えてCAN FDの仕様が追加されました。CANの物理層はISO11898-2でHighSpeed CAN(高速CAN)、ISO11898-3でLowSpeed CAN(低速CAN)をそれぞれ規定しています。本ページではISO11898-2 HighSpeed CANについて主に記載します。

 

CANの特長

◆マルチマスタ(CSMA/CA方式)
バスが空いている時はバスに接続される全てのノードが送信を始めることが可能。
CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)方式によるメッセージ送信権の優先順位付けを実施。

◆外部からのノイズへの耐性
データの送信に差動電圧方式を採用することにより、外部からのノイズの影響を受けにくい。

◆エラーの検出・通知・リカバリー機能
全てのノードにエラーを検出・通知・リカバリー機能あり。

 

CANの応用例

 

高速CANと低速CANの簡易比較

高速CAN(HighSpeed CAN)
ISO11898-2
低速CAN(LowSpeed CAN)
ISO11898-3
バスの形状 ループバス オープンバス
通信速度 最大1Mbps 最大125Kbps
最大バス長 40m/1Mbps 1km/40kbps
バスへの接続数 最大30 最大20
フォールトトレラント なし あり

 

CANプロトコルについて

CANの概略仕様

ISO11898-2(HighSpeed CAN)

ネットワーク構成 マルチマスタ(CSMA/CA方式)
通信速度 MAX1Mbps
伝送路 2線式
接続 バス型
伝送方式 半二重通信
同期方式 レセシブ→ドミナントの立下りエッジに対し、全てのノードが同期を合わせる
その他の特徴
  • システムの柔軟性(ノードの追加削除が容易)
  • エラーの検出・通知・リカバリー機能
  • コントローラ内蔵汎用マイコン、トランシーバ数、開発ツールの豊富さ
適応箇所 独立したシステム間結合向き、車両運動制御系など自動車の基幹ユニットのメインネットワークとして使用

 

CANの物理層

CANはCANH・CANLと呼ばれる通信線を使って送信、受信の両方を行っています。
CANの信号は、2本の通信線の電圧の差動によって送信されます。
電位差のない信号はレセシブといい論理値は1を指します。電位差のある信号はドミナントといい論理値は0を指します。
ドミナントとレセシブが通信バス上で衝突した場合には、ドミナントが優先されます。
また、双方の線にいくらかの電圧が加わってもCANH・CANLの両方に同じノイズが乗るため電圧の差には大きな変化がみられないことから、外部からのノイズに強いという性質があります。

 

マルチマスタ方式

CANはバスが空いている時は、バスに接続される全てのノードがメッセージの送信を始めることが出来るマルチマスタ方式です。
バスに対して最初に送信を開始したノードが送信権を獲得し、同時に複数のノードが送信を始めた場合は、優先順位の高いIDのメッセージを送信しているノードが送信権を獲得することが可能なCSMA/CA方式を採用しています。

また、バスにつながるノードは、アドレスのような情報を所持していません。そのためバスにノードを追加または削除する場合、バスにつながる他のノードのソフトウェア、ハードウェアおよびアプリケーション層に変更を加える必要がなく、システムの設計に柔軟性があります。

 

アービトレーション(通信調停)

メッセージを送信するノードは通信バスの電圧を監視しており、送信したデータが本当にバスに流れているかを1bitずつ確認しています。2つのノードが同時に送信を行った場合、メッセージに含まれる識別子(ID)を使用し、送信優先権を付与することでメッセージの衝突を避ける仕組みがあります。このような仕組みをアービトレーション(通信調停)と呼び、このアービトレーションの仕組みによってCSMA/CA方式を実現しています。
通信調停負けした時点で、通信調停負けしたノードは送信を取りやめ、受信モードに移行します。通信調停を通過したノードがメッセージを送信し終えた後にメッセージを再送します。

 

ビットスタッフィング

CANは信号の立ち下がりを検出することで、他ノードとのタイミングを調整し同期を取ります。
そのため1または0の信号がずっと続くと微調整の機会が来ないまま長時間経過し、小さなずれが積み重なって、送り手と受け手でビットのずれが発生する可能性があります。
この同期ずれを防ぐためにCAN通信では5連続した0または5連続した1を送信したら、その反転ビットを挿入しなければならない仕様になっています。
この仕様をビットスタッフィングといい、挿入されるビットをスタッフビットといいます。
スタッフビットを挿入することで定期的な立ち下がりが検出され、受信側で同期をとることができます。

 

CANのフレーム構成

フレーム フレームの役割
データフレーム 送信ノードが受信ノードへメッセージを送る時に使用する
リモートフレーム 受信ノードが特定の送信ノードへメッセージの送信を要求する時に使用する
エラーフレーム エラーを検出した時に他ノードへ通知する時に使用する
オーバーロードフレーム 受信ノードが受信準備未完了を通知する時に使用する
インターフレームスペース データフレームおよびリモートフレームを前のフレームと分離させるために使用する

 

データフレーム

データフレームには標準フォーマットと拡張フォーマットの2種類のフレームフォーマットがあります。
拡張フォーマットでは、Base ID11bitにID Extension18bitが追加され、合計29bit長のIDを表すことができます。
また、標準フォーマットと拡張フォーマットが同じIDを同時送信した場合は、標準フォーマットが優先されます。

標準フォーマット

SOF(Start Of Frame)
 データフレームの開始を通知する領域で、1bitのドミナントです。
Arbitration Field(調停フィールド)
 フレームの優先順位を判断する領域
   Base ID:標準ID11bit分を設定
   RTR:データフレームとリモートフレームの判別を行う
Control Field
 IDE、FDF、DLCで構成される領域
   IDE:標準フォーマット、拡張フォーマットの区別を行う
   FDF:CANとCAN FDを区別するビット
   DLC:データ長を表す
Data Field
 データを格納する領域
CRC Field
 フレームの伝送誤りを判断する領域
ACK Field
 正常受信した確認の合図を表す領域
EOF(End Of Frame)
 データフレームの終了通知する領域

 

拡張フォーマット

拡張フォーマットは、Arbitration FieldとControl Fieldが標準フォーマットと異なります。
拡張フォーマットは主にバスやトラックなどの大型車両のCAN通信で使用されることが多いフォーマットです。

Arbitration Field(調停フィールド)
 フレームの優先順位を判断する領域
  Base ID:標準11bit分のIDを設定
  SRR:Substitute Remote Request Bitで1bitのレセシブ固定
  IDE:Identifier Extension Bitで1bitのレセシブ固定、標準フォーマット、拡張フォーマットの区別を行う
  ID Extension:18bit分の拡張IDを設定、Base IDと併せて計29bit分のIDを表すことが可能
  RTR:データフレームとリモートフレームの判別を行う
Control Field
 FDF、r0、DLCで構成される領域
   ・FDF:CANとCAN FDを区別するビット
   ・r0 :予約領域
   ・DLC:データ長を表す

 

CANのエラー

各ノードはエラー状態というステータスを持っています。
エラー状態とはエラーアクティブ、エラーパッシブ、バスオフの3つの状態を指し、各ノードの持つ送信エラーカウンタ、受信エラーカウンタの値に応じて、いずれかのステータスに分類されます。
CANは多重通信のため、1つのバスを複数のノードが使用しています。そこに故障したノードがずっといるとエラーフレームを大量に送信することになり、他の正常なノードの通信を妨げることになります。
エラーを多発するノードは通信から隔離することで、他のノードの通信を妨げない(故障の封じ込め)仕組みになっています。

エラーアクティブ
 エラーが起きていない正常な状態。
 エラーアクティブ状態のノードがエラーを検出したときはアクティブエラーフラグを出力します。

エラーパッシブ
 エラーアクティブからエラーカウンタが一定の値を超えるとエラーパッシブに遷移します。
 エラーパッシブ状態のノードがエラーを検出していても、他のエラーアクティブ状態のノードがエラーを検出していなければ、
 バス全体としてはエラーがなかったと判断されます。
 エラーパッシブ状態のノードがエラーを検出したときはパッシブエラーフラグを出力します。
 エラーパッシブ状態のノードはデータの送信に一定の制限がかかる状態になります。
 エラーが少なくなれば、エラーアクティブに復帰できます。

バスオフ
 エラーパッシブから更にエラーカウンタが増えていくとバスオフ状態になります。
 通信に参加出来ない状態を指します。

 

エラーフレーム

エラー条件を検出したノードは、エラーフラグを出力することでエラーを他のノードへ通知します。
エラーフラグはノードのエラー状態によりアクティブエラーフラグ、またはパッシブエラーフラグを出力します。
送信ノードは、エラーフレーム出力後にデータフレームまたはリモートフレームの再送を行います。


ビットエラー
検出ノード:送信/受信
出力レベルとバス上のレベルを比較し、両者のレベルが不一致の場合に検出します。
ドミナント出力のスタッフビットは対象、送信時のアービトレーションフィールドおよびACKは対象外となります。

スタッフエラー
検出ノード:送信/受信
ビットスタッフが行われているはずのフィールドの中で、同一レベルが6bit連続した時に検出するエラー

CRCエラー
検出ノード:受信
受信したメッセージから算出したCRCの結果と、受信されたCRCシーケンスの値が異なる場合に検出するエラー

フォームエラー
検出ノード:送信/受信
固定フォーマットのビットフィールドに違反した場合に検出するエラー

ACKエラー
検出ノード:送信
送信ノードのACKスロットがレセシブレベルの場合に検出するエラー(ACKが返ってこなっかた場合に検出するエラー)

エラーフレームの出力タイミング

エラーの種類 出力タイミング
ビットエラー
スタッフエラー
フォームエラー
ACKエラー
エラーを検出した直後のビットからエラーフラグを出力
CRCエラー ACKデリミタの次のビットからエラーフラグを出力

 

サニー技研のCAN通信への取り組み

サニー技研のCANへの取り組みは1998年からスタートしており、OEM、サプライヤ向け量産ECU用CAN通信ミドルウェアの開発の他、CAN用バスアナライザやCANコンフォーマンステスタ、CAN通信リプログソフトウェア等、CAN通信を使った様々な受託開発や製品開発を手がけています。

サニー技研のCAN製品はこちらをご参照ください