マイコンの基礎 - メモリ増設
概要
メモリの外部拡張機能のあるマイコンであれば、簡単にメモリを増設することができる。
また、増設したメモリは、マイコンから見る場合は、マイコンのメモリ領域に拡張される形で扱うことができる。
しかし、メモリの外部拡張機能はマイコンによって異なるため、ここでは、STM32F7シリーズのSTM32F7x5を例に記載する。
STM32F7x5は、外部メモリに簡単にアクセスできるフレキシブルメモリコントローラ(以下、FMCという)が搭載されている。
FMCを使用すると、外部にPSRAM、NORフラッシュ、NANDフラッシュ、同期DRAM等が接続できる。
下図に、FMCのブロック図(図(a))とアドレスマップ(図(b))を示す。
アドレス空間内に4つのバンクを持ち、バンク1はNORフラッシュ / PSRAM / SRAM、バンク3はNANDフラッシュ、SDRAMバンク1と2はSDRAMに対応している。
各アドレス範囲は、下図(b)の通りである。
Quad SPIインタフェース(以下、QSPIという)を持つ外部メモリであれば、STM32F7x5のQSPIモジュールを使用して接続できる。
QSPIのメモリマップドモードを使用すると、外部メモリはアドレス空間(0x90000000台)に配置され、内部メモリであるかのようにみなされる。
QSPIの詳細は、マイコンの基礎 - Quad SPIを参照すること。
メモリの外部拡張機能
多くのマイコンにメモリの外部拡張機能が搭載されており、その仕様や名称、使用方法等はマイコンによって異なる。
したがって、各マイコンのマニュアルやアプリケーションノートを参照する必要がある。
ここでは、STM32F7シリーズのSTM32F745を例に記載する。
STM32F745には、Arm Cortex-M7(以下、Cortex-M7という)が搭載されている。
下図(a)に示すように、Cortex-M7の扱えるメモリ空間は0x00000000~0xFFFFFFFFの4[GB]だが、実際のマイコンに4[GB]のメモリを搭載することは不可能である。
そこで、ターゲットとするマイコンをベースとした必要最低限の実メモリを搭載する。
例えば、STM32F745ではフラッシュメモリを1[MB]、SRAMを320[KB]搭載している。
しかし、システムを開発する上で、ファームウェアのサイズが予定よりも大きくなったり、RAM領域が不足する場合がある。
このような場合、メモリの外部拡張機能を使用して、プログラムコード領域やRAM領域を増設できる。
下図(a)に、Cortex-M7オリジナルのメモリ空間を示す。
各領域は、0.5[GB]または1[GB]で区切られており、
アドレスの小さい方から、0.5[GB]ごとにプログラムコード用、内蔵SRAM用、周辺機能のメモリマップドレジスタ用となっている。
最も大きな領域はCortex-M7専用の領域になっており、その間のアドレス0x60000000~0xDFFFFFFFがメモリの外部拡張機能用に割り当てられている。
それぞれ、外部RAM用と外部デバイス用に1[GB]単位で区切られている。
STM32F745では、この外部拡張機能用の領域を、FMC用とQSPI用に割り当てている。
FMCの扱うアドレス空間内は全部で6個のバンクあるが、その内2個のバンクは使用されていないため、有効なバンクは4個となる。
バンク1はNORフラッシュ / PSRAM / SRAM、バンク3はNANDフラッシュ(QSPIと共用)、SDRAMバンク1と2はSDRAMにそれぞれ対応している。
FMCを使用して外部のSRAMにアクセスする場合、バンク1に割り当てられている0x60000000~0x6FFFFFFFに外部のSRAMが見える。
外部に接続された単体のSRAMのアドレスは0x000から始まり、実際には0x60000000台ではないが、
FMCがアドレス変換を行い、マイコンから見ると仮想的に0x60000000台に配置される。
また、QSPIを使用した場合は、0x90000000台に配置される。