私は**NXP S32K144**をベースにした電気/自動運転車のVCUで断続的なCAN通信の問題をトラブルシューティングしています。
影響を受けるネットワークはCAN3であり、以下の要素で構成されています。
- S32K144ベースのVCU
- 自動運転用PC
- インストルメントクラスター
- MDPS
終端構成は次のとおりです。
- 自動運転用PC:120オーム
- インストルメントクラスター:120オーム
- VCU CAN3: **終端抵抗なし**
- MDPS: 終端抵抗なし
したがって、CAN3ネットワーク全体におけるCANHとCANL間の抵抗値は通常約60オームです。
### 長期にわたる断続的な症状
車両は通常約2〜3時間運転可能ですが、時折CAN3通信が不安定になることがあります。
典型的な症状は以下のとおりです。
- 一部のCAN3メッセージが受信されなくなりました
- ギアコマンドが動作しなくなる可能性があります
CANalyzerで、Stuff Error、Bit Error、Overload Errorが表示されました。
VCUの電源を入れ直すと、多くの場合、正常な動作に戻ります。
VCUは以前、別の問題で交換されたが、CAN3通信の問題はVCU交換前と交換後の両方で発生した。
そのため、この問題は単に特定のVCUの故障ではないと考えています。
### 最近の深刻な故障
最近、車両は一晩中イグニッションと電源がオンのまま放置されたようです。
自律PCは車両/VCUの電源がオンでなければ動作できないため、**VCUも自律PCも長時間電源供給されていた可能性が高く、CAN3ネットワークは夜間に稼働していました。
翌朝:
1. 当初はCAN3通信が可能でした。
2. しかし、スタッフエラーも確認されました。
3. その後、自律型PCの電源を一度切ってから再度入れた。
4.その後、CAN3通信は完全に停止した。
車両の電源を切った後、車両全体のネットワーク上でCANHとCANLの抵抗を測定しました。
測定された抵抗値はおよそ次のとおりです。
**6オーム**
その後、完全に切断して車両からVCUを取り外しました。
電源が供給されていない独立したVCUにおいて、CAN3 CANH-CANL間の抵抗値はおよそ以下の通りであった。
**7オーム**
繰り返しますが、VCU CAN3チャネルには終端抵抗が搭載されていないため、この低抵抗は終端だけでは説明できません。
### VCUの電源が切れている間に抵抗値が変化しました
VCUは完全に接続が切断され、電源も供給されていなかった。
数時間かけて、CANH-CANLの抵抗値は徐々に上昇した。
**約7オーム → 約33オーム → 約60~75オーム**
抵抗値はしばらくの間、74~75オーム前後で推移した。
その後、VCUをオフィスに持ち込み、デジタルマルチメーターを使ってCAN3物理層回路周辺のいくつかの部品を測定しました。
回路には以下が含まれる。
- CANトランシーバ
- CAN保護/TVSデバイス
- コモンモードチョーク
- CANH/CANLにコネクテッドされた小型コンデンサ
- 非充填スプリット終端抵抗
CAN保護装置と近隣のCANノードのピンを測定した際、CANHとCANLに接続されたノード間の約53 koΩを測定しました。
その後、VCUコネクタでCANH-CANLを直ちに再測定しました。
抵抗値は突然、約**74オームから約53キロオーム**に変化した。
部品の交換やはんだ付けの取り外しは一切行っていません。
### 現在の状況
同じVCUは車両に再設置されました。
CAN3通信は現在、完全に正常です。
- CAN3は自律型PCオフで安定しています
- CAN3は自律型PCがONの状態でも安定しています
- 自律型PCから送信されたメッセージは正常に受信される
- 現在、自律型PCの電源を入れ直しても、この不具合は再現しない。
- 現在、No Stuff Error が検出されています
### S32K144 / FlexCANに関する質問
以下の点についてアドバイスをいただければ幸いです。
1. FlexCAN S32K144 Error Passive、Bus-Off、またはその他の異常状態に入り、VCUが完全に電源サイクルされるまで持続することがありますか?
2. コントローラがエラーパッシブに入っているかバスオフに入っているかを判断するために、どのFlexCANレジスタとエラーカウンターを監視すべきか?
3. 自動バスオフ回復を無効化または影響を与えるFlexCAN設定はありますか?
4. S32K144上で信頼性の高いバスオフ検出および復旧を実現する推奨方法は何ですか?
5. 異常なFlexCAN状態が外部CANトランシーバーを異常な動作状態に保つ原因となる可能性はありますか?
**バスオフだけでは、完全に絶縁され電源が供給されていないVCUのCANHとCANL間の約7オームを説明できないことは理解しています。**
したがって、両方の可能性が考えられる。
- CANコントローラ/エラー回復の問題、または
- CANの物理層/トランシーバー/保護回路の問題
さらに、もう一つ関連する観察事項があるかもしれません。
以前のオシロスコープ測定では、自律型PCが動作しているときにCANH-接地間およびCANL-接地間の波形が著しくノイズが多くなった一方、CANH-CANL間の差動波形は比較的クリーンなままであった。
自律型PCはCANHとCANLのみで車両CANネットワークに接続されています。別のCANアース線は接続されていません。
同様の不具合が再発した場合に、どのFlexCANレジスタ、エラーフラグ、または診断信号を監視すべきかについて、何かご提案があれば幸いです。
よろしくお願いします。
こんにちは、ジュリアンさん。
詳しい説明をありがとうございました。
ご質問についてですが、長期間の断続的なCAN故障が発生した場合に、FlexCANモジュールだけを再初期化することはまだ試みていません。
これまでCAN通信が停止した時点で、VCU全体の電源を再開してシステムを復旧しました。したがって、次回同様の事態が発生した場合は、VCUをリセットする前にまずFlexCANの状態を確認します。
私たちは以下の点を監視する予定です。
- ESR1.FLTCONF
- ESR1.BOFFINT
- ECR.TXERRCNT
- ECR.RXERRCNT
- CTRL1.BOFFREC
次に、モジュールがバスオフ状態の場合、FlexCANペリフェラルのみを再初期化しても通信が回復するかどうかをテストしたいと思います。
私たちのVCUで使われているCANトランシーバは**Texas Instruments SN65HVDA540-Q1**で、サードパーティ製のトランシーバです。
また、異常な物理層の挙動についてTIにも連絡しました。TIは、絶縁かつ電源のないVCUのCANHとCANLの間に約7オームの差がSN65HVDA540-Q1の通常の状態ではないことを確認しました。
彼らは、保護/TVSデバイス、CANラインコンデンサ、PCB漏れや汚染、コモンモードチョーク、グラウンド/コモンモード状態、トランシーバを含む外部CAN物理層の調査を推奨しました。
これは、FlexCANのソフトウェア状態だけではCANH-CANLの抵抗変化を説明できないというあなたのコメントと一致しています。
関連するCANインターフェース回路図を添付しました。
なお、回路図に示されている**R14およびR15はこのCANチャンネル**には掲載されていません。実際の2つの120オーム終端抵抗は、自動運転用PCとインストルメントクラスターに配置されています。
ご指摘いただいたとおり、VCUと自動運転PC間の接地/コモンモード状態についても調査いたします。現在、PCはCANネットワークに接続されており、CANHとCANLのみで接続されており、別のCANグラウンド線はありません。
もう一つ質問があります。
バスオフ条件の後にFlexCAN周辺機器だけをS32K144オンに再初期化し、MCU全体をリセットせずに済む適切な手順やSDKやAPIシーケンスを教えていただけますか?
このテストを診断テストとして実装し、次の失敗時にFlexCANの再初期化だけで通信が回復するかどうかを判断したいと考えています。
改めてサポートありがとうございます。
よろしくお願いします、
ハン
こんにちは、 @zeinmotors さん、
Q1。S32K1デバイスはデフォルトでCTRL1[BOFFREC]で「バスオフ回復」が有効化されています:
Julin_AragnM_0-1787163619190.pngJulin_AragnM_0-1787163619190.pngJulin_AragnM_0-1787163619190.png
バスオフ状態に入ると、自動的に正常状態への回復を試みます。「エラーアクティブ-> エラーパッシブ-> バスオフ-> エラーアクティブ.....」。無効にした場合、CANモジュールを再初期化してバスオフをクリアできます。これもVCUの電源を入れ直すことで可能です。
VCUの電源を入れ直す代わりにCANモジュールを再初期化して、元の長期的な断続的な症状が解決するか試しましたか?
Q2.ESR1とECRレジスタを監視できます。特にFLTCONFはエラーのアクティブ、パッシブ、バスオフを示し、BOFFINTはFlexCANがバスオフに入るときに設定され、最後にTXERRCNTとRXERRCNTはそれぞれTxとRxエラーのカウントを蓄積するエラーカウンターです。
Q3。Q1を参照してください。
Q4。バスオフ検出はCTRL1[ERRMSK]とCTRL1[BOFFMSK]を設定することで有効になります。エラーコールバック/ハンドラー内で、ESR1を読み込み、BOFFINTをチェックします。
FlexCANがバスオフ状態で、バスオフリカバリが手動(CTRL1[BOFFREC] = 1)に設定されている場合、以下の操作を行う必要があります。
あるいは、CANモジュールを再初期化することもできます。
自動復旧が有効になっている場合(CTRL1[BOFFREC] = 0)、バスオフの条件が解除されれば、バスオフからの復旧は自動的に行われます。
S32K144 FlexCAN エラー ISR の簡単な例があります:例 S32K144 FlexCAN TX/RX/エラー ISR テスト S32DS2.2 。
Q5.FlexCANバスオフでトランシーバーが異常状態に強制される状況は私の知る限り ありません。どのトランシーバーを使っているかも教えてもらえますか?NXPのデバイスですか、それともサードパーティ製ですか?
あなたの意見に同意します。これはソフトウェア状態ではCANHからCANLの抵抗変化を説明できない物理層の問題と物理層の問題の両方を示していると。
可能であれば、CANインターフェースの回路図を共有してください(公開コミュニティへの共有を避けたい場合はサポートケースにエントリーできます:NXPサポート)。また、S32K1のハードウェア設計ガイドラインのドキュメントやCANセクションを参照して参考になることをお勧めします。
最後に、以下の推奨事項も実施できます:
よろしくお願いします、
ジュリアン
こんにちは、 @zeinmotors さん、
SCEHMATICSはCANインターフェースに問題なさそうです。VCUが中間ノードである限り、R14とR15は必要ありません。
バスオフ条件の後にFlexCAN周辺機器だけをS32K144オンに再初期化し、MCU全体をリセットせずに済む適切な手順やSDKやAPIシーケンスを教えていただけますか?
これは、使用しているソフトウェアによって異なります。SDKを使うならCAN_Deinit() APIを使い、RTD MCALを使うならCan_43_FLEXCAN_DeInit()。
その後、通常の初期化を行い、バッファの再設定、CANコントローラーモードの設定、マスクの設定(例:Can_43_FLEXCAN_Init() -> Can_43_FLEXCAN_SetControllerMode() -> など)
CAN0->ESR1も確認して、復旧が成功したかどうかを確認してください。
または、ベアメタルを使っている場合は、AN5413: S32K1xxシリーズのCookbook – アプリケーションノートを参照することもできます。これは、FlexCANをレジスタレベルで設定する方法を示しています。
よろしくお願いします、
ジュリアン