2393568_ja-JP

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

2393568_ja-JP

2393568_ja-JP

FLEXCAN EDMA - CANメッセージのバースト受信時にACKエラーが発生する

i.MXRT1176では、EDMAとFLEXCANを使用しています。(SDK 26.03)
DMA転送完了時にコールバック関数が定義されています。


これが私たちの流れです。

1.転送を開始するには、`FLEXCAN_TransferReceiveFifoEDMA()` を呼び出してください。

2. DMA転送完了時にユーザー定義コールバックが呼び出されます。

3. データはDMAバッファからコピーされ、メッセージの受信を継続するために`FLEXCAN_TransferReceiveFifoEDMA()`が呼び出されます。
4. 手順2~4を繰り返す


別のノードから最小限のフレーム間隔でバースト的にメッセージを送信すると、ACKエラーの数が増加することがわかりました。つまり、iMXがメッセージをACKできないということです。


処理の流れを追っていくと、DMA転送完了コールバックが発生するたびに、FLEXCAN上でDMAが無効化されているようです。「FLEXCAN_TransferReceiveFifoEDMA()」が呼び出されると再び有効化されます。 これは「FLEXCAN_EnableRxFifoDMA()」を呼び出すことで行います。有効化/無効化DMAはFLEXCANのMCRレジスタ内のDMAビットを更新し、フリーズモードでのみ可能です。メッセージを一気に受信しているため、FLEXCANがフリーズモードに設定されている間に送信が進行中である可能性があります。そして、着信メッセージをACKで確認できません。

 
`FLEXCAN_EnableRxFifoDMA()` の呼び出しを削除することで、すべての ACK エラーが解消されることを確認しましたが、今度は一部のメッセージがドロップされるようになりました。また、メッセージの間隔を空けて送信してみたところ、ACKエラーも解消されました。これが実装上の問題なのか、それとも別の方法で再設計すべきか確認していただけますか?
Tags (1)
No ratings
Version history
Last update:
yesterday
Updated by: