私はこのプログラムをS32DSで開発しました。CANフレームを送信しようとする際、TXピンには短い低レベルパルスのみが出力され、その後のIDやデータビットが切り詰められるため、完全なフレームを送信できません。USB-CANアナライザーにはデータが受信されず、FlexCANコントローラは直接バスオフ状態に入ります。
クロック設定やレジスタ値を確認し、さまざまなCANチャネルも試しましたが、問題は解決していません。どの設定パラメータが誤って設定されているのかを突き止めたい。ご協力いただきありがとうございます。
こんにちは、ジュリアンさん。
お返事ありがとうございます。先ほどのメッセージは急いで書いたため、いくつか重要な点を訂正し、追加したいと思います。
取締役会: これはサードパーティ製のボード(NXP EVBではありません)、モデルS32K148_REV2_Q144です。注意点として、販売者の回路図に誤り(ラベル付けされたトランシーバ位置が実際のPCBシルクスクリーンと一致しない)を見つけたため、この基板の**リファレンス・デザイン** **ドキュメント**は完全に信頼できるとは限りません。
公式CANの例: ビルドCan_example_S32K148試みましたが、CAN自体とは無関係な環境問題(ツールチェーンやインクルーパスの欠如、Port_Ci_Port_Ip.hとPort_Ci_Port_Ip_Cfg.hのバージョンミスマッチ—「異なるベンダーID」や「AutoSarバージョン番号が異なる」など)に遭遇しました。これは自分のプロジェクトとRTDパッケージのバージョンが不一致しているのであって、IDEの問題ではありません。解決しようと思いますが、ハードウェアの問題の中心ではないと思います。
新たな証拠(既にレビューいただいた私のプロジェクトから):前回のメッセージ以降、ロジックアナライザを使ってより詳細な検証を行いました。
MB8 の内容は 100% 正しいです。CDD_CanTransmit() の直後にレジスタから直接読み取った結果は次のとおりです。CS=0x0C080000 (CODE=0xC 保留中、DLC=8)、ID=0x00400304 (>>18 = 0x10、設定と一致)、DATA=0x01020304/0x05060708 (私の 8 バイトのペイロードと完全に一致)。
ピンのTX信号も正確で 、PTE5とトランシーバのTXD入力を同時に探査(200MHzロジックアナライザ)すると、2つの波形は同一であり、PCBトレースは問題ないことが確認できます。
しかし、送信はわずか8〜9ビットの遷移( おおよそSOF + 数ビットの仲裁ビット)で中止され、コントローラーは間もなくバスオフに入ります(ESR1がFLTCONF=11を確認し、TXERRCNTは各試みごとに増分します)。
CANH/CANLは、USB-CANアナライザーを正しく接続し、120Ω終端を有効にしていても(バスがフローティングしていない状態)でも、活動はゼロです。対照実験として、同じ設定(フローティング状態と終端状態)を別の正常に動作することが確認されているSTM32ボードで実行したところ、終端状態になるとCANHは適切な遷移を示しました。私のS32K148ボードでは、同一の終端条件下において、CANH/CANLは完全に平坦なままです。
CAN1でも同じ結果でした(ピンやトランシーバが違う)。
MCU側のTXDはトランシーバ入力まで正確であることが確認されていますが、CANH/CANLは適切な終端をしても応答しません。したがって、トランシーバの出力段階(または両チャネルで共有されている何か、例えば電源の過渡的な挙動については、オシロスコープでは確認できず、ロジックアナライザでしか確認できていません。
質問:
「TXDはトランシーバー入力で修正されるが、適切な終端でCANH/CANLは完全にフラット」というのは、トランシーバーのハードウェア故障を強く示唆するのでしょうか?それとも、他に一般的な基板レベルの問題(有効化/スタンバイ回路、電源デカップリング)がこの症状を引き起こす可能性があるのでしょうか?
実際のバスアクティビティがない場合、FlexCANは最初の数ビットのアービトレーション処理が完了した時点で(フレーム全体を完了してACKスロットで失敗するのではなく)処理を中止するのが想定される動作でしょうか?ビット監視メカニズムに関する私の理解を確認したいです。
サンプルプロジェクトのRTDバージョンの不一致についてですが、どのRTDバージョンが特定のS32構成ツールのリリースと一致しているか確認する方法はありますか?そうすれば、一致するサンプルパッケージを入手できます。
ご協力ありがとうございました。
よろしくお願いいたします、エイプリル
こんにちは、 @April さん。
プロジェクトを見る限り、設定と手順は正しいようです。NXPのS32K148EVBを使っているのか、それともカスタムデザインなのか教えていただけますか?
RTDに含まれているCan_example_S32K148プロジェクトをテストしてみましたか?CAN0ピンを追加し、ループバックモードを無効にしてTx/Rxを有効にしてルーチンをテストするだけで済みます。
最後に、両方のノード(S32K148とCANアナライザー)が同じビットタイミングとプロトコル構成(CAN対CAN FD)に設定されているか確認しましたか?以下のツールを使って値を計算できます:MPC5xxx/S32Kxx/LPCxxxx: CAN / CAN FD ビットタイミング計算。
カスタム設計を使用する場合は、S32K148 EVBの回路図およびS32K1xxのハードウェア設計ガイドラインを参照して、CANインターフェース設計や推奨事項を確認できます。
よろしくお願いします、
ジュリアン