DMA バッファーでデータが上書きされるのを防ぐため、DMA バーストの長さを 4 バイトの倍数でアラインさせる必要があります。
影響: | 深刻な問題ではありません。 |
回避策: | 最終バッファーを除きすべてのバッファーが 4 バイトの倍数になるようにします。最終バッファーはどのサイズでもかまいません。 |
対象となる構成: | ADMA2 モードの SDIO コントローラーを使用するシステム |
対象となるデバイス リビジョン: | すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。 |
SD ホスト コントローラー仕様の v2.0 では ADMA2 バッファーの記述子およびそのポイント先のバッファーが 4 バイトの倍数でアラインされるものと定義されています。しかし、各 DMA エントリの長さは、1 から 64 KB までの任意のバイト数になります。
この長さが 4 バイトの倍数でないと、ホスト メモリからカードへの ADMA2 書き込みがコントローラーで正しく処理されません。次の例を参考にしてください。
記述子表:
アドレス | 長さ | データ |
0x1000 | 4 バイト | 0x0123_4567 |
0x2000 | 3 バイト | 0xABCD_DEAD |
0x3000 | 4 バイト | 0x8912_2345 |
ADMA2 操作が開始すると、コントローラーはアドレス 0x1000 から 4 バイトのデータを取り込み、内部 FIFO のロケーション 0 にそのデータをプッシュします (各ロケーションは 32 ビット幅)。続いて、次の記述子データがアドレス 0x2000 から取り込まれ、ロケーション 1 にコピーされます。ロケーション 1 はいっぱいではないので (3 バイトのみが有効) 、ポインターがインクリメントしません。最終記述子データがアドレス 0x3000 から取り込まれ、ロケーション 1 にコピーされます。ロケーション 1 にあった 3 バイトは間違って上書きされます。
Answer Number | アンサータイトル | 問題の発生したバージョン | 修正バージョン |
---|---|---|---|
47916 | Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 | N/A | N/A |
AR# 47531 | |
---|---|
日付 | 06/13/2018 |
ステータス | アクティブ |
種類 | デザイン アドバイザリ |
デバイス |