「マイコンの基礎 - メモリ増設」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == メモリの外部拡張機能のあるマイコンであれば、簡単にメモリを増設することができる。<br> また、増設したメモリ…」)
 
40行目: 40行目:
最も大きな領域はCortex-M7専用の領域になっており、その間のアドレス0x60000000~0xDFFFFFFFがメモリの外部拡張機能用に割り当てられている。<br>
最も大きな領域はCortex-M7専用の領域になっており、その間のアドレス0x60000000~0xDFFFFFFFがメモリの外部拡張機能用に割り当てられている。<br>
それぞれ、外部RAM用と外部デバイス用に1[GB]単位で区切られている。<br>
それぞれ、外部RAM用と外部デバイス用に1[GB]単位で区切られている。<br>
<u>※FSMC(フレキシブル静的メモリコントローラ)</u><br>
<u>STM32の外部にSRAM / フラッシュメモリ / LCD等を接続するための機能である。</u><br>
[[ファイル:MCU Memory Expansion 2.jpg|フレームなし|中央]]
[[ファイル:MCU Memory Expansion 2.jpg|フレームなし|中央]]
<center>図. Arm Cortex-M7とSTM32F745のFSMCのメモリ空間</center><br>
<center>図. Arm Cortex-M7とSTM32F745のFSMCのメモリ空間</center><br>

2021年2月2日 (火) 02:47時点における版

概要

メモリの外部拡張機能のあるマイコンであれば、簡単にメモリを増設することができる。
また、増設したメモリは、マイコンから見る場合は、マイコンのメモリ領域に拡張される形で扱うことができる。

しかし、メモリの外部拡張機能はマイコンによって異なるため、ここでは、STM32F7シリーズのSTM32F7x5を例に記載する。

STM32F7x5は、外部メモリに簡単にアクセスできるフレキシブルメモリコントローラ(以下、FMCという)が搭載されている。
FMCを使用すると、外部にPSRAM、NORフラッシュ、NANDフラッシュ、同期DRAM等が接続できる。

下図に、FMCのブロック図(図(a))とアドレスマップ(図(b))を示す。
アドレス空間内に4つのバンクを持ち、バンク1はNORフラッシュ / PSRAM / SRAM、バンク3はNANDフラッシュ、SDRAMバンク1と2はSDRAMに対応している。
各アドレス範囲は、下図(b)の通りである。

MCU Memory Expansion 1.jpg
図. STM32F7x5のFMCのブロック図とアドレスマップ(STM32F7x5のリファレンスマニュアルRM0385から抜粋)



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]単位で区切られている。
※FSMC(フレキシブル静的メモリコントローラ)
STM32の外部にSRAM / フラッシュメモリ / LCD等を接続するための機能である。

MCU Memory Expansion 2.jpg
図. Arm Cortex-M7とSTM32F745のFSMCのメモリ空間



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台に配置される。