HN 日本語サマリー

← 一覧へ戻る
プログラミング

最新のESP32はLinuxを動作させることができ、Raspberry Piに迫る

The newest ESP32 can run Linux and it's getting close to a Raspberry Pi (xda-developers.com)

174 pointsby adunk82 コメント

要約

Espressifの新製品ESP32-S31は、ギガビットイーサネット、USB 2.0ホスト、SDカードインターフェース、カメラ入力といった、マイクロコントローラーとしては異例の機能を搭載しています。これにより、シングルボードコンピューター(SBC)に匹敵する性能を持ち、Linuxのネイティブサポートも強化されています。ただし、RAM容量はSBCと比較して限定的であり、GPUやNPUは搭載されていません。

全文翻訳

最新のESP32はLinuxを動作させることができ、Raspberry Piに迫る性能を持つ

Espressifは新しいESP32、ESP32-S31を発表しました。このESP32は、ギガビットイーサネットMAC、USB 2.0ハイスピードホストコントローラー、2つのスロットを持つSDカードインターフェース、カメラ入力などを搭載しています。これらは通常、Linuxシングルボードコンピューター(SBC)に見られる機能セットですが、マイクロコントローラーとしては異例のリストです。

私はマイクロコントローラーを長年扱ってきましたが、通常は数個のコア、少量のRAM、GPIOピン、そしてWi-Fiなどが搭載されています。より高度なものには通常Raspberry Piが使われますが、ESP32-S31は典型的なマイクロコントローラーセットアップをはるかに超える機能をサポートしています。EspressifはCPUにも大きな変更を加え、SBCとしての性格をこれまで以上に強めています。

ESP32にとってペリフェラルサポートは既に大きな進歩

さらに多くのことができる

[画像: esp32-s31-featured]Credit: Espressif

ESP32-S31に関する最大のニュースは、そのネットワーク機能です。ESP32-P4の低速な100 Mbpsを大きく上回る1000 MbpsイーサネットMACを搭載しています。Espressifの開発ボードでは、S31のRGMIIインターフェースを介して外部PHYと8P8Cコネクタ(一般的にRJ45と呼ばれる)で接続されています。RGMIIはギガビットを可能にするもので、そうでなければ標準的なRMIIが使用されます。

それに加えてUSBもありますが、これは「標準」USBではありません。S31自体はUSB 2.0ハイスピードOTGコントローラーを搭載しており、公式開発ボードではホストOTGモードで500 mAを供給できるフルサイズType-Aソケットで公開されています。その隣には2つのスロットを持つSDIOホストコントローラー、8〜16ビットのDVPカメラインターフェース、最大24ビットRGBおよびI8080、MOTO6800パネルをサポートするパラレルLCDコントローラーが配置されています。ハードウェアBluetoothオーディオ同期を備えた2つのI2Sコントローラー、14個の静電容量式タッチチャンネル、CAN FDコントローラー、4つのMCPWMユニットもあります。

[画像: ESP32-S31のブロック図。チップが中央に配置され、320 MHzのRISC-Vコア2基、40 MHzの低消費電力コア、512 KBのSRAM、Wi-Fi 6、Bluetooth 5.4、802.15.4ラジオがリストアップされています。左側では、フラッシュ(最大256 MB)とPSRAM(最大64 MB)が別々のバスで接続されています。右側では、各インターフェースにラベルが付いた線が、RGMII(ハイライト表示)経由でイーサネットPHYとRJ45ポートへ、USB 2.0ハイスピードOTG経由でUSB Type-Aソケットへ、SDIO経由で2つのSDカードスロットへ、DVP経由でカメラへ、LCD p]

このリストだけでも、これが新しいタイプのESP32であり、これまで見たことのないものであることは明らかです。有線ネットワーク?USBホスト?カメラ、ディスプレイ、オーディオ?ここにあるすべては、マイクロコントローラーというよりSBCに近いですが、それだけではありません。

