マイコン工作実験日記

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

OCTOSPIによるQSPI Flash/PSRAMの接続

2024-01-04 12:08:17 | DoomPlayer

現在作業中のNucleo-U575ZIを使ったDoomPlayerの開発ですが、ようやくと音楽、効果音、ゲームの再生、実行機能が動くようになってきました。音楽の再生時には、SDカードとDACを使っており、効果音の再生とゲームの実行時にはQSPI FlashとQSPI PSRAMの両方へのアクセスが発生しているので、Bluetooth部分を除いて基板上に追加実装したパーツのひととおりの動作確認が取れたことになります。

GUIとして使っているlvglは もうすぐv9.0がリリースされる予定ですが、今のところはv.8.3.11を使っています。

Music Playerでは、Timerで生成した44.1KHzのクロックをトリガとしてDACで変換することで音楽を再生。

効果音については、従来通り11.025KHzの8bit PCMを4倍して44.1KHzに変換して再生します。

BluetoothのモジュールであるBT860とはUARTを介してHCIのリセットコマンドを送り、その応答が返ってくることは確認したのですが、BTStackの移植作業は未着手となっています。そのため、Doomの実行時にはデモ画面が流れるのを見ることができるだけで、操作は一切できない状態となっています。

今回のプロジェクトの大きな目的のひとつは、STM32U5のOCTOSPIインターフェースを使って、QSPI FlashとQSPI PSRAMをつなげてアクセスすることでしたので、この目的は達成できたと言えます。おさらいしておくと、2年近く前にはNucleo-H7A3を使ってPSRAMをつなげてみましたが、シリコンバグを回避するために大きな制約を受け入れてようやくなんとか使えるというもので、不満が残っていました。STM32シリーズではデバイスによりQSPI PSRAMの読み書きができるかどうかが異なるので注意が必要です。STは公式にはその一覧を出していないようですが、フォーラムではAP MemoryのAlexさんがデバイス別の対応表を出してくれており、参考になります。

QSPI FlashとQSPI PSRAMは、OCTOSPIMのマルチプレックス機能を使ってIOnとCLK信号を共有することで使用ピン数を削減しています。実際のところNucleo-U575ZIを使えば、FlashとPSRAMにそれぞれ独立したIOnとCLK信号ピンを割り当てることも可能なのですが、マルチプレックス機能を使って問題なく動くようであれば、将来的に100ピンのパッケージを使った基板を作成してみようかとも妄想しているので、確認することにしました。試行錯誤の結果、現在動くようになった設定は...

  • 当初は、FlashとPSRAMのどちらも80MHzのクロックで問題なく動くように見えたのですが、いざDoomを動かしてみると両方へのアクセスが頻繁に発生するためか、動作が不安定になり、hardfaultが頻発。160MHz/3 = 53.33MHzに落としたところ安定して動いているようです。PSRAMの方は 80MHzで問題なく動いています。
  • 使用したQSPI Flash W25Q256JVはDTR (Double Transfer Rate)をサポートしているので、設定を試したみたのですが動作を確認できませんでした。DelayBlockを使ってやれば、うまくタイミングを調整できるのかもしれませんが、80MHzでの動作が不安なこともあり、あまり期待できないように思われます。

今後は、BTStackを動かしてPS4/PS5のコントローラをつなげる計画なのですが、現在残りメモリが少なくなっており、使用メモリを削減しないと苦しくなりそうです。。

1/17 追記

80MHzで動いていたPSRAMですが、ソフトを作り進めるうちにPSRAM上においた効果音データをDACで再生しようとするとノイズばかりになるようになってしまいました。Flashと同じ53MHzにクロックを落としたところ、問題解消。