CAN バスと通信プロトコルを 1 つの記事で読む

CANバス車

 

CANのコンセプト

CANとは、 Controller Area Network (CAN)の略で、 車載電子製品の研究開発・生産で有名なドイツのBOSCH社によって開発され、最終的に国際規格( ISO11898 )となったISO国際規格のシリアル規格です。標準化の通信プロトコル世界で最も広く使用されているフィールドバスの 1 つです。北米と西ヨーロッパでは、CAN バス プロトコルが車載コンピュータ制御システムおよび組み込み産業用制御 LAN の標準バスとなっており、 CAN を基礎プロトコルとして大型トラック重機車両向けに設計されたJ1939 プロトコルがあります。近年ではその高い信頼性と優れたエラー検出能力が評価され、厳しい周囲温度、強い電磁波、大きな振動が存在する車載コンピュータ制御システムや産業環境などで広く使用されています。

CAN の 2 つの ISO 国際標準:

1) ISO11898  :通信速度 125 kbps ~ 1 Mbps の高速 CAN 通信規格を定義し、最大 1 Mbps の伝送速度と 40 メートル以下のバス長の閉ループ バスに属します。

2) ISO11519 :通信速度 10 ~ 125 kbps の低速 CAN 通信規格を定義しており、オープン ループ バスに属し、伝送速度 40 kbps の場合、バス長は 1000 メートルに達することがあります。

CANタイプ

1) 高速 CAN:

a. ケーブルの長さに応じて、5Kbit/s ~ 1Mbit/s のボーレートを提供します。

b. 高速 CAN ネットワークは、各ネットワーク エンドポイントで 120 オームの抵抗器で終端されます。

c. 無音レベルは 2.5V、上限値と下限値は 3.5V と 1.5V です。

2) フォールトトレラント CAN:

a. 5Kbit/s ~ 125Kbit/s のボーレートを提供します。

b. ドミナントの場合は 1V と 4V です。

3) 単線 CAN:

a. 5Kbit/s ~ 125Kbit/s のボーレートを提供します。

b. 単線 CAN のボーレートは通常 33.3KHz です。

車載用CANネットワーク

 

車載用CANネットワーク

車載用CANバス

 

CANの構成

CAN バスのフレームは主にフレーム情報フレーム IDフレーム データで構成されます

1) フレーム情報: 標準データフレーム(ガソリン車、モーター)、標準リモートフレーム(稀)、拡張データフレーム(ほとんどのディーゼル車、一部のガソリン車)、拡張リモートフレーム(稀)の4つに分類されます。

2) フレーム ID: CAN の「アドレス」の一種です。CAN の機能には競合メカニズムがあり、フレーム ID が小さいほどバス リソースを占有する権利が増し、優先的に送信されます。

        


CAN ID

DBC ファイル:自動車業界では、車両 CAN バス上の各フレーム ID と各フレーム データに対して標準的な解釈が行われる場合、形成されるファイルは DBC ファイルです。

3) フレームデータ:シリアルポートと比較すると、CAN のフレームデータは 8 バイト、つまり 64 ビットしかなく、それ以上はありません。しかし、CAN FDは新しいバスとしてわずか8バイトの問題を解決します。

4) 終端抵抗: CAN は RS485 と同じで、終端での差動信号の反射を減らす必要があり、2 つの端子に抵抗を付加しないと信号が跳ね返って通信に影響を与えます。CAN バスには、抵抗値が 120 オームの 2 つの終端抵抗が並列接続されており、1 つは最も遠い終端側にある必要があります。複数のノードがある場合は、終端抵抗を適切に大きくする必要があります。

5) ボーレート: 一般的な車両のボーレートは 500K、250K、125K、100K です。

CANバス規格

ISO規格

 

