2つのノードIDセグメントが同じ場合はどうなりますか?
CANバスネットワークでは、2つのノードが原則的に同じIDセグメントを持つことはできませんが、2つのノードIDセグメントが同じ場合はどうなりますか?
実験の前に、CANメッセージの構造と仲裁の原則を明確に理解しておく必要があります。
第1に、CANメッセージ構造
最も広く使用されているCANバスネットワーク規格はV2.0です。 この規格は、さらにAとBの部分に分かれています。 彼らの主な違いは、アービトレーションエリア内のIDコードの長さです。 CAN2.0A(標準フレーム)は11ビットID、CAN2.0B(拡張フレーム)は29ビットIDです。 以下の表1は、CANメッセージの構造を示す。
表1 CANメッセージ構造
| フェーズ名 | 位相長/ビット | 説明 | |
| SOF | 1 | データ・フェーズ・スタートを意味し、単一ドミナント・ビットによるメイクアップ | |
| 衰退期 | 標準フレーム | 12 | フレームの優先度を示し、11のIDアドレスと1つのRTRで構成されます。 |
| 拡張フレーム | 32 | フレームの優先順位を示し、29のIDアドレス、1ビットSRR、IDE拡張およびRTRで構成されます。 | |
| コントロールフェーズ | 6 | データセグメントのデータ長のグループコードと予約ビット | |
| データフェーズ | 0〜8 | データ内容、制御段階はデータ長を制御する | |
| CRC | 16 | チェックフレームtransimission erro、SOFからデータフェーズまで、充填ビットを除くすべての内容 | |
| ACK | 2 | 他のノードがこのフレームを正しく受信することを確認する | |
| フレームエンド | 7 | フレームエンドを意味する | |
第二に、仲裁の原則
CANバスアービトレーションは、図1に示すように、「ラインと原理」に基づいています。トランシーバが異なるレベルの信号を同時に発信する場合、劣性レベルは常に優勢レベルでカバーされます。 メッセージを送信する間、CANコントローラは、バスステータスがそれ自身で送信されたステータスと同じかどうかを監視します。 IDセグメントに矛盾が生じた場合、調停が行われます。 それが他の領域で発生すると、対応するエラーが発生します。
以下は重要なポイントです。 2つのノードIDセグメントが同じ場合はどうなりますか? 2つのCANカードと1つのCANScopeで実験を開始しました。 CANカードは、CAN標準ノードをシミュレートしてメッセージを送受信し、CANScopeは通信監視を行います(図2参照)。
図2実験プラットフォーム構築
第3に、「IDセグメントは同じですがデータは異なります」という実験1
CANカードを使用してID 000HデータのCANフレームを01020304050607Hに送信し、別のCANカードを000HデータのCANフレームを02020304050607Hに送信します。 CANScopeがリッスンするデータは図3に示されています。多数のデータフィールドの充填エラーがあることがわかります。

図3データフィールドの充填エラー
なぜこれはそうですか? 最初に、図4に示すように、2つのCANカード送信メッセージに対応する波形を取得します.2ピンメッセージは標準データフレームであり、各フレームには8バイトのデータが含まれているため、2フレームのパケットに対応する波形はIDセグメント、RTR、IDE、R0、およびDLCセグメントでまったく同じです。 したがって、調停の役割は効果がなく、両方のノードが優先順位を持っているとみなし、データを送信し続けます。
今我々は、データセグメントに焦点を当て、最初のバイトデータは、同じです00Hです; 第2のバイトデータはそれぞれ01H、02Hである。 図5の矢印は、対応するビットの論理がそれぞれ0および1であることを示している。 先に、CANノードは、バスレベルがメッセージを送信するときに送信したレベルと同じであるかどうかを検出すると述べました。 非アービトレーション領域で不一致が発生すると、対応するエラーがトリガされるため、2つのフレームがバスに同時に送信されると、ビットエラーが発生する必要があります。 ビット送信エラーにより、ノードはフィル規則に違反する6個のドミナントビットを送信する(アクティブエラーはフレームデータを破棄する)ため、図8に示すように、データフィールド充填エラーが発生する。 3。

図5データフィールドの競合
第4に、2つの "同じIDを持つ同じデータ"
同時に、2つのCANカードを使用してIDが000HのCANフレームを01020304050607Hに送信し、CANScopeは通信監視を行います。 まず、「バス応答」オプションをチェックせずに、CANScopeをリスンオンリーモードで動作させます。 実験結果を図6に示し、応答デリミタの形式が間違っています。
図6レスポンスデリミタフォーマットエラー
なぜこれが起こるのですか? メッセージを送信しているノードは、ACKセグメントに2つの劣性ビットを送信します。 最初のビットの間に支配的なレベルが受信された場合、フレームは正しく受信されたとみなされます。 2つの仲裁人は、仲裁セグメントが同じ場合に仲裁権を取得したと考えているため、ACKセグメントの応答を待つが、ネットワークには2つのノードしか存在しない。 したがって、ACKセグメントで応答を受信できず、応答デリミタエラーが発生します。 簡単に言えば、この状況は、バスの1つのノードだけがデータを送信できないという事実に似ています。 図7は、ACKセグメントに応答がない場合の波形比較を示しています。
図7 ACK返信
私たちはバスの応答を確認し、再び実験を開始します(この時点ではバスに3つのノードがあります)。 このとき、 図8に示すように、バスデータは正常に送受信される。
図8スタートBUS返信
要約:2つのノードが同じIDとデータを同時に送信すると、データフィールドのパディングエラーが発生します。 2つのノードが同じIDと同じデータを持つパケットを送信すると、他のノードが応答するとエラーは発生しません。 他のノードが応答エラーで応答しました。 したがって、CANバスを設計する際にIDセグメントで同じ状況を避ける必要があります。





