シングルバンクとデュアルバンクの違い:Q&Aで学ぶマイコン講座(65)(3/4 ページ)
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初級者の方からよく質問される「シングルバンクとデュアルバンクの違い」についてです。
異なるアドレスを複数のバンクに割り当てる
ハード的に区分けしたバンクに異なるメモリ領域を割り当てる場合は、各バンクは完全に独立した動作が可能です。そのため、あるバンクから命令をフェッチして実行し、別のバンクのデータにアクセスするといった複数バンクの同時使用ができます。
本記事では、STマイクロエレクトロクス(以下、ST)の汎用32ビットマイコンSTM32G4シリーズ*2)のフラッシュメモリのバンクを例にして解説します。
図3に、STM32G4シリーズのメモリ構成とアドレス割り当てを示します。
フラッシュメモリは、256KBのメモリモジュールを2つ使って512KBを構成し、前半の256KBのアドレスの“0x0800 0000〜0x0803 FFFF”をバンク1に割り当て、後半の256KBのアドレスの“0x0804 0000〜0x0807 FFFF”をバンク2に割り当てています。バンクが2つなのでデュアルバンクです。
フラッシュメモリのバンク構成のイメージ図を図4に示します。
図4:STM32G4シリーズのバンク構成(イメージ図)(クリックで拡大)
STM32G4シリーズデータシート、リファレンスマニュアルから抜粋
https://www.stmcu.jp/design/document/datasheet/66889/
https://www.stmcu.jp/design/document/reference_manual/66929/
アドレスを“0x0800 0000〜0x0803 FFFF”に割り当てたバンク1と“0x0804 0000〜0x0807 FFFF”に割り当てたバンク2は、それぞれ完全に独立したハードウェアになっています。
STM32G4シリーズは、ハーバードアーキテクチャ*3)なので、命令バスとデータバスが独立しています。また、アドレスバスはバンク1の“0x0800 0000〜0x0803 FFFF”用とバンク2の“0x0804 0000〜0x0807 FFFF”用に分かれています。そのため、バンク1とバンク2は各バスを含め完全に独立して動作することができます。
例えば、バンク1から命令をフェッチする場合は、バンク1用のアドレスバスで命令のアドレスを指定し、読み出された命令は命令バスに乗って、CPUに読み込まれます。同時に、バンク2にデータを書き込む場合は、バンク2用アドレスバスで、データを書き込みたいアドレスを指定し、データをデータバスに乗せ、バンク2に書き込みます。
命令バス、データバス、バンク1用のアドレスバス、バンク2用のアドレスバスがそれぞれ独立しているので、このような命令フェッチとデータアクセスが同時に実行できます。また、その逆で、バンク2からフェッチした命令を実行中に、バンク1のデータにアクセスすることも可能です。
*2)https://www.stmcu.jp/stm32/stm32g4/
*3)Q&Aで学ぶマイコン講座(36):ハーバードアーキテクチャって何?
Copyright © ITmedia, Inc. All Rights Reserved.