CAN 規格は、下位層の規格(物理層およびデータリンク層) と上位層の規格(アプリケーション層) の 2 つのカテゴリに分類されます。

  • ISO 11898-1 – CANプロトコル
  • ISO 11898-2 – CAN高速物理層
  • ISO 11898-3 – CAN 低速フォールトトレラント物理層
  • ISO 11898-4 – タイムトリガーCAN
  • ISO 11898-5 – 「低電力モードの高速メディア アクセス ユニット」 – 現在草案中
  • ISO 11519-2 - 廃止され、11898-3 に置き換えられます。
  • ISO 14230 - 「キーワード プロトコル 2000」 - 非 CAN シリアル ライン診断の一部を定義します。
  • ISO 15765 (CAN バスの診断を定義する標準) は、本質的には CAN バスのキーワード プロトコル 2000 です。
  • J1939 – SAE によって定義された、トラックおよびバス向けに最も広く使用されている CAN ベースの高レベル プロトコル。J1939 はいくつかの部分に分かれており、物理層、データリンク層、ネットワーク管理、および多数の事前定義メッセージについて説明します。
  • ISO 11783 – J1939 に似ていますが、農業分野 (トラクターなど) を対象としています。
  • ISO 11992 – トラックとトレーラーの間のインターフェースを定義します
  • NMEA 2000 – 海事分野で使用される J1939 ベースのプロトコル。NMEA 委員会によって定義されます。

どの標準について話しているのかを指定しない場合、通常はISO 11898-1 で定義されたデータリンク層プロトコルと ISO 11898-2 で定義された物理層がデフォルトになります。

基礎となる標準:

CAN の基礎となる規格は基本的に同じで、OSI モデルの物理層とデータリンク層をカバーしており、ISO/OSI モデルとの対応関係を次の図に示します。

対応

 

  • ISO 11898-1: データリンク層プロトコル。CAN バスの基本アーキテクチャを記述し、データリンク層でのさまざまな CAN バスデバイスの通信方法を定義します。
  • ISO 11898-2: 高速 CAN バス物理層プロトコル、最大データ伝送速度は 1Mbps、アプリケーションは 2 線式バランス信号 (CAN_H、CAN_L)
  • ISO 11898-3: データ伝送速度が 5Kbps ~ 125Kbps の低速 CAN バス (LS-CAN、フォールトトレラント CAN) 物理層標準を定義します。フォールトトレラントとは、バス上の送信信号に障害が発生した場合でも、別の単一信号に依存して通信できることを意味します。
  • ISO 11898-4: CAN バスにおけるタイムトリガー機構 (Time-Triggered CAN、TTCAN) を定義し、ISO 11898-1 と連携するフレーム同期エンティティを定義し、自動車 ECU 間のタイムトリガー通信方式を実現します。

上限基準:

アプリケーション分野やメーカーが異なれば慣行も異なり、統一された国際規格はありません。

上位層プロトコルの比較

 

CANフレームタイプ(4つのフレームタイプ)

1) データフレーム

送信ユニットが受信ユニットにデータを送信するために使用するフレーム。

データフレームのフレーム構造図:

データフレーム

 

SOF: データ フレームの開始を示します。(1 ビット)、ドミナント ビット エッジが送信され、ネットワーク ノードが同期を開始します。

ID: 標準形式では 11 ビット、Base ID (11 ビット) と拡張 IDr (18 ビット) を含む拡張形式では 29 ビット。このセクションはデータ フレームの優先順位を識別します。値が小さいほど優先順位が高くなります。

RTR: リモート送信要求ビット、0 はデータ フレームを意味し、1 はリモート フレームを意味します、つまり、RTR=1 の場合、メッセージ フレームのデータ フィールドは空です (1 ビット)

IDE: (1 ビット) 識別子拡張ビット、0 は標準フォーマットを示し、1 は拡張フォーマットを示します。拡張フレームと標準フレーム フォーマットは異なるため、同じネットワーク内に存在することはできません。

DLC: データ長コード、0 ~ 8 はデータ長が 0 ~ 8 バイトであることを意味します; (4 ビット)

データフィールド: データフィールド; (0~8 バイト)

CRC(15ビット):

  • フィールドをチェックし、すべてのデータをソフトからデータフィールドにエンコードします
  • 送信者によって入力されます
  • チェックアルゴリズム G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1; (15 ビット)

DEL: チェックフィールドと応答フィールドの暗黙的な区切り文字 (1 ビット)

ACK:(1ビット)

  • レスポンスフィールドは、データが正常に受信できたかどうかを確認するフィールドで、いわゆる正常受信とは、フィリングエラー、フォーマットエラー、CRCエラーが含まれていないことを意味します。
  • 送信ノードはこのビットを 1 に設定し、受信側はそれを確認して、メッセージの受信時にドミナント ビット 0 を与えます。
  • ノードがメッセージの受信を確認しない場合、送信者はこのビットを不可視ビットとして監視するとエラーを報告します。

SRR: 拡張フォーマットで使用される代替リモート要求ビットは 1 でなければなりません (1 ビット)

