この記事では以下のような話をする。
- 基本的にESP32-S3-WROOMシリーズのモジュール上でMicroPythonを動かしたい人向けの話
- ESP32-S3のモジュールの型番の見方
- PSRAMを使うときにはどのファームを焼いたらいいか
- Octal SPI接続のPSRAM (8MBのPSRAMは全部これ) を使用する場合、GPIO35, GPIO36, GPIO37がGPIOとして使えなくなる
ESP32-S3のモジュールの型番の見方
ESP32-S3-WROOMシリーズの型番はこんな構成になっている。
[ESP32-S3-WROOM]-[1 or 1U]-[N or H][Flash size][R+PSRAM Size]
PSRAMを搭載していないものは最後の “R+PSRAM Size” の箇所がない。
- ESP32-S3-WROOM (ここは共通)
- 1 or 1U : 1はPCBアンテナ搭載、Uは外部アンテナ用
- N or H : Nは85℃まで、Hは105℃まで
- Flash Size : Flashのサイズ。4MB、8MB、16MBがある。
- R+PSRAM Size : PSRAMのサイズ。PSRAMを搭載していないものはこの箇所がない。2MBと8MBがある。R2なら2MB、R8なら8MBのPSRAMを搭載している。
PSRAMはQuad SPI (QSPI) とOctal SPI (OSPI) の2種類ある。2023/06/01の時点でリリースされているものは、2MBのものはQuad SPI、8MBのものはOctal SPIとなっている。型番でいうと、末尾に “R2″ がつくものは容量2MBでQuad SPI接続、末尾に”R8” がつくものは容量8MBでOctal SPI接続のPSRAMがついている。
Octal SPI接続のPSRAMを使うと一部のGPIOが使えなくなる
また、Octal SPIの場合は、GPIO35・GPIO36・GPIO37がGPIOとして使えなくなるので注意が必要。
データシートにはこうある。
In module variants that have embedded OSPI PSRAM, i.e., that embed ESP32-S3R8, pins IO35, IO36, and IO37 connect to the OSPI PSRAM and are not available for other uses.
ESP32-S3-WROOM-1 & ESP32-S3-WROOM-1U Datasheet
どういうことか。
Quad SPIは4本、Octal SPIは8本のデータ線を使用する。この本数を確保するために従来GPIOとして使っていたピンをPSRAMに使っているのだ。通信速度の代償なので仕方ないが、「Octal SPIのPSRAMが載ったモジュールを買っちゃったけど、PSRAM要らないからGPIOいっぱい使わせて!」という場合は、PSRAMを無効にしたファーム (GENERIC_S3など) を焼けばPSRAMが無効になるかわりにGPIO35〜37が解禁される。
PSRAMを使うときにはどのファームを焼いたらいいか
使用するモジュールのPSRAMの接続タイプによって、使用すべきファームウェアが違う。それぞれの接続タイプに対応したファームウェアを選ばないとPSRAMが使えない。目的に合ったものを選んで書き込む。
- PSRAM無し、もしくは有るけど使わない場合 →GENERIC_S3 https://micropython.org/download/GENERIC_S3/
- Quad SPI → GENERIC_S3_SPIRAM https://micropython.org/download/GENERIC_S3_SPIRAM/
- Octal SPI → GENERIC_S3_SPIRAM_OCT https://micropython.org/download/GENERIC_S3_SPIRAM_OCT/
OctalにQuad用のファームを焼いたり、逆にQuadのモジュールにOctal用のファームをを焼いたりすると、動くことは動くけどPSRAMは使えない。一応、起動はする。
PSRAMが使えているかどうかチェックする
gc
モジュールを使う。
>>> import gc
>>> gc.mem_free() + gc.mem_alloc()
8196480
>>>
gc.mem_alloc()は使用済みメモリ、gc.mem_free()未使用メモリをバイト単位で返す。PSRAM無しだと100KBくらい。上の例だと8MBくらい使えている。