13,198
回編集
| 53行目: | 53行目: | ||
FMCがアドレス変換を行い、マイコンから見ると仮想的に0x60000000台に配置される。<br> | FMCがアドレス変換を行い、マイコンから見ると仮想的に0x60000000台に配置される。<br> | ||
また、QSPIを使用した場合は、0x90000000台に配置される。<br> | また、QSPIを使用した場合は、0x90000000台に配置される。<br> | ||
<br><br> | |||
== FMC(フレキシブルメモリコントローラ) == | |||
下図に、"メモリの外部拡張機能"セクションの図に掲載したSTM32F745のFMCのブロック図を再掲する。<br> | |||
[[ファイル:MCU Memory Expansion 1.jpg|フレームなし|中央]] | |||
<center>図. STM32F745のFMCのブロック図("メモリの外部拡張機能"セクションの図の再掲)</center><br> | |||
<br> | |||
FMCは、以下のブロックで構成されている。<br> | |||
<u>※AHB(Advanced High-performance Bus)とは、マイコンの内部バスである。</u><br> | |||
* 設定レジスタ(AHBインタフェースを含む) | |||
* NORフラッシュ / PSRAMメモリコントローラ | |||
* NANDフラッシュメモリコントローラ | |||
* SDRAMコントローラ | |||
<br> | |||
FMCは、マイコンの内部バスと外部デバイスの間に位置しており、インタフェースの役割を果たしている。<br> | |||
具体的には、外部デバイスのプロトコルを内部バスのプロトコルに変換して、外部デバイスがマイコン内部に存在するかのように動作させる。<br> | |||
FMCの主な機能は、以下の通りである。<br> | |||
* 外部デバイス(同期 / 非同期)とのインタフェース | |||
* 同期外部デバイスに対するアクセスを高速化するバーストモードのサポート | |||
* 非同期アクセスと同期アクセス用のプログラム可能な連続クロック出力 | |||
* 8ビット / 16ビット / 32ビット幅のデータバス | |||
* 各メモリバンクに対する独立したチップセレクト制御 | |||
* メモリバンクごとに独立した設定 | |||
* 書き込みイネーブルとバイトレーン選択出力 | |||
* 外部非同期ウェイト制御 | |||
* 16×32ビットの深さの書き込みFIFO | |||
* キャッシュ可能読み出しFIFO | |||
<br> | |||
FMCの仕様と使用方法の詳細は、[https://www.stmcu.jp/design/document/application_note/51386/ アプリケーションノート]を参照すること。<br> | |||
<br><br> | |||
== FMC使用例1 : 非多重 / 非同期16ビットNORフラッシュとの接続 == | |||
NORフラッシュを制御するために、FMCをNORフラッシュの仕様にしたがって設定する。<br> | |||
<br> | |||
以下に、FMCの設定例を示す。<br> | |||
また、他のパラメータは、全てクリア状態にする。<br> | |||
* バンクは、NORフラッシュを選択 | |||
* バンクを許可 | |||
* メモリタイプはNORフラッシュを選択 | |||
* データバスを16ビットに設定 | |||
* 非多重メモリを選択 | |||
<br> | |||
下図に、NORフラッシュのアクセスタイミングを示す。<br> | |||
[[ファイル:MCU Memory Expansion 3.jpg|フレームなし|中央]] | |||
<center>図. 非多重 / 非同期16ビットNOR型フラッシュメモリのアクセスタイミング(アプリケーションノート : AN2784 STM32F10x FSMCによる外部メモリの使用から抜粋)</center><br> | |||
<br> | |||
下図に、ハードウェアの接続例を示す。<br> | |||
[[ファイル:MCU Memory Expansion 4.jpg|フレームなし|中央]] | |||
<center>図. 非多重 / 非同期16ビットNOR型フラッシュメモリとの接続例(アプリケーションノート : AN2784 STM32F10x FSMCによる外部メモリの使用から抜粋)</center><br> | |||
<br> | |||
NORフラッシュ / PSRAMコントローラは、非同期 / 同期メモリ双方のサポートが可能である。<br> | |||
そのため、ユーザはメモリの仕様にしたがって使用するパラメータを設定する。<br> | |||
<br> | |||
非同期メモリを使用する場合は、以下のパラメータをメモリの仕様にしたがって設定する。<br> | |||
* ADDSET : アドレス・セットアップタイム | |||
* ADDHOLD : アドレス・ホールドタイム | |||
* DATAST : データ・セットアップタイム | |||
* ACCMOD : アクセスモード | |||
<br> | |||
同期メモリを使用する場合は、以下のパラメータを設定する。<br> | |||
* CLKDIV : クロック分周比 | |||
* DATLAT : データレイテンシ | |||
<br> | |||
また、NORフラッシュからプログラムを実行することもできる。<br> | |||
この場合、以下の手順が必要となる。<br> | |||
* ファームウェアを外部のNORフラッシュにロード | |||
*: この操作は、開発ツールチェーンのリンカファイルに対して、特別な設定が必要になる。 | |||
*: 外部NORフラッシュの先頭アドレス(もしくは、NORフラッシュのメモリ空間のあるアドレス)を指定する必要がある。 | |||
*: また、特別な外部NORフラッシュ用のプログラムローダも必要となる。 | |||
* ファームウェアの実行 | |||
*: ファームウェアをNORフラッシュに書き込んだ後、FMCを設定して、外部NORフラッシュにジャンプして実行するような特別なプログラムを、 | |||
*: 内部のフラッシュメモリにロードする。 | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:ARM]][[カテゴリ:AVR]][[カテゴリ:MSP430]][[カテゴリ:STM32]][[カテゴリ:H8]] | [[カテゴリ:ARM]][[カテゴリ:AVR]][[カテゴリ:MSP430]][[カテゴリ:STM32]][[カテゴリ:H8]] | ||