ブログ
ESP32のアーキテクチャ:ARM、RISC-V、Xtensa
ESP32の中に入っているプロセッサーの種類、ARMなのかRISC-VなのかXtensaなのか、そしてチップが実際にどう動くのか。はっきり答えます。
ESP32はどうやって動くの?
電源を入れると、ROMブートローダーがフラッシュを確認し、ファームウェアを読み込んで、制御を引き渡します。あなたのプログラム、通常はFreeRTOSの上で動くそれは、コア間でタスクをスケジュールします。1つのコアがWi-Fiを維持し、もう1つがロジックを実行する、という分担です。ペリフェラル(ピン、タイマー、I2C、SPI)は、メモリレジスタのように設定するファブリック上に配置されています。全体像は「2つのコア+ピンを自由に割り当てるルーター+横に載った無線」です。
ESP32はARMですか?
いいえ。クラシックなESP32は、Tensilica(現在はCadence)のXtensa LX6コアを採用しています。ARMと同じくライセンス可能なアーキテクチャですが、ARMそのものではありません。S2とS3は新しいLX7コアです。STM32やRaspberry PiでARMにしか触れたことがない人にとって、違いは主にツールチェーンに現れます。ARM用のコードは、そのままではESP32でコンパイルできません。
ESP32はARMベースですか?
いいえ。ファミリーのどこにもARMコアはありません。「ESP32はARMを使っているの?」への答えも同じです。クラシックチップはXtensa、新しいチップはRISC-Vです。ARMは設計をライセンス供与していますが、Espressifは別のアーキテクチャを選びました。これがチップを安くできる大きな理由のひとつです。「ESP32はARMベース」と書いてある記事は、STM32やnRFと混同しています。
ESP32はRISC-Vですか?
半分はそうです。ESP32-C3、C6、H2、P4はRISC-V、オリジナルのESP32、S2、S3はXtensaです。「ESP32はRISC-V?」への答えはファミリー単位で変わり、CシリーズならRISC-V、文字なしやSシリーズならXtensaです。私の作業台にはC3とS3が並んでいますが、日々のコーディングで違いを感じることはほとんどありません。フォーラムで「ESP32はRISC-V?」と聞かれても、答えはいつも同じで、「どれのこと?」です。
ESP32はオープンソースですか?
部分的に、そしてこの区分が重要です。SDK(ESP-IDF)、Arduinoコア、ほとんどのライブラリはApache 2.0のオープンソースで、監査も再ビルドもできます。一方チップ自体は閉じたシリコンで、オープンなレイアウトはなく、無線やBluetoothの一部はバイナリで提供されます。C3とC6はドキュメントが充実していますが、完全にオープンなハードウェアはありません。
ESP32の中のプロセッサーコアはどんなもの?
最大240MHzの32ビットXtensa LX6コアが2つに、浮動小数点演算ユニット(FPU)付きです。LX6はSIMD拡張を持つDSP向けの設計で、これがESP32がサイズの割にオーディオ処理を得意とする理由です。S3のLX7コアはRAM帯域が広く、暗号処理も高速。CシリーズはLX6をRISC-VのRV32に置き換えています。シンプルですが、実速度はほぼ同等です。
なぜARMではなくXtensaを使うの?
ライセンス費用と歴史です。Espressifの最初のヒット作ESP8266がすでにXtensaベースで、Tensilicaの条件ならARMより安い価格設定ができました。そのツケが回ってくるのがユーザー側で、Xtensaには専用のコンパイラツールチェーンが必要ですし、ARM向けのライブラリは移植できないものもあります。その代わり、Wi-Fi完備のマイコンが2ドルで手に入るのです。PlatformIOならツールチェーンの面倒を隠してくれます。
ESP32はどうやって外の世界と通信するの?
GPIOマトリックス経由です。これはほぼすべてのペリフェラル信号をほぼすべてのピンに配線できるクロスバーで、UART、SPI、I2C、I2S、RMT、LEDCのPWM、タッチセンサーはすべてソフトウェアで設定します。この柔軟さはこの価格帯では珍しく、「Xに使えるピンは?」への答えは、ほとんどの場合「好きなピンでいいよ」です。
ESP32でLinuxは動く?
実用的なLinuxは動きません。ESP32はFreeRTOS、MicroPython、あるいはベアメタルで動作します。マイコンクラスなので、MMUがなく、RAMも限られ、本格的なストレージインターフェースもありません。RISC-VのESP32-P4は一歩前進ですが、それでもLinuxマシンではありません。Linuxが必要なら、Raspberry Piのような別のハードウェアが必要です。
この記事のテーマのプロジェクトは、sensbench の無料シミュレーターでそのまま実行できます。回路は配線済み、ファームウェア同梱、アカウントもインストールも不要です。