2128661_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2128661_ja-JP

2128661_ja-JP

MBDTにおけるCANバス処理

FlexCAN0の設定には、NXPのS32K344用MBDTを使用しています。CANメッセージ処理のどの部分がNXPのブロックやツールボックスで管理され、何がアプリケーションで処理されるべきかを理解したいです。

  • 仲裁やバッファの処理はドライバやツールボックスで管理されていますか?例:最初に0x18FEF111を送信すると、0x18FEEF00はバス上に表示されません。しかし、0x18FEEF00を先に送信すると、両方とも送信されます。両方を同時に送信すると、どちらか一方のみが表示されます。
  • SO、複数のフレームを同時に送信する際、各メッセージIDに専用のTxハードウェアオブジェクトを割り当てる必要がありますか?
  • MBDTやSDKsはメッセージの優先順位付けを処理し、ACKが届かない場合に自動的に再試行しますか?
  • 優先度の高いIDが失敗した場合(例えば、ACKが返ってこなかった場合)、他のメッセージもブロックされますか?これをどのように検知し、復旧すればよいのでしょうか?
  • ブロックやメッセージの喪失を避けるために、モデル内でバッファの割り当てや送信タイミングを手動で管理する必要がありますか?
  • MBDTで複数のTxメッセージIDを設定する最適な方法は何ですか?動的バッファを使用する場合。

社内で何が処理されるのか、アプリケーションで何が処理されるのかを明確にしてください。

サンプル・モデルRe: CAN Bus Handling in MBDT

こんにちは、 @SorinIBancila さん


利用可能なHTHハードウェアオブジェクトの数よりも多くのフレームを送信する必要がある状況に遭遇しました。CanIf送信バッファリング実装はS32CTでは活用できないため、この問題に対してsimulinkベースのバッファソリューションをおすすめしてもらえますか?


ありがとうございます。

サンデシュ

Re: CAN Bus Handling in MBDT

こんにちは、

32 CANのハードウェアオブジェクト数は制限ではありません。MCUによってはさらに制限を上げることも可能です。CANオブジェクトカウントの上限を変更できますが、数字を大きくするとS32CTがエラーを出します。

よろしくお願いいたします。

ソリン・バンシラ

Re: CAN Bus Handling in MBDT理解した!SO、32以上のメッセージを送信する必要がある場合、追加のTx Hardware Objectを作成するべきでしょうか?また、S32CTを使ったS32K3で単一のCANトランシーバまたはコントローラの下で設定できるハードウェアオブジェクトの最大数はどれくらいですか?
制限内に収まるように、大規模なメッセージセットに対してHOH(階層型ヘッダー)を構成する最適な方法を理解したいと考えています。
Re: CAN Bus Handling in MBDT

こんにちは、


一度に何件のメッセージを送信する必要があると思いますか?


S32K358 HVBMSリファレンスデザインで以下のシナリオをテストしました:

  • 単一の送信ハードウェアオブジェクトを使い、Can Hw Objectカウント を32に設定します(バッファ内に最大32メッセージを許可するため)。
    SorinIBancila_0-1751890828580.png
  • Simulinkでは、調停プロセスを検証するために、メッセージバッファに32個のメッセージを格納し、バッファにメッセージが格納されるにつれて優先度を上げました。 SorinIBancila_3-1751891054922.png


結果:

予想通り、メッセージバッファが完全に満たされていないため、最初に送信されるメッセージは優先度が低くなります。6番目のメッセージあたりでバッファが埋められ、CANの優先度の高いメッセージが最初に送信されるのがわかります。

SorinIBancila_5-1751891107134.png


単一のトランシーバを使いたい場合、すべてのメッセージを同時に送信することは実際には不可能です。


よろしくお願いいたします。

ソリン・バンシラ




Re: CAN Bus Handling in MBDTこんにちは、ソリンさん。

ご意見ありがとうございます!
動的バッファを使用する場合に、MBDTで複数の送信メッセージIDを設定する最適な方法を明確にしたいと思いました。私の場合、コントローラはJ1939ベースのCANセットアップでEVアプリケーションに使われており、数百のサイクリックメッセージが関わっています。

S32CTでメッセージごとに個別のハードウェアオブジェクトを作成する方法は、拡張性にも実用性にも欠けるように思われる。単一のTxハードウェアオブジェクトを使って複数のメッセージを動的に処理し、1つのCANインターフェースを通じて同時に送信したいと考えています。

このユースケースで推奨されるセットアップやベストプラクティスについて教えていただけませんか?また、MBDTで使われる設定設定や関連関数の仕組みを理解するために参照しなければならないドキュメントもぜひ教えてください。
Re: CAN Bus Handling in MBDT

こんにちは、

まず最初に、S32K3xx用のMBDTはS32K3 RTDをベースに構築されていることを指摘しておきたいと思います。ペリフェラルの設定はS32設定ツールで行い、必要な設定に完全な柔軟性を持たせます。つまり、NXPのMBDT S32K3xxで機能がサポートされているかどうかを確認するには、ペリフェラル(S32K3 RTDで使用されている)のソースコードとS32設定ツールの利用可能な設定を確認できます。

ツールボックスには、FlexCANペリフェラルの実装がこちらにあります: {toolboxRoot}/src/S32K3_RTD/SW32K3_S32M27x_RTD_R21-11_6.0.0/eclipse/plugins/Can_43_FLEXCAN_TS_T40D34M60I0R0/

注記!S32K3 RTDの名称は、使用するMBDT S32K3のバージョンによって異なる場合があります。


ご質問への回答は私の経験に基づくものであり、必ずしも完全に正確とは限りません。

1 & 2 & 5:ツールボックスは仲裁を扱っていませんが、SDKでこのマターに関してどんなオプションがあるのかはよくわかりません。あなたの例では、別のCanHardwareObjectを作成してそれを使って 2 番目のメッセージを送信していますが、この方法は管理が難しいかもしれません。2つ目の解決策は、バッファにより多くのメッセージを入れるためにCan Hw Object Countを作成することです。

SorinIBancila_0-1751638634625.png


3:S32K3 用の MBDT はメッセージの優先順位付けを処理しません。私の知る限り、FlexCANコントローラの役割は、ACKが受信されるまでメッセージを再送信しつつ、バッファ内でメッセージをブロックすることです。


4. メッセージが送信されたかどうかを検出する方法の1つは、ハードウェア割り込みコールバックで割り込みCanIf_TxConfirmationを使用して、メッセージが送信されたことをマークすることです。指定されたPDUに対して割り込みが発生しない場合、メッセージは送信されなかったことを意味します。さらに、CANバスオフの条件を満たすとトリガーされる別の割り込み(CAN_ControllerBusOff)が利用可能です。S32設定ツールには、バスオフ状態から自動的に復旧するオプションがあります。

SorinIBancila_1-1751640323228.png


ご質問があれば、遠慮なくご返信ください。

よろしくお願いします、

ソリン・バンシラ



タグ(1)
評価なし
バージョン履歴
最終更新日:
10 時間前
更新者: