2193836_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2193836_ja-JP

2193836_ja-JP

FlexCanバスオフ(S32K358ベース)

こんにちは、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、ビルウェン

Re: FlexCan bus off based on s32k358こんにちは、Senlentさん:

サポートありがとうございます。
原因はCANトランシーバの設定によるものだと思います。他の CANトランシーバ を使用して同じ CAN バス メッセージを送信しましたが、正常に動作し、スタックしたことは一度もありません。
TJA1145 の CANトランシーバ 設定を確認する必要があると思います。まだ他の問題がある場合は、別の投稿を作成しますので、よろしくお願いいたします。

ありがとう
BR、ビルウェン
Re: FlexCan bus off based on s32k358

こんにちは@BillWen

新しいプロジェクトをご提供ください。次に、20 ミリ秒の送信サイクルで「print」を使用することが送信失敗の原因である可能性がありますか?





Re: FlexCan bus off based on s32k358

こんにちは、Senlentさん:

1.最初のものは、次の図に従って CAN FD を設定します。

BillWen_0-1761804557252.pngBillWen_1-1761804574843.png

2. 2番目はCANと500kbpsに設定されています

BillWen_3-1761804658677.png

BillWen_2-1761804638548.png

「Can_43_FLEXCAN_Write」関数内でログを出力し、Can_eControllerState[u8ControllerID] = 2 --> ハードウェアオブジェクトを停止できるかどうかを確認します。


よろしくお願いします。

BR、ビルウェン



Re: FlexCan bus off based on s32k358

こんにちは@BillWen

テスト結果のスクリーンショットをご提供ください。

Re: FlexCan bus off based on s32k358こんにちは、Senlentさん:

すでに変更しましたが、同じようです。

ありがとう
BR、ビルウェン
Re: FlexCan bus off based on s32k358

こんにちは@BillWen

少なくとも「NORMAL CBT」を使用する必要があります

Senlent_0-1761795516909.png


Re: FlexCan bus off based on s32k358こんにちは、Senlentさん:
ご返信ありがとうございます。
以前のプロジェクトや現在のプロジェクトでは CAN FD を使用していなかったと思いますが、これらのルールに従いたいだけです。
ご説明によると、CAN FD ISO オプションは CAN FD を無効にしません。CAN FDを無効にする方法をご存知ですか?

ありがとう
BR、ビルウェン
Re: FlexCan bus off based on s32k358

こんにちは@BillWen

PCAN 設定を変更してみませんか?これはPCのソフトウェア設定のエラーではありませんか?

第二に、あなたは誤解しています。CAN FD ISO オプションは CAN FD を無効にするものではなく、単に ISO 11898 標準に完全に準拠するか、それとも別の準拠するかを選択するだけです。簡単に言えば、このオプションがチェックされているかどうかは、現在の CAN ボーレートとサンプリング レートの設定には影響しません。

Re: FlexCan bus off based on s32k358

こんにちは、Senlentさん:
サポートありがとうございます。
CAN バスが CAN バスオフになる理由はおそらくわかっています。MCAL フレックス スキャン設定が CAN FD 用であり、TSMASTER/PCAN-VIEW キャプチャが通常の CAN のみに設定されている場合はスタックしてしまうことがわかりました。これを試すのを手伝ってCAN。
したがって、CAN FD設定を閉じようと考えていますが、何か提案はありますか?すでに CAN FD ISO 構成を閉じていますが、まだ発生します。

BillWen_0-1761789110864.png



ありがとう
BR、ビルウェン

Re: FlexCan bus off based on s32k358

こんにちは@BillWen

申し訳ありませんが、提供されたプロジェクトを直接コンパイルしてテストすることはできません。テスト ハードウェアは RD-K358BMU に基づいているようですが、ソフトウェアは HVBMS リファレンス コードから取得されています。私はこのハードウェアや対応するソフトウェア環境を持っていませんが、他のハードウェアでテストしました。

これが私のテストのスクリーンショットです。

Senlent_0-1761725477413.png

まだ正常に動作しており、問題は見つかりませんでした。

Re: FlexCan bus off based on s32k358

こんにちは、Senlentさん:

NXP SW32K358_HVBMS-RD_IntProj_S32DS_0.8.0_D2402 プロジェクトに基づいてプロジェクトをアップロードし、いくつかの tja1145 CANトランシーバと CAN バス テスト機能を追加します。確認を手伝ってください。ありがとうございます。

よろしくお願いします。

BR、ビルウェン

Re: FlexCan bus off based on s32k358

こんにちは@BillWen

