S3 Lab ESP32-S3 emulator · Rust → WASM battery 120/0/0

On-device coverage

Every ESP32-S3 feature the project tracks, what the emulator models, and what is deliberately left out. “Validated” means a real arduino-cli sketch boots in the emulator and its serial output plus internal state are asserted by the battery.

CPU

FeatureStatusRemark
LX7 base ISAValidatedALU, loads/stores, branches, CALL0/J loops, windowed registers, exceptions, interrupts.
ee.* DSP/TIEValidated218/218 execute incl. ee_srs_accx; unmapped patterns trap loud (correct).
Single-precision FPUValidatedFull libgcc __divsf3 / sqrtf sequences bit-exact vs host f32.
Dual core + cross-core IRQValidatedPRID strapping, serialized stepping, cross-core yields; FreeRTOS SMP boots.

Connectivity

FeatureStatusRemark
Wi-Fi scanValidatedHost-completed scan at the firmware boundary; SSID/RSSI/chan/BSSID asserted.
Wi-Fi station connectValidatedAssociation + GOT_IP + status/IP/SSID/RSSI prints + disconnect leg.
Wi-Fi SoftAPValidatedsoftAP() init + STARTED bits, softAPIP 192.168.4.1, MAC, station count 0; no over-the-air peers (single node).
ESP-NOWValidatedInit/peer/send + in-firmware TXCB/RXCB via virtual second node (no RF; direct C-call delivery).
WiFi + BLE coexistenceValidatedSTA association + BLE GATT init/advertise concurrently in one image (`coex`): both reach DONE with no crash/WDT/RF conflict (both media virtual offline; no arbitration needed).
Live IP backhaul (L2 bridge)ValidatedEthernet bridge tap: board→host TX capture (`esp_netif_transmit` hook → pcap + gateway) + host→board RX injection (`esp_netif_receive` hook). `test_worker_net` gallery entry drives both live. TCP ingest on the Go gateway (127.0.0.1:5051) feeds the SLIRP/NAT stack (DHCP/DNS/ARP/IPv6-RA/UDP-forward).
Live IP backhaul (L3–L7 suites)PartialClient legs proven live 18/18 + DONE (`test_worker_l3`: DNS/NTP/UDP-echo/CoAP 2.05/HTTP 200/MQTT 1883/IPv6 RA+echo+UDP via gateway-local Go services) + pcap artifact; board-as-server (lwIP listen/accept) stays Partial — no live-netif path exists offline.
Bluetooth / BLEOut of scopeGATT server boots (`BLE DONE`), canned 9-step GATT proven offline, live runs panic-free with stable conn (first-ATT VHCI ACL sem timeout fixed with an ACL-scoped tap completion); live-central completion is harness-side Bumble link delivery, out of model scope. No radio; no over-the-air peers.

Serial and bus I/O

FeatureStatusRemark
UART0/1/2 + USB-Serial-JTAGValidatedTX/RX FIFOs, interrupts, RS485 echo, HW flow control, RX timeout; console merged in UI.
SPI master (GPSPI2/3)ValidatedUSR polling path, GDMA master DMA, slave + slave-DMA, quad hook, SDSPI mount.
I2C master/slaveValidatedFull FSM + NACK model; Wire driver verified silicon-true (empty bus reports “other”).
I2S audioValidatedTX/RX FIFOs, BCK clock gen, TDM, PDM, GDMA path, loopback; esp-idf driver path green.
TWAI / CANValidatedPeliCAN registers, self-test loopback, RX inject; esp-idf driver path green.

Timers, PWM, capture

FeatureStatusRemark
TIMG + WDT + RTC WDTValidated64-bit timers, alarm interrupts, MWDT stages incl. chip-reset reboot.
SYSTIMERValidatedUnit counters + OP snapshot handshake; backs millis/micros/delay.
MCPWM (groups 0/1)ValidatedTimers/operators/generators, capture, fault/trip, dead-time, carrier, sync chains.
LEDC PWM + fadeValidatedFractional divider, duty resolution, fade engine with DONE interrupt.
RMT TX/RXValidatedItem RAM, carrier modulation, RX capture + demodulation, loopback.
PCNT pulse counterValidatedEdge counting, gating, threshold interrupts via GPIO-matrix routing.
Sigma-DeltaValidatedPDM duty output on matrix signals 93–100.

Analog, touch, sensors

FeatureStatusRemark
SAR ADC (oneshot + digital)ValidatedAttenuation scaling, injected voltages exact; GDMA-IN path.
Temperature sensorValidatedTSENS DAC codes with the driver-fitted curve; TEMP_C fixture.
Touch controllerValidatedOneshot, approach counters, denoise, sleep latch; in-browser fixture.
BOD brown-outValidatedInterrupt + chip-reset paths, BOD_INJECT fixture.

Crypto and security

FeatureStatusRemark
SHA-1/224/256/384/512ValidatedGDMA-fed engine; known-answer digests via mbedTLS.
AES-ECB/CBC/XTS (+GCM via HW)ValidatedFIPS vectors + chaining via the real mbedTLS driver.
RSA / HMAC / DS / ECDSAValidatedMod-exp, key-block HMAC, signature verify, P-256 sign/verify.
eFuse + burnValidatedFactory MAC, field blobs, block burn with write-disable.
Flash encryption (XTS)ValidatedWhole-image XTS pipeline; hello boots fully encrypted.
Secure boot v2Gallery-absentSigned pipeline + fail-closed gate validated; needs a SECURE_BOOT_EN burn the browser cannot provide, so no gallery entry.

Storage and USB

FeatureStatusRemark
SDMMC + FAT + eMMCValidatedSimulated card, IDMAC, RPMB, full FAT mount; IDF-driver mount green.
SDSPI (SD over SPI)ValidatedFull FAT mount over GPSPI2; in-browser card attach.
USB-Serial-JTAGValidatedEvery sketch console flows through it.
USB-OTG host + deviceValidatedHost enumeration of the simulated device; EP0/EP1 loopback; TinyUSB HID boot + full 7-transfer enum.
USB device vs external hostOut of scopeNeeds a USB-host counterparty; no offline harness possible.

Memory, power, misc

FeatureStatusRemark
PSRAM + cache MMUValidatedQSPI/OPI init, up to 16 MB mapped, malloc pattern tests.
Deep / light sleepValidatedTimer/EXT0/EXT1/ULP/touch/GPIO/UART wakeups, resume + reboot paths.
ULP-RISC-VValidatedrv32imc core runs from RTC slow memory, halts on ebreak.
GPIO / RTC_IO / dedicated GPIOValidatedMatrix routing, interrupts, hold across sleep, TIE latch bundles.
GDMA / LCD_CAM / UHCIValidatedDescriptor walks, camera capture, UART-DMA bridge, SLIP framing.
MicroPython REPLValidatedStock v1.29.0 boots to >>>, runs Python (ints, floats, lists) via UART0; in-browser preset + node harness.
OTA updatesValidatedBoot-slot selection + end-to-end reflash into ota_1.
RNGValidatedSeeded stream; RNG_SEED varies it across runs.