EOF: 7 つの連続したリセッシブ ビット (1) はフレームの終わりを示します (7 ビット)

ITM(3ビット):

  • フレーム間スペース、インターミッション (ITM) はフレーム間スペース (IFS) とも呼ばれ、3 つの連続したリセッシブ ビットを持ちますが、データ フレームには属しません。
  • フレーム間スペースは、データ フレームとリモート フレームを先行フレームから分離するために使用されるフレームです。データ フレームとリモート フレームは、フレーム間スペースを挿入することで、このフレームを先行するフレーム (データ フレーム、リモート フレーム、エラー フレーム、オーバーロード フレーム) から分離できます。オーバーロード フレームおよびエラー フレームの前にフレーム間スペースを挿入することはできません。

2) リモートフレーム

受信ユニットが同じ識別子を持つ送信ユニットにデータを要求するために使用するフレーム。

リモート フレームのフレーム構造はデータ フレームのフレーム構造と似ていますが、相違点は次のとおりです。

  • 1. データフレームのRTR値は「0」、リモートフレームのRTR値は「1」です。
  • 2. リモートフレームにはデータブロックがありません。
  • 3. リモートフレームの DLC ブロックは、リクエスト送信部が送信するデータの長さを示します。

フォーマット図

リモートフレーム

 

バス上に同じ識別子のデータフレームとリモートフレームが同時に送信された場合、データフレームのRTRビットがドミナントであるため、アービトレーションではデータフレームがバスの制御権を獲得します。

3) エラーフレーム

エラーを検出した場合に、他のユニットにエラーを通知するためのフレームです。

エラーフレームのフレーム構造は、エラーフラグとエラーデリミタで構成されます。

エラーフラグ:6bit、

エラーフラグ

 

エラーデリミタ: 8 ビットのリセッシブビットで構成されます。

4) オーバーロードフレーム

受信装置は、受信準備が完了していないことを送信装置に通知する。

オーバーロード フレームを送信する 2 つのケース:

1. 受信ユニットの状態により、送信ノードは次のデータ フレームまたはリモート フレームの送信を遅延する必要があります。

2. Intermission の 3 ビットでドミナント ビットが検出されます。

各ノードは最大 2 つのオーバーロード フレームを連続して送信でき、オーバーロード フレームはオーバーロード フラグとオーバーロード デリミタ (8 リセッシブ ビット) で構成されます。

オーバーロードフレーム

 

データフレームとリモートフレームの比較:

比較

 

CANバス調停

アービトレーション優先度:識別子の値が小さいほど、メッセージの優先度が高くなります。

ラインとロジック: 送信するノードがすべてリセッシブの場合のみ、バス レベルはリセッシブになります。

データ送信中、すべての送信ノードはバス上のレベル状態を検出し、バス上のレベルと自身が送信したレベルをビットごとに比較します。

  • 1) 0 を送信すると 1 が表示され、エラーが報告されます。
  • 2) 0 を送信して 0 を表示: 続行します。
  • 3) 1 を送信すると 1 が表示されます: 続行します。
  • 4) 1 を送信して 0 が表示される場合: 競争は失敗し、受信側になります。

セルフテストを送信する

 

以下の図に示すように、競合に失敗した C ノードは、バスがアイドル状態であることを初めて検出すると、自動的に再送信を試みます。

CAN ノード A と C が同時にデータ フレームを送信すると、CAN バスは優先順位に従って調停され、C の電源が失われます。

 

CAN条件付きアクセス

CAN バス上のメッセージはブロードキャストされており、ノードはコントローラーにフィルターコード (Filter Code) とマスク (Mask Code) を設定し、バス上のメッセージの識別子を確認することで、メッセージを受信するかどうかを判断できます。 , 「1」はこのビットがこのノードに関連していることを示し、「0」はこのビットがこのノードに関連していないことを示します。

CAN-BUSデータフロー

 

STM32 はコードをフィルタリングできます

 

ビット詰め

CAN バスは NRZ エンコーディングを採用しており、別個のクロック ラインを必要としないため、効率が高いという利点がありますが、ビットがどこで始まり、どこで終わるかを区別するのは簡単ではありません。したがって、同期通信中に十分なレベルジャンプを確保するために、仕様ではビットつまり、連続する 5 つの同一レベルごとに反転レベルが挿入され、受信ノードはメッセージを受信した後に自動的にメッセージを受信します。 . パディングを削除します。

DataFrame ビット スタッフィングの比較表

 