あなたの説明に基づいて、私はあなたにアドバイスすることはCANません。完全なプロジェクトを提供できない場合は、少なくとも問題を再現できる CAN テスト ルーチンを作成していただけますか。そうすれば、問題の考えられる原因を排除するお手伝いをさせていただきます。

または、送信モードをポーリング モードに変更することもCAN。これは、S32 DS のルーチンを参照できます。

Re: FlexCan bus off based on s32k358

こんにちは:

申し訳ありませんが、ファイルを忘れました。

よろしくお願いします。

BR、ビルウェン

Re: FlexCan bus off based on s32k358

こんにちは、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、ビルウェン

Re: FlexCan bus off based on s32k358

こんにちは@BillWen

ご説明いただいた内容から判断すると、これは散発的に発生する問題であるため、設定に問題はありません。

私の提案は次のとおりです:

1. 送信用にさらに MB を割り当てます。

2. Txに「割り込み」を使用する場合は、FLEXCAN割り込み優先度をさらに高く変更します。

また、PC のソフトウェアが CAN メッセージを監視できるかどうか、設定したサンプリング レートとボー レートがバス上のノードと一致しているかどうか、バス負荷が高すぎないかどうかも確認してください。

Re: FlexCan bus off based on s32k358

こんにちは、 Senlentさん:

ご返信ありがとうございます。

私たちのプロジェクト全体をあなたに渡すのは簡単ではありません。確認できるファイルまたは設定ファイルを教えていただけますか?あるいは他の方法はありますか?

このバスオフ問題はランダムに発生するものだと思います。

おそらく、CAN tx プロセッシングタイプが割り込みの場合、プロセスが正しいかどうかを確認するのに協力していただけるでしょうか。

よろしくお願いします。

BR、ビルウェン

Re: FlexCan bus off based on s32k358

こんにちは@BillWen

プロジェクトを共有していただければ、時間をかけて確認させていただきます。

 
Re: FlexCan bus off based on s32k358

こんにちは、 Senlentさん:

ご返信ありがとうございます。添付ファイルは私の設定です。

BillWen_0-1761636695266.png


私の問題に戻ると、Freertos システム用に 100 ミリ秒のタスクを作成し、100 ミリ秒ごとに CAN メッセージを送信するのですが、CAN バスがオフになる場合とオフにならない場合があるという問題が発生しました。


void write_can_test(void)
{
Can_PduType Can_PduInfo_Can0、Can_PduInfo_Can1、Can_PduInfo_Can2;
uint8 canData0[8] = {0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89};
uint8 canData1[8] = {0x22, 0x22, 0x22, 0x22, 0x33, 0x33, 0x33, 0x33};
 
Can_PduInfo_Can0.id = 0x123;
Can_PduInfo_Can0.swPduHandle = 0U;
Can_PduInfo_Can0.長さ = 8U;
Can_PduInfo_Can0.sdu = canData0;
 
Can_PduInfo_Can1.id = 0x234;
Can_PduInfo_Can1.swPduHandle = 0U;
Can_PduInfo_Can1.長さ = 8U;
Can_PduInfo_Can1.sdu = canData1;
 
Can_43_FLEXCAN_Write(CanHardwareObject_eCan_TX1、&Can_PduInfo_Can0);
}
 
Can_PduInfo_Can0 メッセージを送信するのは問題ないようです。ただし、Can_PduInfo_Can0 を Can_PduInfo_Can1 に変更すると、CAN バス オフの問題が発生します。
 
つまり、さまざまなCan_PduInfo を変更するだけで、そのうちのいくつかは正常に送信できますが、いくつかは送信後にしばらく停止します。
 
より多くの CanHardwareObject を使用してより多くのメッセージを送信すると、この問題がより頻繁に発生します。理由がわかりません。CAN バスを送信する手順に問題があるのでしょうか?
 
よろしくお願いします。
BR、ビルウェン
Re: FlexCan bus off based on s32k358

こんにちは@BillWen

これは正解です。この状態メカニズムは FlexCan IP 自体によって実装され、ISO 11898-1 の定義に準拠しています。(送信が失敗するたびに、FlexCan IP 自体が再送信を試行するため、ユーザーの介入は必要ありません。)

ISO11898-1 バスオフ

Senlent_0-1761631455562.png


設定が正しいことを確認し、次に、エラー割り込みコールバック関数がプラットフォームで正しく構成されていることを確認してください。

Senlent_2-1761632148637.png


Senlent_3-1761632578891.png

 


 

Tags (1)
No ratings
Version history
Last update:
‎11-20-2025 10:10 AM
Updated by: