S32K3 上の FlexCAN DMA – 割り込みと TCDNXPチームの皆様、こんにちは。
私たちはS32K3 上で FlexCAN Rx DMAを評価しており、私たちの観察結果が予想通りであるか、または推奨されるアプローチがあるかどうかを確認したいと思います。
アプローチ1:割り込みベースのDMA完了イベント情報
- DMA は 1 つの CAN フレームを Rx FIFO から RAM 一時バッファにコピーし、割り込みを生成します。
- データをアプリケーションの循環バッファにプッシュする前に、一時バッファが必要です。
観察/質問:
- eDMA は循環キューや車載再Arm機能をサポートしていないため、一時ストレージが必要なようです。
- 負荷がかかると RX メッセージが失われ、場合によっては TX が停止することがわかりました。
レガシー Rx FIFOおよびER-FIFOに対して DMA を使用してロスのない循環 Rx バッファリングを実装するための推奨方法はありますか、それともこれは既知の制限ですか?
アプローチ2: TCDベースのDMA
- DMA は、生の FlexCAN レジスタ ワード(CS/DLC/フラグ、ID、データ) を RxFIFO 出力場所 (ソース) から RAM バッファ (宛先) にコピーします。
- 受信データは正規化された CAN メッセージ形式ではありません。
観察/質問:
- CPU は、メッセージ ID (STD/EXT)、ペイロード長 (DLC から派生)、正しい順序のペイロード バイト、FD/BRS フラグ、およびタイムスタンプを解析する必要があります。
- FlexCAN DMA は生の転送のみを実行し、メッセージの正規化は常にソフトウェアで実行する必要があると考えられますか?
- DMA 受信フレームの RTD ドライバ解析ロジックを再利用するための推奨方法はありますか?
- もう 1 つの問題は、宛先モジュロが CAN FD フレームの循環キュー操作を処理できないことです。つまり、TCD 方法には宛先アドレスを特定のバイト数後にラップするのに役立つ宛先モジュロの概念が 1 つあります。SO、CAN FD フレーム バイト数 (フレームあたり 72 バイト) は、モジュロ値と適切に一致しません。
- そして、宛先最終アドレスレジスタの調整に別のオプションを試しました。単一フレームでは機能しますが、20 フレームのキューのようなフレーム数に対して宛先アドレスが適切にラップされないなどの問題があります。
追加の質問
- 通常の Rx FIFO 割り込みと比較して、 CAN DMA 割り込みを使用する利点は何ですか。
上記のすべての観察が S32K3 上の FlexCAN Rx DMA の予想される動作であるかどうかを確認してください。
ありがとう...
Re: FlexCAN DMA on S32K3 –Interrupt vs TCDこんにちは@kapidlitap
同様のトピックの質問。
https://community.nxp.com/t5/S32K/S32K358-レガシー-RX-Fifo-DMA 付き vs-強化された RX-Fifo-DMA/td-p/2266494
当社の RTD ドライバはユーザー向けの DMA 構成をすでに完了しているため、ユーザーは自分のニーズに合わせて DMA を再構成する必要はありません。
割り込み方法と DMA 方法のパフォーマンス比較データは提供していません。ユーザーは実際の使用ケースに応じて構成およびテストを行い、最適な方法を選択する必要があります。
拡張FIFO+DMAデモ
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-DMA-...