アラームの原因を検索すると、「PDMA での AXI 読み取りエラー」が表示されます。このアラームが発生する原因は何でしょうか?
SPT エラー キューがオーバーフローしました。最初の 10 件のエラーのみが報告されます。最後に実行されたカーネルを確認してください!
SPT完了
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000
RsdkSptRun が完了しました。SPT プロセッシングが完了しました。次のカーネルの準備ができました。
こんにちはピーター、
ご返信ありがとうございます。
あなたが挙げた理由に従い、私は特に以下の点に重点を置いてコードを注意深くチェックしました。
WR_5、問題は見つかりませんでした。さらに、SPT カーネル コードは変更していません。
コード初期リスト:
AppMemAllocBuffer ( pHeapMem 、 & gSdadcSampleBufferBufH [インデックス]、 sizeof ( uint16_t ) * RSDK_SPT_RANGE512_4CH_IN_BUF_SIZE 、
RSDK_SPT_DATA_ADDR_ALIGN_BYTES 、 RSDK_OALMEM_CHUNK_ID_CBRAM );
RelocSptCode ( gSptModuleCodeRelocBufH . virtAddr 、 RsdkSptRange512smp128crp4ch 、 RSDK_SPT_GET_KERNEL_SIZE ( RsdkSptRange512smp128crp4ch ));
np = 0 ;
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ;
sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gSdadcSampleBufferBufH [ 0 ]。 phyAddr ;
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ;
sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gRadarCubeResultsBufH 。 phyAddr ;
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ;
sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ( gFft512TwiddleFactorsBufH . phyAddr );
sprintf (ファイル名、 " %s% s " 、 FILE_IN_PATH 、 "fft512_twiddle_factors.dat" );
/* RSDKデータは、PPCアーキテクチャとの互換性のため、ビッグエンディアン形式でファイルに保存されます。エンディアンの変換は、ファイルへのデータの読み書き時にのみ行われます。プロセッシングフロー内での変換は必要ありません。*/
DbgReadFileConvert ( fileName 、 0 、 ( char * ) gFft512TwiddleFactorsBufH . virtAddr 、 gFft512TwiddleFactorsBufH . numBytes 、 ENDIAN_CHANGE 、 DATA_BUFF_IS_CACHED );
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ;
sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gFft512BlackmanWindowBufH 。 phyAddr ;
sprintf (ファイル名、 " %s% s " 、 FILE_IN_PATH 、 "fft512_win_blackman.dat" );
DbgReadFileConvert ( fileName 、 0 、 ( char * ) gFft512BlackmanWindowBufH . virtAddr 、 gFft512BlackmanWindowBufH . numBytes 、 ENDIAN_CHANGE 、 DATA_BUFF_IS_CACHED );
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_VALUE ;
sptContext . kernelParList [ np ++ ]. paramValue = 3 ; /* 出力シフトなし */
sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_LAST ;
印刷リスト:
gSptModuleCodeRelocBufH.phyAddr: 0x34000000
gSdadcSampleBufferBufH[0].phyAddr: 0x28000000
gSdadcSampleBufferBufH[1].phyAddr: 0x28003000
gSdadcSampleBufferBufH[2].phyAddr: 0x28006000
gSdadcSampleBufferBufH[3].phyAddr: 0x28009000
gRadarCubeResultsBufH.phyAddr: 0x34002000
gFft512TwiddleFactorsBufH.phyAddr: 0x340bd000
gFft512BlackmanWindowBufH.phyAddr: 0x340bf000
こんにちは、
考えられる原因は次のとおりです:
1. SPT入力とS32DS入力の不一致
SPT カーネル入力が予期された S32DS 構成と一致しませんでした。
PDMA は、SPT カーネルの構成によって決定されたアドレスでメモリを読み取ります。バッファ サイズ、キューブ ベース アドレス、またはチャネル カウントが揃っていない場合、PDMA は無効または予期しないメモリ位置を読み取ろうとする可能性があります → AXI 読み取りエラー。
2. 作業レジスタ(WR_x)の設定が正しくないか破損している
PDMA が無効または誤って構成されたバッファを指す作業レジスタを使用する場合、AXI ファブリックは不正な読み取り要求を受信し、バス エラーをトリガーします。
3. 同期PDMA実行モードと非同期PDMA実行モード
.sync → .async
.syncでモードでは、PDMA は誤った構成 (バッファ ポインタ、依存関係など) により満たされない可能性のある条件を待機します。
これにより、エラー フラグが蓄積され、PDMA エンジンが無効な読み取りを繰り返し試行すると AXI エラーが発生する可能性があります。
4. データ幅またはフォーマットが間違っている(例:WR_16とWR_11)
PDMA が 16 ビットの複合データを期待しているが、ターゲット レジスタ/バッファが異なる幅/レイアウトに設定されている場合、AXI 読み取りバーストが不整合になる可能性があり、プロトコル エラー → AXI 読み取りエラーが発生します。
5. AXIプロトコルレベルのエラー(一般的な原因)
S32R45 に固有のものではありませんが、AXI 読み取りエラー メカニズムは普遍的に適用されます。
- バースト長またはサイズが無効です
- マップされていないアドレスまたは保護されたアドレスからの読み取りの試み
- スレーブタイムアウトまたは応答しないターゲット
- アップストリームの問題による読み取り応答エラー(SLVERR または DECERR)
PDMA が不正な AXI トランザクションを生成すると、AXI インターコネクトは SLVERR を返します。これは PDMA 読み取りエラーとして表示されます。
あなたのケースで最も可能性の高い原因
両方のログに基づくと、主な容疑者は次のとおりです。
- 間違ったWR_xレジスタ(特にWR_5 / WR_16の選択)
非常に一般的には誤って構成され、無効な AXI 読み取りにつながります。
- SPTカーネル入力とS32DS入力の不一致
以前のケースでは、見落とされ、根本原因として検証されることがよくあります。
- PDMA同期モードが依存関係のデッドロックを引き起こす
.syncを切り替えてみる→ .asyncデバッグ用。
よろしくお願いいたします。
ピーター
こんにちはピーター、
レーダー フロントエンドの波形サンプリング ポイントの数を 2 倍にすると、エラーは発生しなくなりましたが、チャープ バッファのサイズは変更されていません。問題をさらに分析するのにご協力ください。どうもありがとうございます。