フレーム内の CRC デリミタ、ACK フィールド、および EOF を除くフレームの残りの部分にはビット スタッフィングが適用され、ビット スタッフィングが適用されるフィールドでは、6 つの連続するドミナント ビットまたはリセッシブ ビットの検出が検出されたとみなされます。エラーレポート。

CANエラーチェック

CRCエラー

1) メッセージを送信するとき、送信ノードは特定の多項式に従ってデータ フレームの SOF ビットからデータ フィールドの最後のビットまでのチェックサム値を計算し、その値をデータ フレームの CRC フィールドに入れます。そしてデータフレームをバススーペリアにブロードキャストします。

2) データを受信した後、受信ノードは同じ多項式を適用してチェックサム値を計算し、受信したチェックサム値と比較します。両者が一致していれば正常に受信されますが、一致していなければメッセージは破棄され、送信ノードにメッセージの再送を要求するエラーフレームが送信されます。

レスポンスエラー(ACKエラー)

受信者はメッセージを受信した後、ack 応答ビットにドミ​​ナント レベルを与え、送信者がビットがリセッシブであることを検出すると、エラーを報告します。

フォーマットエラー(フォームエラー)

CRCデリミタ、ackデリミタ、eof領域にドミナントビットが出現するかどうかの検出など、固定フォーマットのビットフィールドとは逆のフォーマットを検出した場合に検出されるエラー。

ビットエラー

出力レベルとバスレベル(スタッフィングビットを除く)を比較し、両者のレベルが異なる場合にエラーを検出します。ドミナント ビットが送信されたが、バスがリセッシブ ビットである場合、エラーが報告されます。

スタッフエラー

ビットスタッフィングが必要なセグメント内に同じレベルのビットが6ビット連続して検出された場合に検出されるエラーです。

CANバスエラー検出機構

CAN バス上の各ノード コントローラーは、メッセージが間違っているかどうかを検出します。メッセージが間違っているとノードが検出すると、エラー フラグが送信され、バス上の通常のデータ送信が中断されます。元のメッセージでエラーを見つけなかったバス上の他のノードは、エラー フラグを受信した後、バス上の現在のメッセージを破棄するなど、必要な措置を講じます。

CAN ノード内には 2 つのエラー ステータス カウンタがあります。

  • 1) TEC /送信エラーカウンター、送信エラーステータスカウンター、エラーが発生するとカウンター値+8
  • 2) REC /受信エラーカウンター、受信エラーステータスカウンター、エラーが発生するとカウンター値+1
  • 3) メッセージの送信または受信が 1 回成功すると、対応する TEC または REC の値は -1 になります。

                                                        エラー数

CAN 仕様では、ノードの 3 つのエラー状態が定義されています。

  • 1) アクティブ エラー: 通常の状態。この状態では、ノードはエラー フレームを含むすべてのタイプのフレームを送信でき、エラーを検出した後、エラーをアクティブに報告します。
  • 2) パッシブ エラー: ノードはエラー フレームを除くすべてのフレームを送信できます。TEC または REC カウントが 127 を超えるとこの状態に入ります。このとき、ノードはエラーを見つけた後に 6 リセッシブ ビットのみを送信し、送信しません。エラーをブロードキャストします。また、連続フレームを送信する場合は、フレーム間に 8 ビットの遅延時間が必要です。
  • 3) バスがオフです: ノードがコントローラーによってバスから分離されています。または TEC が 255 を超えている場合、この状態になり再起動するか、128 の 11 ビット リセシブ ビット レベルを待つ必要があります。

CANバスエラー検出機構

 

CAN バス プロトコルの概要.pdf

CAN バス C ソース コードと data.rar

CANバスCソースコードとデータ、CANアナライザバスモーター同期起動ソースプログラム

CANバスプロトコルアプリケーションマニュアル.pdf

CANバスプロトコル応用マニュアル

can-utils.zip

CAN ツール(CAN トラフィックの表示、記録、生成、再生のための基本ツールを含む)、CAN コア ゲートウェイ構成、CAN バスの測定とテスト、ISO-TP ツール、ログ ファイル コンバーター、シリアル ライン仕様構成、CMake プロジェクト ジェネレーターなどのソース コード

CAN バス シールド - MCP2515&MCP2551.zip

Arduinoに基づいてプロトコルソースコードとアプリケーションケースコードをバス化できます 

おすすめ

転載: blog.csdn.net/xipengbozai/article/details/131352010