De nieuwste ESP32 kan daadwerkelijk Linux draaien en komt ongemakkelijk dicht bij een Raspberry Pi

Waar microcontrollers doorgaans bestaan uit een paar cores, een kleine hoeveelheid RAM, GPIO-pinnen en eventueel wifi, ondersteunt de ESP32-S31 aanzienlijk meer. Espressif heeft bovendien een grote wijziging aan de CPU doorgevoerd, waardoor het apparaat meer dan ooit op een SBC lijkt.

Uitgebreide ondersteuning voor randapparatuur

De belangrijkste vernieuwing van de ESP32-S31 is de netwerkcapaciteit. De chip beschikt over een 1000 Mbps Ethernet MAC, wat een grote sprong is ten opzichte van de tragere 100 Mbps van de ESP32-P4. Er wordt gebruikgemaakt van een 8P8C-connector (meestal aangeduid als RJ45) die verbinding maakt met een externe PHY via de RGMII-interface van de chip. Juist deze RGMII-interface maakt gigabit-snelheden mogelijk; anders zou er gebruik worden gemaakt van de standaard RMII.

Daarnaast beschikt de chip over diverse andere interfaces:

  • USB: Het officiële developer-board heeft een USB 2.0 High-Speed OTG-controller met een full-size Type-A socket die 500 mA kan leveren in host-OTG-modus.
  • Opslag en Camera: Een SDIO-hostcontroller met twee slots en een DVP-camera-interface die 8 tot 16 bits ondersteunt.
  • Display: Een parallelle LCD-controller die tot 24-bit RGB ondersteunt, evenals I8080- en MOTO6800-panelen.
  • Overig: Twee I2S-controllers met hardwarematige Bluetooth-audiosynchronisatie, veertien capacitieve touch-kanalen, een CAN FD-controller en vier MCPWM-units.

Deze combinatie van bekabelde netwerkmogelijkheden, een USB-host en ondersteuning voor camera's, displays en audio is ongebruikelijk voor een microcontroller en komt veel meer voor bij SBC's.

CPU-architectuur en geheugen

Aan de CPU-zijde bevat de ESP32-S31:

  • Twee 32-bit RISC-V cores die draaien op maximaal 320 MHz, beide voorzien van een floating point unit (FPU).
  • Eén van deze cores beschikt over een 128-bit SIMD-datapad.
  • Een aparte low-power core van 40 MHz.
  • L1-instructiecache van 32 KB per core en een gedeelde datacache van 64 KB.

Wat betreft het geheugen ondersteunt de S31 tot 64 MB PSRAM via een 250 MHz 8-bit DDR-interface, en tot 256 MB flash. In tegenstelling tot de ESP32-S3, waarbij de PSRAM-interface werd gedeeld met de flash, is dit nu gescheiden, wat een aanzienlijke verbetering is.

De implementatie van een echte MMU

Espressif gebruikt al langer de term "MMU", maar bij eerdere modellen zoals de ESP32-S3 en ESP32-P4 was dit enkel een blok dat externe flash en PSRAM naar de adresruimte mapte. Dit was niet te vergelijken met een moderne MMU die procesisolatie en paginatabellen kan beheren.

Bij de ESP32-S31 is er echter sprake van een fundamenteel verschil. Volgens het datasheet ondersteunen de cores "Sv32 two-level page-table address translation" en implementeren ze "Machine, Supervisor en User privilege modes". Sv32 is het eigenlijke paging-schema van RISC-V. De aanwezigheid van deze drie privilege-modi stelt een reguliere kernel in staat om in supervisor-modus te draaien, met firmware daaronder in machine-modus. Dit is precies hoe RISC-V-gebaseerde Linux-machines werken.

Hierdoor kan de S31 Linux veel natuurlijker ondersteunen dan eerdere, "hacky" pogingen op oude ESP32-microcontrollers. Espressif publiceerde in augustus al een Linux BSP (Board Support Package) gebaseerd op Buildroot en U-Boot, inclusief een kernel, device tree en root-bestandssysteem. Hoewel Espressif aangeeft dat dit nog niet aanbevolen is voor productiegebruik, is het functioneel.

