« まあ、 | トップページ | 日記 »

2019年7月13日 (土)

stm32のFMCのアドレスライン

STM32F429に外部メモリを接続する。

F40x系だと、FSMCと称していてスタテック系のタイミングだけだけど、
F42xはSDRAMとかも行けるので、FMCと称している。

いままでも何度か使っていたのだけど、NAND FALSHとか、
小さめのSRAMばかりで、8bit幅ばかりだった。

今回16bit幅を使ったんだけど、A0を繋げるのを
忘れてしまった。
16bitバスなのに、アドレスピンはA0から使うのか...

まあ、そういうものだと言うならそうなんだろうね。
しょうがないので、メモリチップの近くで最上位ビット
のラインをパターンカットして代わりにA0を接続。

------

太古の昔、8086系では、16bitバスを16bitでアクセスする場合、
A0ピンは常にLに固定されていて、A1~A19で実際のメモリアドレス
を指定していた。

8bit単位の書き込み時のみ、A0とBHEが機能して、
奇数アドレスのみ、偶数アドレスのみへの書き込み制御をおこなっていた。

今の人に言っても、信じてもらえないことの一つだと思う。

各アドレスピンが、実際のアクセスアドレスと必ず一致していたので、
まあそうならざるを得ないんだけど。


確か、POWER PC プロセッサなんかは、32bitバス固定で
そもそもアドレスピンは、A2からしかなかったんだったか。


あー、アドレスバスと話はずれるが、
H8-300Hの外部データバス、8bitアクセスの時には、
D8~15を使ってアクセスしていたな。

16bitバス時はD0~15を使って、
当然ながら下位アドレスは、D0~7の方なのだが。

最初、8bitデバイスをD0~7に接続して、
うごかん~とかなった記憶がある。
先にSHを使ったので、思い切り引っかかった...
(SHの8Bitバス設定時のアクセスはD0~7を使う)

------

stm32(のFMC)は、各メモリバンクエリアの
初期設定でバス幅を設定する。

各アドレスピンが、実際のアクセスする
アドレスの各桁と一致しない構造
(設定バス幅によってシフトして出力される)になっている。

byteごとの書き込みには、NBL0~3が併用される

物理的なアドレスバス信号は必ずA0から始まるから、
便利っちゃ便利だけど、一つのメモリバンクエリア内では、
バス幅を混在させられないってことだ。

まあ、今どきそれで困るってことは、無いとは思うが...
stm32f429でも、(普通の)バスアクセスエリアは
4つまで持てるし。

今回はうっかりやってしまったが、
まあ勉強にはなったか。

| |

« まあ、 | トップページ | 日記 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« まあ、 | トップページ | 日記 »