NXPコミュニティの皆様、こんにちは。
私は S32K344 を使用したプロジェクトに取り組んでおり、S32K3 RTD を使用して CAN 通信を実装しようとしています。
ループバックの例から始めました。現在、外部の CAN アナライザー (CANKing) と通信しようとしていますが、CAN バス上でまったくアクティビティがない (データ フレームがない、さらに重要なことに、エラー フレームがない) という奇妙な問題が発生しています。
ハードウェアおよびソフトウェア環境:
ボード: S32K3X4EVB-T172 (S32K344 MCU搭載)
IDE: S32 Design Studio v3.5.0
SDK: SW32K3_RTD_4.4_R21-11_3.0.0
外部ツール: CANKing CAN アナライザー
物理バス: 接続 (CAN_H、CAN_L、GND)
症状:
オシロスコープまたは CAN アナライザで CAN フレーム (データまたはエラー) が観察されません。物理バス ラインは一定の劣勢状態 (約 2.5 V) のままになります。
FlexCAN_Callback 関数の TX_COMPLETE イベント情報がトリガーされません。
すでに実行されたデバッグ手順: 徹底的なデバッグを実施した結果、以下の点が確認されましたが、状況は非常に混乱しています。
ファームウェアの実行: アプリケーション ファームウェアは正常に実行されています。メインのwhile(1)ループがアクティブで、FlexCAN_Ip_Send()関数が意図したとおりに定期的に呼び出されています。HardFaults は発生していません。
トランシーバの有効化: トランシーバの EN ピンを物理的に測定し、HIGH (約 4.9 V) であることを確認しました。
クロックがアクティブです (MCR レジスタ): デバッガーのペリフェラルビューを使用して、初期化後の FlexCAN MCR レジスタの状態が正しいことを確認しました: MDIS = 0 および FRZ = 0。これは、モジュールが有効になっており、フリーズ モードを正常に終了したことを示しており、正しくクロックされていることを意味します。
バスオフ状態ではありません (ESR1 レジスタ): ESR1 レジスタを確認したところ、BOFFINT フラグは 0 です。ノードはバスオフ状態ではありません。
私の根本的な問題: これらの調査結果を考慮すると、私は行き詰まっています。FlexCAN ペリフェラルは完全に正常でアクティブな状態 (FRZ=0、BOFFINT=0、割り込みがマスクされていない) にあるように見えますが、送信コマンドは実行されません。バス上で信号を生成せず、エラーや完了も報告しません。
私が見逃している、より深刻な構成上の問題があるのでしょうか。おそらく、高レベルでは目に見えない SIUL2 ピン多重化、またはメッセージ バッファー制御ロジックの問題でしょうか。
ご検討のために S32DS プロジェクトを添付しました。main.cが含まれていますそして.mex設定ファイル。
次に何をチェックすればよいかについてのアドバイスや提案があれば、ぜひお願いします。
最後の質問ですが、CAN0 トランシーバを有効にするために、S32K3X4EVB-T172 ボード自体にジャンパーのはんだ付けや抵抗器の取り付けなどの特定のハードウェア変更は必要ですか?ユーザーマニュアルを確認しましたが、何か見落としがないか確認したいです。
よろしくお願いします。
こんにちは@joonhoflow
レガシー FIFO を有効にしたSO、送信 API または受信 API を呼び出すときに、FIFO エンジンによって占有されている MB を使用できなくなりました。
1.最も簡単な方法は、「レガシーRxFiFoを有効にする」のチェックを外すことです。
Senlent_0-1756792923528.png
Senlent_2-1756793499533.png
または、レガシーRxFiFoを使用する場合は、これらのAPIを参照してください。
FlexCAN_Ip_ConfigRxFifo()、
FlexCAN_Ip_RxFifo(),
また、送信に使用される MB は MB0 ~ MB5 にすることはできません。これは FIFO エンジンに使用されます。
Senlent_1-1756793442890.png