De community heeft dit inmiddels verder uitgebreid:

  • Er is een poort waarbij Linux 6.18 draait in supervisor-modus, met werkende drivers voor vrijwel alle hardware.
  • Een andere versie, gebaseerd op Linux 7.1, ondersteunt een aangesloten 800x480 LCD-paneel waarop een console getoond kan worden.

Beperkingen in geheugen en rekenkracht

Het grootste struikelblok voor de S31 als SBC-vervanger is het RAM-geheugen. De chip heeft 512 KB SRAM on-chip en is beschikbaar in varianten met 16 MB of 32 MB in-package PSRAM. Het maximale geheugen is 64 MB, en er is geen DRAM-controller aanwezig. Ter vergelijking: concurrenten zoals de Milk-V Duo S bieden 512 MB RAM.

Vanwege deze beperking voeren de Linux-builds de kernel uit vanuit de flash, om kostbaar PSRAM te besparen. Daarnaast ontbreken een GPU of NPU. Hoewel de ESP32-P4 video-encoding en MIPI-interfaces heeft, zijn deze bij de S31 vervangen door extra radio's. De S31 beschikt wel over een JPEG-codec, een 2D-pixel-processing accelerator en 2D DMA, maar dit is onvoldoende voor een volledige Linux-desktopomgeving.

Ook de kloksnelheid van 320 MHz roept vragen op bij de gigabit Ethernet NIC. Bij deze snelheid zijn er ongeveer 3.900 CPU-cycli per Ethernet-frame van maximale grootte, en ongeveer 215 per frame van minimale grootte. Hoewel bulktransfers bij een theoretische PSRAM-maximumsnelheid van 500 MB/s mogelijk dicht bij gigabit-snelheden kunnen komen, is het twijfelachtig of de verbinding verzadigd kan worden bij veel kleine pakketoverdrachten.

Draadloze connectiviteit en energieverbruik

Een groot voordeel ten opzichte van vergelijkbare SBC's in deze prijsklasse is de geïntegreerde draadloze stack:

  • 2.4 GHz Wi-Fi 6.
  • Bluetooth 5.4 (zowel LE als Classic BR/EDR).
  • 802.15.4-radio voor Thread en Zigbee.
  • Ondersteuning voor Matter via Wi-Fi en Thread.

Het feit dat Bluetooth Classic aanwezig is op een ESP32 is ongebruikelijk, maar betekent wel dat oudere audioapparatuur perfect zal werken.

Het energieverbruik blijft laag, kenmerkend voor een microcontroller:

  • Wi-Fi ontvangst: 110 mA tot 117 mA (afhankelijk van de modus).
  • Wi-Fi verzending: pieken tot 265 mA op 802.11b bij 15 dBm.
  • Beide cores in modem-sleep op 320 MHz: 91 mA (met peripheral clocks uit) of 147 mA (met peripheral clocks aan).

Naamgeving en documentatie

De naam "S31" is enigszins verwarrend, omdat dit suggereert dat het een revisie van de S3 is, terwijl het apparaat nagenoeg irrelevant is ten opzichte van de reguliere S3. Espressif definieert de S-serie als "high-performance feature-rich SoCs", ongeacht de instructiesets. Jeroen Domburg, Technical Marketing Manager bij Espressif, gaf aan dat de CPU-architectuur nooit bedoeld was als onderdeel van de naam. De core is afgeleid van de P4 en is bijna twee keer zo snel als de S3.

De documentatie is momenteel nog in een vroeg stadium. Het datasheet is versie 0.5 en voorzien van een "PRELIMINARY" watermerk. Er zijn inconsistenties aanwezig; zo wordt de maximale kloksnelheid van de PSRAM in het datasheet vermeld als 80 MHz, terwijl Espressif elders 250 MHz publiceert.

Conclusie

De ESP32-S31 is strikt genomen geen SBC, maar het is wel de eerste ESP32 waarbij de randapparatuur, bandbreedte en het CPU-privilege-model direct aansluiten bij die van een moderne SBC. Hoewel een volledige desktopomgeving onmogelijk is met 16 MB PSRAM, kan er zonder veel moeite een Linux-terminal worden gedraaid. Dit is een eerste stap die de ESP32 op de lange termijn, en met toekomstige chips, zou kunnen positioneren als een levensvatbaar alternatief voor de Raspberry Pi.