CPU側では、最大320 MHzで動作する32ビットRISC-Vコアが2基あり、それぞれに浮動小数点ユニット(FPU)と、一方のコアには128ビットSIMDデータパス、そして別の40 MHz低消費電力コアも搭載されています。各コアは32KBのL1命令キャッシュを備え、64KBのデータキャッシュを共有します。メモリはさらに興味深いです。S31は、250 MHz 8ビットDDRインターフェース経由で最大64 MBのPSRAMをサポートし、最大256MBのフラッシュもサポートします。ESP32-S3ではPSRAMインターフェースがフラッシュと共有されていたため、これはかなりのステップアップです。

EspressifはESP32-S31に実際のMMUを搭載した

以前の「MMU」とは大きく異なる

[画像: 2つの部分からなる図で、EspressifがMMUと呼んだ2つのものを比較しています。上部はESP32-S3およびESP32-P4用で、CPUがMMUにアドレスを送信し、チップ全体で1つのマップがSPIフラッシュまたはPSRAMを指している様子を示しています。チップ上のすべてのコードは同じマップを使用します。下部はESP32-S31用で、Sv32仮想アドレスがVPN[1](ビット31〜22)、VPN[0](ビット21〜12)、および12ビットオフセットに分割されている様子を示しています。各フィールドはルックアップの1ステップをインデックス化します。satpレジスタ(ハイライト表示)が t]

Espressifは、ESP32-S3やESP32-P4を含め、長年「MMU」という言葉を使用してきました。しかし、その場合のMMUは、外部フラッシュとPSRAMをアドレス空間にマッピングするブロックであり、プロセス分離やページテーブルのような処理も可能な最新のMMUの複雑さには程遠いものでした。その結果、EspressifがS31にMMUサポートがあると述べたとき、それは以前と同じようなものだと見なされていました。

しかし、今回は大きな違いがあります。S31のデータシートでは、Espressifはコアが「Sv32 2レベルページテーブルアドレス変換」を行い、「マシン、スーパーバイザー、ユーザー特権モード」を実装していると述べています。Sv32は実際のRISC-Vのページングスキームであり、3つの特権モードすべてを持つことが、通常のカーネルがスーパーバイザーモードで実行され、その下にファームウェアがマシンモードで実行されることを可能にします。そして、これがRISC-VベースのLinuxマシンが動作する仕組みです。

[画像: 3層スタックで、ESP32-S31のRISC-V特権モードでLinuxがどのように実行されるかを示しています。シェルやSSHなどのユーザープロセスはUモードで実行され、各プロセスは独自の仮想アドレス空間を持ちます。これらはSモードのLinuxカーネルにシステムコールを発行します。Sモードはハイライト表示されており、仮想アドレスを変換するためにハードウェアが使用するSv32ページテーブルを保持しています。カーネルは、MモードのOpenSBIファームウェアにSBIコールを発行し、チップへの完全なアクセスを保持し、タイマー、割り込み、リセットサービスを提供します]

過去のESP32マイクロコントローラーでLinuxを実行しようとしたハック的な試みとは異なり、S31はネイティブサポートのために、より多くの機能を最初から備えています。まず、Espressifは8月に既にLinux BSPを公開しており、BuildrootとU-Bootをベースに、カーネル、デバイスツリー、ルートファイルシステムが含まれています。Espressifは「まだ本番環境での使用は推奨されない」と述べていますが、重要なのはそれが動作するということです。

コミュニティも速いペースで改良を進めています。あるポートでは、Linux 6.18がスーパーバイザーモードで動作し、ほぼすべてのハードウェアのドライバーが機能しています。別のポートはLinux 7.1をベースにしており、接続された800x480のLCDパネルでコンソールを表示できます。ディスプレイを接続し、有線イーサネットを使用し、マウスとキーボードを使用できるというのは、マイクロコントローラーというよりSBCに似ています。

メモリが最大の弱点

競合するSBCよりも大幅に少ない

[画像: Milk-V-Duo-S-5]

S31は、搭載されているRAMを見ると遅れ始めます。チップ上には512KBのSRAMがあり、16MBまたは32MBのインパッケージPSRAMを搭載した2つのバリアントが利用可能です。最大で搭載できるメモリは64MBで、DRAMコントローラーはどこにも見当たりません。Milk-V Duo Sのような512MB RAMを搭載したデバイスと比較すると、ESP32-S31がマイクロコントローラーであることをすぐに思い出させられます。

これがまさに、Linuxビルドがフラッシュからカーネルを実行する理由であり、貴重なPSRAMをそれに費やすのを避けるためです。また、オンボードGPUやNPUはなく、ESP32-P4にはビデオエンコードおよびMIPIインターフェースがありますが、これらはS31では追加のラジオに置き換えられています。JPEGコーデック、2Dピクセル処理アクセラレーター、2D DMAは引き続き利用できますが、フルLinuxデスクトップを表示するには十分ではありません。

クロックスピードもギガビットイーサネットNICに関して疑問を投げかけます。320 MHzでは、最大サイズのイーサネットフレームあたり約3,900 CPUサイクル、最小サイズのフレームあたり約215サイクルです。理論上のPSRAM最大転送速度が500 MB/sであるため、バルク転送ではギガビット速度に近づける可能性がありますが、多くの小さなパケット転送で接続を飽和させることに関しては懐疑的です。

これらのラジオは大きな利点です。同価格帯のSBCではオンボードワイヤレススタックが省略されていることが多いからです。2.4GHz Wi-Fi 6、LEおよびClassic BR/EDRの両方を備えたBluetooth 5.4、ThreadおよびZigbee用の802.15.4ラジオに加えて、ギガビットMACを備えています。MatterはWi-FiとThread上で動作し、Bluetooth Classicに戻ると、ESP32にそれが搭載されているという事実は、おそらくかなり珍しいことです。しかし、これにより古いオーディオ機器も完璧に動作します。

これらのラジオを搭載しても、消費電力は非常に優れています。Wi-Fi受信はモードに応じて110 mA〜117 mA、802.11bで15 dBm送信時のピークは265 mA、ペリフェラルクロックオフで320 MHzのモデムスリープ状態の両コアは91 mA、オンの場合は147 mAを消費します。これは、SBCのペリフェラルセットを備えながらも、マイクロコントローラーの電力プロファイルです。

「S31」という名前は少し混乱している

しかし、それ以外はかなり良い

[画像: ESP32-S3の2つのUSB-Cポート]

これが「S31」と呼ばれている事実は少し奇妙です。「S31」はS3のリビジョンを示唆していますが、実際には通常のS3とはほとんど関連がありません。EspressifはSシリーズを「高性能で機能豊富なSoC」と定義しており、命令セットとは関係ありませんが、両ラインナップの大きな違いは、Cシリーズで使用されているRISC-Vコアと、Sシリーズで使用されているXtensa LX7コアでした。

Hackadayのコメントセクションで、EspressifのテクニカルマーケティングマネージャーであるJeroen Domburg氏は、「CPUアーキテクチャを名前に含めるつもりは実際にはありませんでした」と述べています。また、コアはP4から派生しており、S31はS3のほぼ2倍の速度であるとも述べています。

残念ながら、S31のデータシートはまだ古く、バージョン番号0.5で、最初のページ全体に大きな「PRELIMINARY」という透かしが入っています。少なくとも、非常に詳細で大部分は一貫していますが、その予備的な状態の一例として、PSRAMは最大クロック80 MHzと記載されており、Espressifが公開している250 MHzのPSRAM速度とは直接矛盾しています。公平に言えば、少し乱雑なドキュメントはEspressifにとって特に珍しいことではありませんが、ESP32-S31のライフサイクルの初期段階であることを証明しています。Linux側は基本的に遊び道具であり、しばらくの間はそのままでしょう。

S31はSBCではありませんが、ペリフェラル、帯域幅、CPU特権モデルなど、多くの機能が最新のSBCに隣接している最初のESP32です。優れたI/Oを備えたマイクロコントローラーとSBCの間のギャップは過去数年間で縮まっており、16MBのPSRAMでデスクトップを実行することはまだできませんが、それほど問題なくLinuxターミナルを起動できます。そしてそれは、長期的には(そして将来のチップで)ESP32がRaspberry Piの実行可能なSBC代替としての地位を確立する可能性のある最初のステップです。