ESP32S3のGPIOポートに付いて簡単にまとめてみました。SPECはESP32-S3 Seriesに有ります。


- すべてInput/Outputポート。入力だけのポートは無し
- 起動時、各ポートは太字機能に設定されます。
- Strapping Pins
- 起動時に関係するピンは、GPIO 0, 3, 45, 46の4ピン
- Chip boot mode: GPIO0,46
- GPIO0,46の状態で起動時のモードを設定。(ESP32にも有った)
- 開発ボードを使用する場合、各ポートを配線しなければ問題無く作動します。
- VDD_SPI voltage: GPIO45
- SPI用の電圧設定。 3.3Vと1.8Vの2つが選択出来る
- ポートがオープン(配線無し)なら3.3Vが選ばれる
- ROM message printing: GPIO46
- 起動時のメッセージを何処に出力すか設定
- Defaultは UART0 and USB Serial/JTAG controller
- JTAG signal source: GPIO3
- デバッグ用の設定。
- GPIO3とEFUSEの組み合わせで設定する様ですが、EFUSEの指定方法が分かりません
- Arduino IDEのメニューでJTAG Adapterを”Disabled”に設定して機能を無効にしています
- Chip boot mode: GPIO0,46
- その他起動時に注意が必要なPORT
- GPIO19,20
- デフォルトでUSB開発用に設定されています。
- 設定を解除して普通のGPIOポートとする事が可能の様ですが解除方法が分かりません
- GPIO 17,18 GPIO 43,44
- シリアル通信用
- UART0: GPIO 43,44。変更不可。固定。
- UART1: GPIO 17,18。変更可能。ソフトで使用設定を行わなければ普通
のGPIOとして使用可能。
- シリアル通信用
- GPIO35,36,37
- SPECによるとR8シリーズはここにPSRAMが接続されている。
- 使用を避けた方が無難
- GPIO19,20
- 起動時に関係するピンは、GPIO 0, 3, 45, 46の4ピン
- I2C Interface:デフォルトピン無し。ユーザが指定。
- I2S Interface:デフォルトピン無し。ユーザが指定。
- SPI
- 全部で4本:SPI0,1,2,3
- SPI 0,1
- 内部で使用され使用出来ない
- SPI2
- GPIO9から14を使用。
- Single SPI, Dual SPI, Quad SPI, Octal SPI, QPI, and OPI modesが可能
- SPI3
- デフォルトのピンは無し。ユーザが指定。
- Single SPI, Dual SPI, Quad SPI, and QPI modesが可能(Octal SPIが出来ない)
- SPI 0,1
- 全部で4本:SPI0,1,2,3
回路を設計する上での注意点。
以上より回路を設計する場合、以下を注意。
- GPIO 0, 3, 45, 46: 配線は先ず避ける(オープンにする)
- GPIO 43,44: UART0を使用する前提でこれらのポートはオープンにする
(GPIO 17,18:UART1を使用しないー>通常のポートとして使用) - GPIO19,20: USBは使わないがとりあえず避ける。
- GPIO35,36,37: PSRAMが接続されていたら使用出来ない。
上記を避けたとしてもESP32よりGPIOの数はS3の方が多いのでESP32から容易に移行出来ます。
Arduino IDEの設定
最初シリアルモニタに出力出来なかったのですが下記の設定で動く様になりました。
- PCとの接続: UARTソケットにケーブルを接続して下さい。
- 使用しているArduino IDEは 1.8.19。①
- ボードは ”ESP32S3 Dev Module” を選択。②
- これらのUSB関係のスイッチは”Disabled”に設定。③
- JTAG Adapterを”Disabled”に設定。④

少し使って見て
ESP32とESP32S3ではピン数も配置も違うのでESP32の回路がそのまま使えません。ESP32S3用に配線しピン指定を行えばESP32で使っていたCodeがほとんどそのまま使えます。Radiko(ESP32S3編)はESP32で製作したRadikoをESP32S3に置き換えて作り変えた例です。ESP32のコードをそのまま使用では有りませんが簡単にESP32S3に移行出来ました。
ESP32S3は、
- USB機器の開発が出来る
- PSRAMを持っている。
- GPIOポートが増えた
がESP32と比較して違う点だと思います。USB機器の開発が一番と思いますが、今の所殆ど開発の仕方を理解していません。でも ”PSRAMを持っている” ”GPIOポートが増えた” も大きなメリット。特に”PSRAMを持っている”が有ったのでRadiko(ESP32S3編)を作る事が出来ました。