こんにちは、NXP:
私のプラットフォームは s32k358 で、プロジェクトでは HVBMS_RD_IntProj_774_772_K358_S32DS を使用します。
以下が私のコードです:
Can_PduタイプCan_PduInfo_Can0;
uint8 canData0[8] = {0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89};
Can_PduInfo_Can0.id = 0x123;
Can_PduInfo_Can0.swPduHandle = 0U;
Can_PduInfo_Can0.長さ = 8U;
Can_PduInfo_Can0.sdu = canData0;
Can_43_FLEXCAN_Write(CanHardwareObject_eCan_TX1、&Can_PduInfo_Can1);
これは 100 ミリ秒のタスク、SO CAN バスは 100 ミリ秒ごとにこの CAN メッセージを送信します。問題は、errorState--> -->が「CAN_ERRORSTATE_ACTIVE」→「CAN_ERRORSTATE_PASSIVE」→「CAN_ERRORSTATE_BUSOFF」と進み、最終的にバスがスタックしてしまうことです。理由はわかりませんが、100 ミリ秒ごとに異なるオブジェクトで 1 つ以上の CAN バスを送信するだけです。
もう 1 つは、CAN バスがバスオフまたはスタックしているときに、Can_43_FLEXCAN_ErrorIrqCallback または Can_43_FLEXCAN_ProcessBusOffInterrupt 関数が実行されなかったことです。これらについて何か経験やアイデアはありますか?
皆さんありがとう。
BR、ビルウェン
こんにちは@BillWen
新しいプロジェクトをご提供ください。次に、20 ミリ秒の送信サイクルで「print」を使用することが送信失敗の原因である可能性がありますか?
こんにちは、Senlentさん:
1.最初のものは、次の図に従って CAN FD を設定します。
2. 2番目はCANと500kbpsに設定されています
「Can_43_FLEXCAN_Write」関数内でログを出力し、Can_eControllerState[u8ControllerID] = 2 --> ハードウェアオブジェクトを停止できるかどうかを確認します。
よろしくお願いします。
BR、ビルウェン
こんにちは@BillWen
テスト結果のスクリーンショットをご提供ください。
こんにちは@BillWen
少なくとも「NORMAL CBT」を使用する必要があります
こんにちは@BillWen
PCAN 設定を変更してみませんか?これはPCのソフトウェア設定のエラーではありませんか?
第二に、あなたは誤解しています。CAN FD ISO オプションは CAN FD を無効にするものではなく、単に ISO 11898 標準に完全に準拠するか、それとも別の準拠するかを選択するだけです。簡単に言えば、このオプションがチェックされているかどうかは、現在の CAN ボーレートとサンプリング レートの設定には影響しません。
こんにちは、Senlentさん:
サポートありがとうございます。
CAN バスが CAN バスオフになる理由はおそらくわかっています。MCAL フレックス スキャン設定が CAN FD 用であり、TSMASTER/PCAN-VIEW キャプチャが通常の CAN のみに設定されている場合はスタックしてしまうことがわかりました。これを試すのを手伝ってCAN。
したがって、CAN FD設定を閉じようと考えていますが、何か提案はありますか?すでに CAN FD ISO 構成を閉じていますが、まだ発生します。
ありがとう
BR、ビルウェン
こんにちは@BillWen
申し訳ありませんが、提供されたプロジェクトを直接コンパイルしてテストすることはできません。テスト ハードウェアは RD-K358BMU に基づいているようですが、ソフトウェアは HVBMS リファレンス コードから取得されています。私はこのハードウェアや対応するソフトウェア環境を持っていませんが、他のハードウェアでテストしました。
これが私のテストのスクリーンショットです。
まだ正常に動作しており、問題は見つかりませんでした。
こんにちは、Senlentさん:
NXP SW32K358_HVBMS-RD_IntProj_S32DS_0.8.0_D2402 プロジェクトに基づいてプロジェクトをアップロードし、いくつかの tja1145 CANトランシーバと CAN バス テスト機能を追加します。確認を手伝ってください。ありがとうございます。
よろしくお願いします。
BR、ビルウェン
こんにちは@BillWen
あなたの説明に基づいて、私はあなたにアドバイスすることはCANません。完全なプロジェクトを提供できない場合は、少なくとも問題を再現できる CAN テスト ルーチンを作成していただけますか。そうすれば、問題の考えられる原因を排除するお手伝いをさせていただきます。
または、送信モードをポーリング モードに変更することもCAN。これは、S32 DS のルーチンを参照できます。
こんにちは:
申し訳ありませんが、ファイルを忘れました。
よろしくお願いします。
BR、ビルウェン
こんにちは、Senlentさん:
1. 送信用にさらに MB を割り当てます。
A: さまざまな CanHardwareObject を設定しましたが、CanHardwareObject の 1 つが 1 つの mb に対応していると思います。そして、異なる CanHardwareObject ごとに異なる CAN メッセージを送信します。
2. 優先度については、すでに最高優先度として 0 に設定しています。
SO、なぜ CAN バスが CAN バスオフになり、CAN コントローラーモードが CAN_CS_STOPPED になるのかはわかりません。
CANテスト機能を添付しましたので、ご確認いただけます。
たとえば、Can_43_FLEXCAN_Write(CanHardwareObject_eCan_TX1, &Can_PduInfo_Can0); のみを使用すると、正常に送信でき、停止しません。
しかし、Can_43_FLEXCAN_Write(CanHardwareObject_eCan_TX2, &Can_PduInfo_Can1); に変更すると、CAN バス オフの問題が発生します。
この問題はランダムに発生すると思います。メモリやその他の設定に関連している可能性はありますか?
よろしくお願いします。
BR、ビルウェン
こんにちは@BillWen
ご説明いただいた内容から判断すると、これは散発的に発生する問題であるため、設定に問題はありません。
私の提案は次のとおりです:
1. 送信用にさらに MB を割り当てます。
2. Txに「割り込み」を使用する場合は、FLEXCAN割り込み優先度をさらに高く変更します。
また、PC のソフトウェアが CAN メッセージを監視できるかどうか、設定したサンプリング レートとボー レートがバス上のノードと一致しているかどうか、バス負荷が高すぎないかどうかも確認してください。
こんにちは、 Senlentさん:
ご返信ありがとうございます。
私たちのプロジェクト全体をあなたに渡すのは簡単ではありません。確認できるファイルまたは設定ファイルを教えていただけますか?あるいは他の方法はありますか?
このバスオフ問題はランダムに発生するものだと思います。
おそらく、CAN tx プロセッシングタイプが割り込みの場合、プロセスが正しいかどうかを確認するのに協力していただけるでしょうか。
よろしくお願いします。
BR、ビルウェン
こんにちは@BillWen
プロジェクトを共有していただければ、時間をかけて確認させていただきます。
こんにちは、 Senlentさん:
ご返信ありがとうございます。添付ファイルは私の設定です。
私の問題に戻ると、Freertos システム用に 100 ミリ秒のタスクを作成し、100 ミリ秒ごとに CAN メッセージを送信するのですが、CAN バスがオフになる場合とオフにならない場合があるという問題が発生しました。
これは正解です。この状態メカニズムは FlexCan IP 自体によって実装され、ISO 11898-1 の定義に準拠しています。(送信が失敗するたびに、FlexCan IP 自体が再送信を試行するため、ユーザーの介入は必要ありません。)
ISO11898-1 バスオフ
設定が正しいことを確認し、次に、エラー割り込みコールバック関数がプラットフォームで正しく構成されていることを確認してください。