開発のヒント

周辺機能、I/O、メモリ

FMC/FSMCにメモリ以外のデバイスを接続する際の注意点

STM32ファミリの多くの製品シリーズには、FlashメモリやSRAM、PSRAM、SDRAMなどの外部メモリを接続するためのFMC/FSMCインタフェースが搭載されています。 さまざまなメモリを接続できるよう柔軟な設定が行えるため、メモリバス・インタフェースを備えたLCDディスプレイやFPGA/ASICなど、メモリ以外のデバイスを接続することも可能です。

しかし、Arm® Cortex®-MコアからFMC/FSMCを通して、外部メモリには正しく読み書きできるのに、メモリ以外のデバイスと通信がうまくいかないといった問題があります。このような場合、メモリ保護ユニット(MPU)の設定を確認してみてください。

MPUで設定できるパラメータの一つに「Memory Type」があり、その保護領域に対するアクセスのふるまいを決定します。 設定可能なMemory Typeは以下の3通りです。

hint106-1

STM32のメモリ空間において、FMC/FSMCが割り当てられているアドレスは、デフォルトではNormalに設定されています。FMC/FSMCに接続したメモリ以外のデバイスと通信がうまくいかない場合、Normal属性によるアクセス順序の入れ替えや投機的リードの影響かもしれません。
Device属性の書き込みのバッファリングが動作に影響する恐れもあるため、Strongly-Orderedに設定することをおすすめします。

参考:アプリケーションノート AN4838 Managing memory protection unit (MPU) in STM32 MCUs

過去の開発のヒントはこちら