Feature support
The standard full board configuration includes optional buses, audio, storage, and networking drivers.
Availability labels
Label |
Meaning |
|---|---|
🟢 Included |
The default build selects this support; runtime setup may still be required |
🟡 Implemented |
A driver or protocol path exists |
🟠 WIP |
Integration remains incomplete |
🔴 Absent |
No ESP32-S31 implementation is provided in this repository |
These labels describe the build configuration and driver support.
System
Feature |
Availability |
Notes |
|---|---|---|
Linux, Sv32 MMU, and flash XIP |
🟢 Included |
Configured for 16 MiB flash and 16 MiB PSRAM |
Dual-core SMP |
🟢 Included |
Both HP harts are configured to run Linux |
Persistent root filesystem |
🟢 Included |
SquashFS with a JFFS2 writable layer |
Removable storage and swap |
🟢 Included |
FAT/VFAT, built-in ext4, SD/MMC, USB storage, and swap |
Runtime overlays |
🟢 Included |
Peripheral selection, pin routing, and saved settings |
CPU frequency scaling |
🟢 Included |
Shared 80, 160, 240, and 320 MHz policy |
CPU idle |
🟢 Included |
Firmware-assisted WFI |
LP firmware and mailbox |
🟡 Implemented |
remoteproc, PING/PONG, timer and GPIO diagnostics |
Suspend-to-idle |
🟡 Implemented |
The LP timer-wake diagnostic polls on the HP CPU |
Timed deep sleep |
🟡 Implemented |
Timed wake follows the cold-boot path |
Normal poweroff |
🟡 Implemented |
Does not arm timed wake; restart through external reset or a power cycle |
Suspend-to-RAM and LP GPIO wake |
🟡 Implemented |
Timer/GPIO wake paths exist |
Linux, LP firmware, and OpenSBI use matching sleep protocol definitions. See Power management for commands and wake-source settings. Source references: Linux sleep structure, OpenSBI validation.
Radio
Feature |
Availability |
Notes |
|---|---|---|
Wi-Fi station |
🟢 Included |
Single-station mac80211/cfg80211, |
Bluetooth |
🟢 Included |
BTstack with direct HCI; an alternate Linux HCI frontend exists |
AP, AP+station, and protected AP |
🔴 Absent |
These modes are not exposed by the current SoftMAC frontend |
Software monitor |
🟠 WIP |
Uses the station-filtered receive path; not full promiscuous capture |
Enterprise authentication |
🟠 WIP |
No firmware EAP vendor interface is exposed |
Active Wi-Fi suspend/recovery |
🔴 Absent |
A running interface vetoes suspend with |
The supplied root filesystem uses BTstack. Trying BlueZ also requires selecting the Linux HCI frontend and changing the rootfs package/post-build settings: the current post-build script removes BlueZ, D-Bus, and related library files. Selecting a BlueZ package alone is insufficient. See the post-build removal rules.
For the available setup paths, see Wi-Fi and Bluetooth and Advanced Wi-Fi.
Peripherals
Feature |
Availability |
Notes |
|---|---|---|
GPIO and UART0 console |
🟢 Included |
GPIO character device and the UART0 console |
Optional UARTs |
🟡 Implemented |
UART1/2 routes and UART3 DMA; the supplied UART3 HIL cases use internal loopback |
I2C0/I2C1 |
🟡 Implemented |
Long-transfer batching exists |
GPSPI2/GPSPI3 host |
🟡 Implemented |
8-bit words; data-lane settings depend on the controller and selected device |
GPSPI target |
🟡 Implemented |
DMA transfers up to 4096 bytes |
I2S/TDM |
🟡 Implemented |
Playback/capture and configurable framing; supplied overlays consume external BCLK/WS |
SD/MMC |
🟡 Implemented |
Slot wiring and bus width selected by overlay |
Ethernet |
🟡 Implemented |
Requires matching external PHY configuration and wiring |
USB gadget |
🟡 Implemented |
The standard kernel includes ACM/ECM configfs support; select a function at runtime; outside the standard HIL suite |
USB host |
🟢 Included |
Host controller and storage support are selected by default |
AHB/AXI GDMA |
🟡 Implemented |
Both providers are built in and used by the corresponding peripheral drivers |
Timers, PWM, and pulse counter |
🟡 Implemented |
Timer 1 in each timer group is reserved for CPU idle |
Analog and sensor blocks |
🟡 Implemented |
ADC/DAC/touch/comparator through IIO; temperature through hwmon |
Watchdog, NVMEM, RNG, and crypto |
🟡 Implemented |
Integrated with their Linux subsystems |
TWAI/CAN |
🟡 Implemented |
SocketCAN binding and overlays exist |
RMT |
🔴 Absent |
No ESP32-S31 driver or device-tree node in the repository |
See Using peripherals for setup, Peripheral reference for API settings and transfer limits, and Modules and boards for default GPIO assignments. The overlay catalog lists the controller selections.
Testing
The project includes host tests and board/peer test programs. The HIL
usb-drive case covers host storage; it does not cover gadget functions or
all USB device classes. See HIL testing for
commands, fixture setup, and result collection.
Flash and persistent storage
The compact layout gives persist 2120 KiB and Linux/rootfs 6 MiB each, with no HIL scratch partition. Only matched slot-wise updates of the same layout preserve persist; back up externally before changing the layout.
NOR programming and JFFS2 failures can affect saved settings or startup.
When reporting a failure, include
the boot log, image identity and triggering operation, including any
esp32s31-flash: ROM ... failed or
S31 overlay: failed to mount persist as JFFS2 message.