マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Doom Player -- ハードウェア概要

2022-02-16 12:47:18 | DoomPlayer

Doom Playerのハードウェアがほぼ固まったので、その概要を記すことにします。まずは全体像。

Nucleo-H7A3ZIの上に拡張基板を載せて、さらにその上にLCDモジュールが載っているという3階建てです。

ユニバーサル基板で組んである拡張基板には、VS1053bとQSPIフラッシュが載っています。8ピンのDIPソケットがふたつ並んでおり、SOPパッケージを変換基板を使って実装。右側には QSPI フラッシュ、左側には予備のフラッシュもしくはPSRAMを載せて使うことができます。この写真ではPSRAMが載っていますが、何も刺さなくでも動作可能。予備のQSPIフラッシュを乗せた場合には、ブート時にBLUEスイッチを使って、どちらのフラッシュを参照するかを選択することができます。そのため、2種類のDOOM WADファイルを切り替えて使うことができるという仕掛けになっています。PSRAMは、内蔵メモリだけではメモリ不足でゲームが遊べない場合に使用します。現在のファームでは、内蔵メモリだけでもシェアウエア版のゲーム(DOOM1.WAD)は問題なくデモが動くのですが、WADファイルによってはデモを走らせていると、途中でメモリ不足でリブートしてしまいます。実際にゲームをプレイしている際にもステージの途中や切り替わり時にメモリ不足が生じることがあります。シェアウエア版であれば、内蔵RAMだけでも最後までプレイできるかもしれませんが、未確認です。

VS1053bの部分は、Music Maker FeatherWing を使っています。自分で変換基板を使って組むより簡便で小さくできるのがメリットですね。

LCDモジュールは、BuyDisplayの3.5インチもの。このモジュールはインタフェースのバリエーションが選べるし、ジャンパ設定で自分で変更することも可能なのが気に入っています。以前は、もっと安かったんですが、近頃は値上がりしてしまったのが残念ではあります。LCD基板の裏にはSPI フラッシュ用のパターンが用意されていますが、普通のSPIでありQSPIアクセス用の信号は出ていないので、未使用。

LCDインターフェースとしては、8ビットパネル、静電容量タッチパネル付きで購入。STM32H7A3にはLTDCが備わっているのでRGB565を使うことも可能ですが、内蔵メモリをフレームバッファで消費してしまうのが気がかりだったので、8ビットパラレルを選択。16ビットパラレルが使えれば、書き込み速度を倍にできたところですが、Nucleo-H7A3ZIだとFMCから16ビットを引き出すことができなかったので断念。

ハードウェア全体は、各モジュールやICをほぼ直結するだけの単純なものです。ブロック図で示すとこうなります。

QSPI Flash/PSRAMは、STM32H7A3のOCTOSPIを使ってつなげます。Nucleoではピン割り当ての都合上、個別のIOラインを割り当てることができないので、線を共有するMultiplex モードを使用。CS信号でアクセスするデバイスを切り替えます。

VS1053bとは、4種類のペリフェラルを使って接続。SPIは、VS1053bの設定用。UARTは、MIDIデータの送信用。そして、I2Sは再生したMIDIの合成音をデジタル信号として受信するために使用しています。この信号データからMusic Player機能で表示されるスペクトラム画像が生成されます。

DACは、Doomのゲーム効果音の再生に用いられています。DOOMの効果音は、PCMの8ビットデータとして用意されていますので、これをDACでアナログ信号に変換。VS1053b側では、LINE入力でこれを受けることで、MIDIの再生音とミキシングして再生することができます。基板上にはイヤフォンジャックが載っていますが、これはDACの出力音を確認するために使用したものです。

このように各部を直結するだけなので、パスコンやDAC出力のDC成分除去用のコンデンサが追加で必要なくらいの単純なハードウェアです。配線作業も大したことはないのですが、ただひとつだけ配線作業に注意が必要なのが、VS1053bからの端子引き出しです。

Music Maker FeatherWingでは、VS1053b のLINE入力端子やI2Sの信号端子は未使用となっており、基板の端子ランドとは接続されていません。幸いなことに、これらの端子はフローティングのままとなっており、FeatherWing基板も多くのGPIO端子が未使用のために、それらのランドが空いていました。そこで、QFPパッケージの端子にポリウレタン線を半田付けして引き出しています。

 

FeatherWingとLCDボードにはSDカードスロットも備わっていますが、これらは未使用。将来的には、ゲームデータのSave/Load機能をサポートしてもいいかもしれません。