Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

Step 12 of 56

The examples: all 96 of them

Most need no wiring, most tell you PASS or FAIL, and each one is the fastest way to find out whether a peripheral works on your board before you write a line against it.

How to use them

Every example builds and runs the same way, and the short name is enough:

./x list                       # names, profiles, directories
./x run gpio0_blink            # build + flash + monitor
./x run i2c_loopback -p /dev/ttyACM0

Run the self-test before writing code. When a driver page here says a peripheral works, that is a claim about the authors' board. The matching example is how you turn it into a claim about yours — and most need no external wiring at all, using internal loopback or a pad the chip samples itself.

They are also meant to be read. Each opens with a header saying what it demonstrates, what the console should print, and what hardware it needs; magic numbers are named and the reasoning is in the code. examples/STYLE.md records the bar, with esp32s3_gpio0_blink and esp32s3_gdma_copy as the models.

Mind the profile column. An example built for embedded will not build under light-tasking — the RAII driver handles need finalization (step 8). That is the first thing to check when a copied example fails to compile.

The catalogue

Generated from ./x list --json and the examples' own headers, so it cannot drift from what the repository actually contains. The last column links to the step that explains the thing being demonstrated.

ExampleProfileWhat it showsStep
adc_readembeddedAda SAR ADC one-shot self-test25
aes_gcm_katembeddedAES-GCM AEAD as a known-answer test (KAT) on the ESP32-S3: authenticated encrypt + decrypt for AES-128 and AES-256, driving the hardware AES block with software GHASH/CTR. Encrypt must reproduce the expected ciphertext and tag; decrypt must verify the tag and recover the original plaintext27
b612embeddedB612 anti-aliased font on an ST7789 display49
ch422gembeddedCH422G I2C I/O-expander driver demo34
cryptoembeddedAda hardware-crypto self-test27
delay_testembedded55
dns_secureembeddedOne name, four DNS transports: UDP, TCP, DoT and DoH, over the W550041
embeddedembeddedembedded runtime profile demo08
es8311embeddedES8311 audio codec -- full-duplex 440 Hz loopback31
exceptionsembeddedAda exception demonstration (embedded profile)08
ext4embeddedAda ext4-on-SD self-test47
ext4_flashembeddedA real ext4 filesystem on wear-leveled SPI NOR flash47
ext4_mkfsembeddedFormat a blank SPI NOR flash to ext4 ON-DEVICE, then use it (ESP32-S3)47
ext4_sdmmcembeddedWhat: mount a real ext4 (or ext2/3) SD card with the pure-Ada filesystem (ESP32S3.Ext4) over the SDMMC block driver, then list the root directory and read /hello.txt28
ext4_writeembeddedext4 WRITE battery for the pure-Ada filesystem47
framembeddedI2C FRAM driver demo36
ftpembeddedAn FTP *client* over the WIZnet W5500 Ethernet controller, driven through the portable FTP_Client package (which is itself written against the GNAT.Sockets facade)45
ftp_inetembeddedA REAL-WORLD FTP client run over the W5500: it logs in anonymously to the public GNU FTP server (ftp.gnu.org), prints a file's SIZE, downloads it (RETR, counting bytes and comparing to SIZE), lists the root (NLST), and quits45
ftp_serverembeddedAn anonymous FTP *server* on the ESP32-S3, exposing the ext4-on-W25Q-flash filesystem over the network: a desktop FTP client (FileZilla, the `ftp` CLI, a browser, Python ftplib) can browse, download, upload, delete and mkdir on the board's flash45
full_intrfullfull-profile interrupt-attach test (`ESP32S3_RTS_PROFILE=full`)08
full_taskingfullFull Ada tasking -- the constructs the Jorvik runtime profile forbids, here running over the BB kernel on core 008
gdma_copyembeddedAda GDMA self-test17
gpio0_blinklight-taskinga bare-metal Ada peripheral driver (ESP32-S3, no FreeRTOS)13
gpsembeddedThe reusable HAL GPS driver (ESP32S3.GPS): a task-driven UART NMEA receiver38
gps_displayembeddedMulti-sensor dashboard on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)38
gt911embeddedGT911 capacitive-touch driver demo30
hc595embeddedA string of 74HC595 shift registers driven over SPI: MOSI->SER, SCLK->SRCLK, a GPIO RCLK latch and a GPIO /OE. It walks a single high output across the whole string ("chase"), so you can watch it on LEDs or a scope and confirm the wiring, the chip count, and the bit/chip ordering34
heaptestembeddedOn-target malloc/free stress of the Ada TLSF allocator (ESP32-S3)09
heartbeatlight-tasking05
i2c_loopbackembeddedAn Ada I2C MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.I2C) with NO external wiring and no device on the bus14
i2s_loopbackembeddedAda I2S self-test18
i2s_pdmembeddedAda I2S PDM microphone capture demo18
intr_levelsembedded55
lcdembedded19
lcd_i8080embeddedAda LCD (i80 8-bit parallel) self-test (no IDF)19
ledc_pwmembeddedAda LEDC PWM self-test22
m24c64embeddedM24C64 I2C EEPROM driver demo36
macembeddedReading the factory MAC address programmed into the ESP32-S3's eFuse, and the per-interface MACs the chip derives from it (Espressif allocates each part a block of four)29
mcpwm_pwmembeddedAda MCPWM PWM-output self-test23
modbus_masterembeddedA Modbus TCP *master* on the ESP32-S3 over the W5500: it connects to a slave on the LAN, reads holding registers and writes one back, reporting each Status44
modbus_slaveembeddedA Modbus TCP *slave* on the ESP32-S3 over the W5500: it serves holding registers and coils that live in the application's own storage (Slave_Dev) -- the Modbus.Slave library keeps no register tables44
multinicembeddedMultiple network interfaces on one board: TWO W5500s, the routing table that chooses between them, and interface pinning40
p256_katembeddedKnown-answer test for the pure-Ada P-256 (secp256r1) ECDSA + ECDH (P256)27
pcf85063aembeddedPCF85063A real-time clock33
pcnt_countembeddedAda PCNT self-test24
psramlight-taskingExternal PSRAM from Ada (ESP32-S3, no FreeRTOS, no ESP-IDF)09
qmi8658cembeddedQMI8658C 6-axis IMU driver demo (bare-metal ESP32-S3, no FreeRTOS, no IDF)32
rendezvousfullAda task RENDEZVOUS on the bare-metal dual-core ESP32-S3 -- synchronous task-to-task message passing (entries / `accept` / entry calls with `out` parameters): the full tasking model that lives beyond Jorvik08
rmt_loopbackembeddedAda RMT self-test21
rsa_katembeddedESP32-S3 RSA accelerator known-answer test (KAT)27
rtc_sleepembeddedAda RTC deep-sleep + retained-memory self-test26
rtcio_holdembeddedAda RTC-IO pad-hold self-test26
sd_spiembeddedSD card over SPI28
sdm_outputembeddedAda SDM self-test22
sdmmcembeddedAda native SD/MMC-host self-test28
sdmmc_ch422gembeddedReading an SD card on a board where the card's DAT3/CD line is wired not to the SoC but to a CH422G I2C expander pin, so two reusable HAL drivers work together: * ESP32S3.CH422G drives the card's DAT3/CD high via its IO4 pin -- needed so the card enters/stays in SD mode34
shared_l2embeddedTwo drivers, one interrupt -- ESP32S3.Shared_L255
sht41embeddedSHT41 temperature/humidity sensor driver demo32
simdembeddedThe ESP32S3.SIMD library (libs/esp32s3_simd) running on real silicon: a few representative vector kernels whose inner loops are GNAT inline assembly over the Xtensa LX7 PIE SIMD unit (the q-registers)51
smplight-taskingDual-core SMP cross-core mailbox (no FreeRTOS)08
sparknacl_katembeddedSPARKNaCl known-answer tests27
spi_loopbackembeddedAn Ada SPI MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.SPI) with NO external wiring15
st7789embeddedST7789 SPI display driver demo30
st7789_cubeembeddedBouncing solid-colour 3D cube on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)30
stack_usagelight-taskingRuntime stack high-water-mark measurement (ESP32S3.Stack_Usage): paint the environment-task stack with a sentinel, run a workload that drives the stack to a known depth, then report the peak bytes actually used52
stressfullRTS stress suite: a randomized tiny-delay storm (stress_storm) plus cross-core wakeup ping-pong pairs (stress_pingpong), watched by an on-board stall monitor (stress_monitor)55
tca9555embeddedThe reusable HAL driver ESP32S3.TCA9555 -- a 16-bit I2C GPIO expander -- driven against a real part at 0x2034
timer_countembeddedAda general-purpose timer self-test (no IDF)24
tls_helloembeddedPure-Ada TLS 1.3 client over the W5500 (Ethernet)42
tls_resumeembeddedTLS 1.3 session resumption (PSK) over the W5500 (Ethernet)42
tls_weatherembeddedReal-world HTTPS over pure-Ada TLS 1.3: fetch a live weather forecast from api.open-meteo.com, end to end with no external C TLS library42
tlv2556embeddedTI TLV2556 12-bit serial ADC bring-up37
touch_readembeddedAda capacitive-touch read self-test25
twai_loopbackembeddedAda TWAI (CAN) self-test20
tx1812embeddedDrive a string of TX1812 addressable RGB LEDs on IO48 via the RMT peripheral35
uart_loopbackembeddedAda UART self-test16
w25qembeddedWinbond W25Q256FV SPI NOR flash bring-up36
w5500embeddedWIZnet W5500 TCP echo server39
w5500_controlembeddedWIZnet W5500 control registers39
w5500_dhcpembeddedDHCP client on the W5500 with automatic lease maintenance39
w5500_dnsembeddedA DNS name lookup over the W5500 Ethernet chip, using the portable DNS_Client module39
w5500_httpembeddedAn HTTP GET *client* over the WIZnet W5500 Ethernet controller, driven through the GNAT.Sockets facade (a TCP stream socket)39
w5500_lowpowerembeddedWIZnet W5500 PHY power-down (low-power)39
w5500_ntpembeddedAn SNTP / NTP time client over a Wiznet W5500 Ethernet module39
w5500_weatherembeddedWeather forecast for a latitude / longitude, from Open-Meteo (open-meteo.com)39
wifi_deepsleepembeddedESP32-S3: associate to Wi-Fi, then deep-sleep -- the RTC power-down IS the radio power-down43
wifi_dnsembeddedESP32-S3 Wi-Fi DNS over a pure-Ada software IP stack43
wifi_httpembeddedESP32-S3 Wi-Fi HTTP fetch over a pure-Ada software TCP stack43
wifi_scanembeddedESP32-S3 Wi-Fi scan + WPA2 connect, end to end on libs/esp32s3_wifi43
wifi_sniffembeddedESP32-S3 Wi-Fi promiscuous sniffer -- a WPA2 ground-truth tool43
wifi_tlsembeddedESP32-S3 Wi-Fi HTTPS: pure-Ada TLS 1.3 over the software TCP stack43
wlembeddedDynamic wear-leveling FTL over the W25Q SPI NOR flash46
x509_chainembeddedX.509 certificate-chain validation42
x509_katembeddedX.509 DER parser known-answer test (X509.Parse)42
x509_policyembeddedX.509 leaf-certificate policy checks42
x509_verifyembeddedEnd-to-end X.509 certificate signature verification as a known-answer test42
The examples: all 96 of them · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

Step 12 of 56

The examples: all 96 of them

Most need no wiring, most tell you PASS or FAIL, and each one is the fastest way to find out whether a peripheral works on your board before you write a line against it.

How to use them

Every example builds and runs the same way, and the short name is enough:

./x list                       # names, profiles, directories
./x run gpio0_blink            # build + flash + monitor
./x run i2c_loopback -p /dev/ttyACM0

Run the self-test before writing code. When a driver page here says a peripheral works, that is a claim about the authors' board. The matching example is how you turn it into a claim about yours — and most need no external wiring at all, using internal loopback or a pad the chip samples itself.

They are also meant to be read. Each opens with a header saying what it demonstrates, what the console should print, and what hardware it needs; magic numbers are named and the reasoning is in the code. examples/STYLE.md records the bar, with esp32s3_gpio0_blink and esp32s3_gdma_copy as the models.

Mind the profile column. An example built for embedded will not build under light-tasking — the RAII driver handles need finalization (step 8). That is the first thing to check when a copied example fails to compile.

The catalogue

Generated from ./x list --json and the examples' own headers, so it cannot drift from what the repository actually contains. The last column links to the step that explains the thing being demonstrated.

ExampleProfileWhat it showsStep
adc_readembeddedAda SAR ADC one-shot self-test25
aes_gcm_katembeddedAES-GCM AEAD as a known-answer test (KAT) on the ESP32-S3: authenticated encrypt + decrypt for AES-128 and AES-256, driving the hardware AES block with software GHASH/CTR. Encrypt must reproduce the expected ciphertext and tag; decrypt must verify the tag and recover the original plaintext27
b612embeddedB612 anti-aliased font on an ST7789 display49
ch422gembeddedCH422G I2C I/O-expander driver demo34
cryptoembeddedAda hardware-crypto self-test27
delay_testembedded55
dns_secureembeddedOne name, four DNS transports: UDP, TCP, DoT and DoH, over the W550041
embeddedembeddedembedded runtime profile demo08
es8311embeddedES8311 audio codec -- full-duplex 440 Hz loopback31
exceptionsembeddedAda exception demonstration (embedded profile)08
ext4embeddedAda ext4-on-SD self-test47
ext4_flashembeddedA real ext4 filesystem on wear-leveled SPI NOR flash47
ext4_mkfsembeddedFormat a blank SPI NOR flash to ext4 ON-DEVICE, then use it (ESP32-S3)47
ext4_sdmmcembeddedWhat: mount a real ext4 (or ext2/3) SD card with the pure-Ada filesystem (ESP32S3.Ext4) over the SDMMC block driver, then list the root directory and read /hello.txt28
ext4_writeembeddedext4 WRITE battery for the pure-Ada filesystem47
framembeddedI2C FRAM driver demo36
ftpembeddedAn FTP *client* over the WIZnet W5500 Ethernet controller, driven through the portable FTP_Client package (which is itself written against the GNAT.Sockets facade)45
ftp_inetembeddedA REAL-WORLD FTP client run over the W5500: it logs in anonymously to the public GNU FTP server (ftp.gnu.org), prints a file's SIZE, downloads it (RETR, counting bytes and comparing to SIZE), lists the root (NLST), and quits45
ftp_serverembeddedAn anonymous FTP *server* on the ESP32-S3, exposing the ext4-on-W25Q-flash filesystem over the network: a desktop FTP client (FileZilla, the `ftp` CLI, a browser, Python ftplib) can browse, download, upload, delete and mkdir on the board's flash45
full_intrfullfull-profile interrupt-attach test (`ESP32S3_RTS_PROFILE=full`)08
full_taskingfullFull Ada tasking -- the constructs the Jorvik runtime profile forbids, here running over the BB kernel on core 008
gdma_copyembeddedAda GDMA self-test17
gpio0_blinklight-taskinga bare-metal Ada peripheral driver (ESP32-S3, no FreeRTOS)13
gpsembeddedThe reusable HAL GPS driver (ESP32S3.GPS): a task-driven UART NMEA receiver38
gps_displayembeddedMulti-sensor dashboard on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)38
gt911embeddedGT911 capacitive-touch driver demo30
hc595embeddedA string of 74HC595 shift registers driven over SPI: MOSI->SER, SCLK->SRCLK, a GPIO RCLK latch and a GPIO /OE. It walks a single high output across the whole string ("chase"), so you can watch it on LEDs or a scope and confirm the wiring, the chip count, and the bit/chip ordering34
heaptestembeddedOn-target malloc/free stress of the Ada TLSF allocator (ESP32-S3)09
heartbeatlight-tasking05
i2c_loopbackembeddedAn Ada I2C MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.I2C) with NO external wiring and no device on the bus14
i2s_loopbackembeddedAda I2S self-test18
i2s_pdmembeddedAda I2S PDM microphone capture demo18
intr_levelsembedded55
lcdembedded19
lcd_i8080embeddedAda LCD (i80 8-bit parallel) self-test (no IDF)19
ledc_pwmembeddedAda LEDC PWM self-test22
m24c64embeddedM24C64 I2C EEPROM driver demo36
macembeddedReading the factory MAC address programmed into the ESP32-S3's eFuse, and the per-interface MACs the chip derives from it (Espressif allocates each part a block of four)29
mcpwm_pwmembeddedAda MCPWM PWM-output self-test23
modbus_masterembeddedA Modbus TCP *master* on the ESP32-S3 over the W5500: it connects to a slave on the LAN, reads holding registers and writes one back, reporting each Status44
modbus_slaveembeddedA Modbus TCP *slave* on the ESP32-S3 over the W5500: it serves holding registers and coils that live in the application's own storage (Slave_Dev) -- the Modbus.Slave library keeps no register tables44
multinicembeddedMultiple network interfaces on one board: TWO W5500s, the routing table that chooses between them, and interface pinning40
p256_katembeddedKnown-answer test for the pure-Ada P-256 (secp256r1) ECDSA + ECDH (P256)27
pcf85063aembeddedPCF85063A real-time clock33
pcnt_countembeddedAda PCNT self-test24
psramlight-taskingExternal PSRAM from Ada (ESP32-S3, no FreeRTOS, no ESP-IDF)09
qmi8658cembeddedQMI8658C 6-axis IMU driver demo (bare-metal ESP32-S3, no FreeRTOS, no IDF)32
rendezvousfullAda task RENDEZVOUS on the bare-metal dual-core ESP32-S3 -- synchronous task-to-task message passing (entries / `accept` / entry calls with `out` parameters): the full tasking model that lives beyond Jorvik08
rmt_loopbackembeddedAda RMT self-test21
rsa_katembeddedESP32-S3 RSA accelerator known-answer test (KAT)27
rtc_sleepembeddedAda RTC deep-sleep + retained-memory self-test26
rtcio_holdembeddedAda RTC-IO pad-hold self-test26
sd_spiembeddedSD card over SPI28
sdm_outputembeddedAda SDM self-test22
sdmmcembeddedAda native SD/MMC-host self-test28
sdmmc_ch422gembeddedReading an SD card on a board where the card's DAT3/CD line is wired not to the SoC but to a CH422G I2C expander pin, so two reusable HAL drivers work together: * ESP32S3.CH422G drives the card's DAT3/CD high via its IO4 pin -- needed so the card enters/stays in SD mode34
shared_l2embeddedTwo drivers, one interrupt -- ESP32S3.Shared_L255
sht41embeddedSHT41 temperature/humidity sensor driver demo32
simdembeddedThe ESP32S3.SIMD library (libs/esp32s3_simd) running on real silicon: a few representative vector kernels whose inner loops are GNAT inline assembly over the Xtensa LX7 PIE SIMD unit (the q-registers)51
smplight-taskingDual-core SMP cross-core mailbox (no FreeRTOS)08
sparknacl_katembeddedSPARKNaCl known-answer tests27
spi_loopbackembeddedAn Ada SPI MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.SPI) with NO external wiring15
st7789embeddedST7789 SPI display driver demo30
st7789_cubeembeddedBouncing solid-colour 3D cube on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)30
stack_usagelight-taskingRuntime stack high-water-mark measurement (ESP32S3.Stack_Usage): paint the environment-task stack with a sentinel, run a workload that drives the stack to a known depth, then report the peak bytes actually used52
stressfullRTS stress suite: a randomized tiny-delay storm (stress_storm) plus cross-core wakeup ping-pong pairs (stress_pingpong), watched by an on-board stall monitor (stress_monitor)55
tca9555embeddedThe reusable HAL driver ESP32S3.TCA9555 -- a 16-bit I2C GPIO expander -- driven against a real part at 0x2034
timer_countembeddedAda general-purpose timer self-test (no IDF)24
tls_helloembeddedPure-Ada TLS 1.3 client over the W5500 (Ethernet)42
tls_resumeembeddedTLS 1.3 session resumption (PSK) over the W5500 (Ethernet)42
tls_weatherembeddedReal-world HTTPS over pure-Ada TLS 1.3: fetch a live weather forecast from api.open-meteo.com, end to end with no external C TLS library42
tlv2556embeddedTI TLV2556 12-bit serial ADC bring-up37
touch_readembeddedAda capacitive-touch read self-test25
twai_loopbackembeddedAda TWAI (CAN) self-test20
tx1812embeddedDrive a string of TX1812 addressable RGB LEDs on IO48 via the RMT peripheral35
uart_loopbackembeddedAda UART self-test16
w25qembeddedWinbond W25Q256FV SPI NOR flash bring-up36
w5500embeddedWIZnet W5500 TCP echo server39
w5500_controlembeddedWIZnet W5500 control registers39
w5500_dhcpembeddedDHCP client on the W5500 with automatic lease maintenance39
w5500_dnsembeddedA DNS name lookup over the W5500 Ethernet chip, using the portable DNS_Client module39
w5500_httpembeddedAn HTTP GET *client* over the WIZnet W5500 Ethernet controller, driven through the GNAT.Sockets facade (a TCP stream socket)39
w5500_lowpowerembeddedWIZnet W5500 PHY power-down (low-power)39
w5500_ntpembeddedAn SNTP / NTP time client over a Wiznet W5500 Ethernet module39
w5500_weatherembeddedWeather forecast for a latitude / longitude, from Open-Meteo (open-meteo.com)39
wifi_deepsleepembeddedESP32-S3: associate to Wi-Fi, then deep-sleep -- the RTC power-down IS the radio power-down43
wifi_dnsembeddedESP32-S3 Wi-Fi DNS over a pure-Ada software IP stack43
wifi_httpembeddedESP32-S3 Wi-Fi HTTP fetch over a pure-Ada software TCP stack43
wifi_scanembeddedESP32-S3 Wi-Fi scan + WPA2 connect, end to end on libs/esp32s3_wifi43
wifi_sniffembeddedESP32-S3 Wi-Fi promiscuous sniffer -- a WPA2 ground-truth tool43
wifi_tlsembeddedESP32-S3 Wi-Fi HTTPS: pure-Ada TLS 1.3 over the software TCP stack43
wlembeddedDynamic wear-leveling FTL over the W25Q SPI NOR flash46
x509_chainembeddedX.509 certificate-chain validation42
x509_katembeddedX.509 DER parser known-answer test (X509.Parse)42
x509_policyembeddedX.509 leaf-certificate policy checks42
x509_verifyembeddedEnd-to-end X.509 certificate signature verification as a known-answer test42
The examples: all 96 of them · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

Step 12 of 56

The examples: all 96 of them

Most need no wiring, most tell you PASS or FAIL, and each one is the fastest way to find out whether a peripheral works on your board before you write a line against it.

How to use them

Every example builds and runs the same way, and the short name is enough:

./x list                       # names, profiles, directories
./x run gpio0_blink            # build + flash + monitor
./x run i2c_loopback -p /dev/ttyACM0

Run the self-test before writing code. When a driver page here says a peripheral works, that is a claim about the authors' board. The matching example is how you turn it into a claim about yours — and most need no external wiring at all, using internal loopback or a pad the chip samples itself.

They are also meant to be read. Each opens with a header saying what it demonstrates, what the console should print, and what hardware it needs; magic numbers are named and the reasoning is in the code. examples/STYLE.md records the bar, with esp32s3_gpio0_blink and esp32s3_gdma_copy as the models.

Mind the profile column. An example built for embedded will not build under light-tasking — the RAII driver handles need finalization (step 8). That is the first thing to check when a copied example fails to compile.

The catalogue

Generated from ./x list --json and the examples' own headers, so it cannot drift from what the repository actually contains. The last column links to the step that explains the thing being demonstrated.

ExampleProfileWhat it showsStep
adc_readembeddedAda SAR ADC one-shot self-test25
aes_gcm_katembeddedAES-GCM AEAD as a known-answer test (KAT) on the ESP32-S3: authenticated encrypt + decrypt for AES-128 and AES-256, driving the hardware AES block with software GHASH/CTR. Encrypt must reproduce the expected ciphertext and tag; decrypt must verify the tag and recover the original plaintext27
b612embeddedB612 anti-aliased font on an ST7789 display49
ch422gembeddedCH422G I2C I/O-expander driver demo34
cryptoembeddedAda hardware-crypto self-test27
delay_testembedded55
dns_secureembeddedOne name, four DNS transports: UDP, TCP, DoT and DoH, over the W550041
embeddedembeddedembedded runtime profile demo08
es8311embeddedES8311 audio codec -- full-duplex 440 Hz loopback31
exceptionsembeddedAda exception demonstration (embedded profile)08
ext4embeddedAda ext4-on-SD self-test47
ext4_flashembeddedA real ext4 filesystem on wear-leveled SPI NOR flash47
ext4_mkfsembeddedFormat a blank SPI NOR flash to ext4 ON-DEVICE, then use it (ESP32-S3)47
ext4_sdmmcembeddedWhat: mount a real ext4 (or ext2/3) SD card with the pure-Ada filesystem (ESP32S3.Ext4) over the SDMMC block driver, then list the root directory and read /hello.txt28
ext4_writeembeddedext4 WRITE battery for the pure-Ada filesystem47
framembeddedI2C FRAM driver demo36
ftpembeddedAn FTP *client* over the WIZnet W5500 Ethernet controller, driven through the portable FTP_Client package (which is itself written against the GNAT.Sockets facade)45
ftp_inetembeddedA REAL-WORLD FTP client run over the W5500: it logs in anonymously to the public GNU FTP server (ftp.gnu.org), prints a file's SIZE, downloads it (RETR, counting bytes and comparing to SIZE), lists the root (NLST), and quits45
ftp_serverembeddedAn anonymous FTP *server* on the ESP32-S3, exposing the ext4-on-W25Q-flash filesystem over the network: a desktop FTP client (FileZilla, the `ftp` CLI, a browser, Python ftplib) can browse, download, upload, delete and mkdir on the board's flash45
full_intrfullfull-profile interrupt-attach test (`ESP32S3_RTS_PROFILE=full`)08
full_taskingfullFull Ada tasking -- the constructs the Jorvik runtime profile forbids, here running over the BB kernel on core 008
gdma_copyembeddedAda GDMA self-test17
gpio0_blinklight-taskinga bare-metal Ada peripheral driver (ESP32-S3, no FreeRTOS)13
gpsembeddedThe reusable HAL GPS driver (ESP32S3.GPS): a task-driven UART NMEA receiver38
gps_displayembeddedMulti-sensor dashboard on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)38
gt911embeddedGT911 capacitive-touch driver demo30
hc595embeddedA string of 74HC595 shift registers driven over SPI: MOSI->SER, SCLK->SRCLK, a GPIO RCLK latch and a GPIO /OE. It walks a single high output across the whole string ("chase"), so you can watch it on LEDs or a scope and confirm the wiring, the chip count, and the bit/chip ordering34
heaptestembeddedOn-target malloc/free stress of the Ada TLSF allocator (ESP32-S3)09
heartbeatlight-tasking05
i2c_loopbackembeddedAn Ada I2C MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.I2C) with NO external wiring and no device on the bus14
i2s_loopbackembeddedAda I2S self-test18
i2s_pdmembeddedAda I2S PDM microphone capture demo18
intr_levelsembedded55
lcdembedded19
lcd_i8080embeddedAda LCD (i80 8-bit parallel) self-test (no IDF)19
ledc_pwmembeddedAda LEDC PWM self-test22
m24c64embeddedM24C64 I2C EEPROM driver demo36
macembeddedReading the factory MAC address programmed into the ESP32-S3's eFuse, and the per-interface MACs the chip derives from it (Espressif allocates each part a block of four)29
mcpwm_pwmembeddedAda MCPWM PWM-output self-test23
modbus_masterembeddedA Modbus TCP *master* on the ESP32-S3 over the W5500: it connects to a slave on the LAN, reads holding registers and writes one back, reporting each Status44
modbus_slaveembeddedA Modbus TCP *slave* on the ESP32-S3 over the W5500: it serves holding registers and coils that live in the application's own storage (Slave_Dev) -- the Modbus.Slave library keeps no register tables44
multinicembeddedMultiple network interfaces on one board: TWO W5500s, the routing table that chooses between them, and interface pinning40
p256_katembeddedKnown-answer test for the pure-Ada P-256 (secp256r1) ECDSA + ECDH (P256)27
pcf85063aembeddedPCF85063A real-time clock33
pcnt_countembeddedAda PCNT self-test24
psramlight-taskingExternal PSRAM from Ada (ESP32-S3, no FreeRTOS, no ESP-IDF)09
qmi8658cembeddedQMI8658C 6-axis IMU driver demo (bare-metal ESP32-S3, no FreeRTOS, no IDF)32
rendezvousfullAda task RENDEZVOUS on the bare-metal dual-core ESP32-S3 -- synchronous task-to-task message passing (entries / `accept` / entry calls with `out` parameters): the full tasking model that lives beyond Jorvik08
rmt_loopbackembeddedAda RMT self-test21
rsa_katembeddedESP32-S3 RSA accelerator known-answer test (KAT)27
rtc_sleepembeddedAda RTC deep-sleep + retained-memory self-test26
rtcio_holdembeddedAda RTC-IO pad-hold self-test26
sd_spiembeddedSD card over SPI28
sdm_outputembeddedAda SDM self-test22
sdmmcembeddedAda native SD/MMC-host self-test28
sdmmc_ch422gembeddedReading an SD card on a board where the card's DAT3/CD line is wired not to the SoC but to a CH422G I2C expander pin, so two reusable HAL drivers work together: * ESP32S3.CH422G drives the card's DAT3/CD high via its IO4 pin -- needed so the card enters/stays in SD mode34
shared_l2embeddedTwo drivers, one interrupt -- ESP32S3.Shared_L255
sht41embeddedSHT41 temperature/humidity sensor driver demo32
simdembeddedThe ESP32S3.SIMD library (libs/esp32s3_simd) running on real silicon: a few representative vector kernels whose inner loops are GNAT inline assembly over the Xtensa LX7 PIE SIMD unit (the q-registers)51
smplight-taskingDual-core SMP cross-core mailbox (no FreeRTOS)08
sparknacl_katembeddedSPARKNaCl known-answer tests27
spi_loopbackembeddedAn Ada SPI MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.SPI) with NO external wiring15
st7789embeddedST7789 SPI display driver demo30
st7789_cubeembeddedBouncing solid-colour 3D cube on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)30
stack_usagelight-taskingRuntime stack high-water-mark measurement (ESP32S3.Stack_Usage): paint the environment-task stack with a sentinel, run a workload that drives the stack to a known depth, then report the peak bytes actually used52
stressfullRTS stress suite: a randomized tiny-delay storm (stress_storm) plus cross-core wakeup ping-pong pairs (stress_pingpong), watched by an on-board stall monitor (stress_monitor)55
tca9555embeddedThe reusable HAL driver ESP32S3.TCA9555 -- a 16-bit I2C GPIO expander -- driven against a real part at 0x2034
timer_countembeddedAda general-purpose timer self-test (no IDF)24
tls_helloembeddedPure-Ada TLS 1.3 client over the W5500 (Ethernet)42
tls_resumeembeddedTLS 1.3 session resumption (PSK) over the W5500 (Ethernet)42
tls_weatherembeddedReal-world HTTPS over pure-Ada TLS 1.3: fetch a live weather forecast from api.open-meteo.com, end to end with no external C TLS library42
tlv2556embeddedTI TLV2556 12-bit serial ADC bring-up37
touch_readembeddedAda capacitive-touch read self-test25
twai_loopbackembeddedAda TWAI (CAN) self-test20
tx1812embeddedDrive a string of TX1812 addressable RGB LEDs on IO48 via the RMT peripheral35
uart_loopbackembeddedAda UART self-test16
w25qembeddedWinbond W25Q256FV SPI NOR flash bring-up36
w5500embeddedWIZnet W5500 TCP echo server39
w5500_controlembeddedWIZnet W5500 control registers39
w5500_dhcpembeddedDHCP client on the W5500 with automatic lease maintenance39
w5500_dnsembeddedA DNS name lookup over the W5500 Ethernet chip, using the portable DNS_Client module39
w5500_httpembeddedAn HTTP GET *client* over the WIZnet W5500 Ethernet controller, driven through the GNAT.Sockets facade (a TCP stream socket)39
w5500_lowpowerembeddedWIZnet W5500 PHY power-down (low-power)39
w5500_ntpembeddedAn SNTP / NTP time client over a Wiznet W5500 Ethernet module39
w5500_weatherembeddedWeather forecast for a latitude / longitude, from Open-Meteo (open-meteo.com)39
wifi_deepsleepembeddedESP32-S3: associate to Wi-Fi, then deep-sleep -- the RTC power-down IS the radio power-down43
wifi_dnsembeddedESP32-S3 Wi-Fi DNS over a pure-Ada software IP stack43
wifi_httpembeddedESP32-S3 Wi-Fi HTTP fetch over a pure-Ada software TCP stack43
wifi_scanembeddedESP32-S3 Wi-Fi scan + WPA2 connect, end to end on libs/esp32s3_wifi43
wifi_sniffembeddedESP32-S3 Wi-Fi promiscuous sniffer -- a WPA2 ground-truth tool43
wifi_tlsembeddedESP32-S3 Wi-Fi HTTPS: pure-Ada TLS 1.3 over the software TCP stack43
wlembeddedDynamic wear-leveling FTL over the W25Q SPI NOR flash46
x509_chainembeddedX.509 certificate-chain validation42
x509_katembeddedX.509 DER parser known-answer test (X509.Parse)42
x509_policyembeddedX.509 leaf-certificate policy checks42
x509_verifyembeddedEnd-to-end X.509 certificate signature verification as a known-answer test42
The examples: all 96 of them · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

Step 12 of 56

The examples: all 96 of them

Most need no wiring, most tell you PASS or FAIL, and each one is the fastest way to find out whether a peripheral works on your board before you write a line against it.

How to use them

Every example builds and runs the same way, and the short name is enough:

./x list                       # names, profiles, directories
./x run gpio0_blink            # build + flash + monitor
./x run i2c_loopback -p /dev/ttyACM0

Run the self-test before writing code. When a driver page here says a peripheral works, that is a claim about the authors' board. The matching example is how you turn it into a claim about yours — and most need no external wiring at all, using internal loopback or a pad the chip samples itself.

They are also meant to be read. Each opens with a header saying what it demonstrates, what the console should print, and what hardware it needs; magic numbers are named and the reasoning is in the code. examples/STYLE.md records the bar, with esp32s3_gpio0_blink and esp32s3_gdma_copy as the models.

Mind the profile column. An example built for embedded will not build under light-tasking — the RAII driver handles need finalization (step 8). That is the first thing to check when a copied example fails to compile.

The catalogue

Generated from ./x list --json and the examples' own headers, so it cannot drift from what the repository actually contains. The last column links to the step that explains the thing being demonstrated.

ExampleProfileWhat it showsStep
adc_readembeddedAda SAR ADC one-shot self-test25
aes_gcm_katembeddedAES-GCM AEAD as a known-answer test (KAT) on the ESP32-S3: authenticated encrypt + decrypt for AES-128 and AES-256, driving the hardware AES block with software GHASH/CTR. Encrypt must reproduce the expected ciphertext and tag; decrypt must verify the tag and recover the original plaintext27
b612embeddedB612 anti-aliased font on an ST7789 display49
ch422gembeddedCH422G I2C I/O-expander driver demo34
cryptoembeddedAda hardware-crypto self-test27
delay_testembedded55
dns_secureembeddedOne name, four DNS transports: UDP, TCP, DoT and DoH, over the W550041
embeddedembeddedembedded runtime profile demo08
es8311embeddedES8311 audio codec -- full-duplex 440 Hz loopback31
exceptionsembeddedAda exception demonstration (embedded profile)08
ext4embeddedAda ext4-on-SD self-test47
ext4_flashembeddedA real ext4 filesystem on wear-leveled SPI NOR flash47
ext4_mkfsembeddedFormat a blank SPI NOR flash to ext4 ON-DEVICE, then use it (ESP32-S3)47
ext4_sdmmcembeddedWhat: mount a real ext4 (or ext2/3) SD card with the pure-Ada filesystem (ESP32S3.Ext4) over the SDMMC block driver, then list the root directory and read /hello.txt28
ext4_writeembeddedext4 WRITE battery for the pure-Ada filesystem47
framembeddedI2C FRAM driver demo36
ftpembeddedAn FTP *client* over the WIZnet W5500 Ethernet controller, driven through the portable FTP_Client package (which is itself written against the GNAT.Sockets facade)45
ftp_inetembeddedA REAL-WORLD FTP client run over the W5500: it logs in anonymously to the public GNU FTP server (ftp.gnu.org), prints a file's SIZE, downloads it (RETR, counting bytes and comparing to SIZE), lists the root (NLST), and quits45
ftp_serverembeddedAn anonymous FTP *server* on the ESP32-S3, exposing the ext4-on-W25Q-flash filesystem over the network: a desktop FTP client (FileZilla, the `ftp` CLI, a browser, Python ftplib) can browse, download, upload, delete and mkdir on the board's flash45
full_intrfullfull-profile interrupt-attach test (`ESP32S3_RTS_PROFILE=full`)08
full_taskingfullFull Ada tasking -- the constructs the Jorvik runtime profile forbids, here running over the BB kernel on core 008
gdma_copyembeddedAda GDMA self-test17
gpio0_blinklight-taskinga bare-metal Ada peripheral driver (ESP32-S3, no FreeRTOS)13
gpsembeddedThe reusable HAL GPS driver (ESP32S3.GPS): a task-driven UART NMEA receiver38
gps_displayembeddedMulti-sensor dashboard on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)38
gt911embeddedGT911 capacitive-touch driver demo30
hc595embeddedA string of 74HC595 shift registers driven over SPI: MOSI->SER, SCLK->SRCLK, a GPIO RCLK latch and a GPIO /OE. It walks a single high output across the whole string ("chase"), so you can watch it on LEDs or a scope and confirm the wiring, the chip count, and the bit/chip ordering34
heaptestembeddedOn-target malloc/free stress of the Ada TLSF allocator (ESP32-S3)09
heartbeatlight-tasking05
i2c_loopbackembeddedAn Ada I2C MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.I2C) with NO external wiring and no device on the bus14
i2s_loopbackembeddedAda I2S self-test18
i2s_pdmembeddedAda I2S PDM microphone capture demo18
intr_levelsembedded55
lcdembedded19
lcd_i8080embeddedAda LCD (i80 8-bit parallel) self-test (no IDF)19
ledc_pwmembeddedAda LEDC PWM self-test22
m24c64embeddedM24C64 I2C EEPROM driver demo36
macembeddedReading the factory MAC address programmed into the ESP32-S3's eFuse, and the per-interface MACs the chip derives from it (Espressif allocates each part a block of four)29
mcpwm_pwmembeddedAda MCPWM PWM-output self-test23
modbus_masterembeddedA Modbus TCP *master* on the ESP32-S3 over the W5500: it connects to a slave on the LAN, reads holding registers and writes one back, reporting each Status44
modbus_slaveembeddedA Modbus TCP *slave* on the ESP32-S3 over the W5500: it serves holding registers and coils that live in the application's own storage (Slave_Dev) -- the Modbus.Slave library keeps no register tables44
multinicembeddedMultiple network interfaces on one board: TWO W5500s, the routing table that chooses between them, and interface pinning40
p256_katembeddedKnown-answer test for the pure-Ada P-256 (secp256r1) ECDSA + ECDH (P256)27
pcf85063aembeddedPCF85063A real-time clock33
pcnt_countembeddedAda PCNT self-test24
psramlight-taskingExternal PSRAM from Ada (ESP32-S3, no FreeRTOS, no ESP-IDF)09
qmi8658cembeddedQMI8658C 6-axis IMU driver demo (bare-metal ESP32-S3, no FreeRTOS, no IDF)32
rendezvousfullAda task RENDEZVOUS on the bare-metal dual-core ESP32-S3 -- synchronous task-to-task message passing (entries / `accept` / entry calls with `out` parameters): the full tasking model that lives beyond Jorvik08
rmt_loopbackembeddedAda RMT self-test21
rsa_katembeddedESP32-S3 RSA accelerator known-answer test (KAT)27
rtc_sleepembeddedAda RTC deep-sleep + retained-memory self-test26
rtcio_holdembeddedAda RTC-IO pad-hold self-test26
sd_spiembeddedSD card over SPI28
sdm_outputembeddedAda SDM self-test22
sdmmcembeddedAda native SD/MMC-host self-test28
sdmmc_ch422gembeddedReading an SD card on a board where the card's DAT3/CD line is wired not to the SoC but to a CH422G I2C expander pin, so two reusable HAL drivers work together: * ESP32S3.CH422G drives the card's DAT3/CD high via its IO4 pin -- needed so the card enters/stays in SD mode34
shared_l2embeddedTwo drivers, one interrupt -- ESP32S3.Shared_L255
sht41embeddedSHT41 temperature/humidity sensor driver demo32
simdembeddedThe ESP32S3.SIMD library (libs/esp32s3_simd) running on real silicon: a few representative vector kernels whose inner loops are GNAT inline assembly over the Xtensa LX7 PIE SIMD unit (the q-registers)51
smplight-taskingDual-core SMP cross-core mailbox (no FreeRTOS)08
sparknacl_katembeddedSPARKNaCl known-answer tests27
spi_loopbackembeddedAn Ada SPI MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.SPI) with NO external wiring15
st7789embeddedST7789 SPI display driver demo30
st7789_cubeembeddedBouncing solid-colour 3D cube on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)30
stack_usagelight-taskingRuntime stack high-water-mark measurement (ESP32S3.Stack_Usage): paint the environment-task stack with a sentinel, run a workload that drives the stack to a known depth, then report the peak bytes actually used52
stressfullRTS stress suite: a randomized tiny-delay storm (stress_storm) plus cross-core wakeup ping-pong pairs (stress_pingpong), watched by an on-board stall monitor (stress_monitor)55
tca9555embeddedThe reusable HAL driver ESP32S3.TCA9555 -- a 16-bit I2C GPIO expander -- driven against a real part at 0x2034
timer_countembeddedAda general-purpose timer self-test (no IDF)24
tls_helloembeddedPure-Ada TLS 1.3 client over the W5500 (Ethernet)42
tls_resumeembeddedTLS 1.3 session resumption (PSK) over the W5500 (Ethernet)42
tls_weatherembeddedReal-world HTTPS over pure-Ada TLS 1.3: fetch a live weather forecast from api.open-meteo.com, end to end with no external C TLS library42
tlv2556embeddedTI TLV2556 12-bit serial ADC bring-up37
touch_readembeddedAda capacitive-touch read self-test25
twai_loopbackembeddedAda TWAI (CAN) self-test20
tx1812embeddedDrive a string of TX1812 addressable RGB LEDs on IO48 via the RMT peripheral35
uart_loopbackembeddedAda UART self-test16
w25qembeddedWinbond W25Q256FV SPI NOR flash bring-up36
w5500embeddedWIZnet W5500 TCP echo server39
w5500_controlembeddedWIZnet W5500 control registers39
w5500_dhcpembeddedDHCP client on the W5500 with automatic lease maintenance39
w5500_dnsembeddedA DNS name lookup over the W5500 Ethernet chip, using the portable DNS_Client module39
w5500_httpembeddedAn HTTP GET *client* over the WIZnet W5500 Ethernet controller, driven through the GNAT.Sockets facade (a TCP stream socket)39
w5500_lowpowerembeddedWIZnet W5500 PHY power-down (low-power)39
w5500_ntpembeddedAn SNTP / NTP time client over a Wiznet W5500 Ethernet module39
w5500_weatherembeddedWeather forecast for a latitude / longitude, from Open-Meteo (open-meteo.com)39
wifi_deepsleepembeddedESP32-S3: associate to Wi-Fi, then deep-sleep -- the RTC power-down IS the radio power-down43
wifi_dnsembeddedESP32-S3 Wi-Fi DNS over a pure-Ada software IP stack43
wifi_httpembeddedESP32-S3 Wi-Fi HTTP fetch over a pure-Ada software TCP stack43
wifi_scanembeddedESP32-S3 Wi-Fi scan + WPA2 connect, end to end on libs/esp32s3_wifi43
wifi_sniffembeddedESP32-S3 Wi-Fi promiscuous sniffer -- a WPA2 ground-truth tool43
wifi_tlsembeddedESP32-S3 Wi-Fi HTTPS: pure-Ada TLS 1.3 over the software TCP stack43
wlembeddedDynamic wear-leveling FTL over the W25Q SPI NOR flash46
x509_chainembeddedX.509 certificate-chain validation42
x509_katembeddedX.509 DER parser known-answer test (X509.Parse)42
x509_policyembeddedX.509 leaf-certificate policy checks42
x509_verifyembeddedEnd-to-end X.509 certificate signature verification as a known-answer test42
The examples: all 96 of them · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

Step 12 of 56

The examples: all 96 of them

Most need no wiring, most tell you PASS or FAIL, and each one is the fastest way to find out whether a peripheral works on your board before you write a line against it.

How to use them

Every example builds and runs the same way, and the short name is enough:

./x list                       # names, profiles, directories
./x run gpio0_blink            # build + flash + monitor
./x run i2c_loopback -p /dev/ttyACM0

Run the self-test before writing code. When a driver page here says a peripheral works, that is a claim about the authors' board. The matching example is how you turn it into a claim about yours — and most need no external wiring at all, using internal loopback or a pad the chip samples itself.

They are also meant to be read. Each opens with a header saying what it demonstrates, what the console should print, and what hardware it needs; magic numbers are named and the reasoning is in the code. examples/STYLE.md records the bar, with esp32s3_gpio0_blink and esp32s3_gdma_copy as the models.

Mind the profile column. An example built for embedded will not build under light-tasking — the RAII driver handles need finalization (step 8). That is the first thing to check when a copied example fails to compile.

The catalogue

Generated from ./x list --json and the examples' own headers, so it cannot drift from what the repository actually contains. The last column links to the step that explains the thing being demonstrated.

ExampleProfileWhat it showsStep
adc_readembeddedAda SAR ADC one-shot self-test25
aes_gcm_katembeddedAES-GCM AEAD as a known-answer test (KAT) on the ESP32-S3: authenticated encrypt + decrypt for AES-128 and AES-256, driving the hardware AES block with software GHASH/CTR. Encrypt must reproduce the expected ciphertext and tag; decrypt must verify the tag and recover the original plaintext27
b612embeddedB612 anti-aliased font on an ST7789 display49
ch422gembeddedCH422G I2C I/O-expander driver demo34
cryptoembeddedAda hardware-crypto self-test27
delay_testembedded55
dns_secureembeddedOne name, four DNS transports: UDP, TCP, DoT and DoH, over the W550041
embeddedembeddedembedded runtime profile demo08
es8311embeddedES8311 audio codec -- full-duplex 440 Hz loopback31
exceptionsembeddedAda exception demonstration (embedded profile)08
ext4embeddedAda ext4-on-SD self-test47
ext4_flashembeddedA real ext4 filesystem on wear-leveled SPI NOR flash47
ext4_mkfsembeddedFormat a blank SPI NOR flash to ext4 ON-DEVICE, then use it (ESP32-S3)47
ext4_sdmmcembeddedWhat: mount a real ext4 (or ext2/3) SD card with the pure-Ada filesystem (ESP32S3.Ext4) over the SDMMC block driver, then list the root directory and read /hello.txt28
ext4_writeembeddedext4 WRITE battery for the pure-Ada filesystem47
framembeddedI2C FRAM driver demo36
ftpembeddedAn FTP *client* over the WIZnet W5500 Ethernet controller, driven through the portable FTP_Client package (which is itself written against the GNAT.Sockets facade)45
ftp_inetembeddedA REAL-WORLD FTP client run over the W5500: it logs in anonymously to the public GNU FTP server (ftp.gnu.org), prints a file's SIZE, downloads it (RETR, counting bytes and comparing to SIZE), lists the root (NLST), and quits45
ftp_serverembeddedAn anonymous FTP *server* on the ESP32-S3, exposing the ext4-on-W25Q-flash filesystem over the network: a desktop FTP client (FileZilla, the `ftp` CLI, a browser, Python ftplib) can browse, download, upload, delete and mkdir on the board's flash45
full_intrfullfull-profile interrupt-attach test (`ESP32S3_RTS_PROFILE=full`)08
full_taskingfullFull Ada tasking -- the constructs the Jorvik runtime profile forbids, here running over the BB kernel on core 008
gdma_copyembeddedAda GDMA self-test17
gpio0_blinklight-taskinga bare-metal Ada peripheral driver (ESP32-S3, no FreeRTOS)13
gpsembeddedThe reusable HAL GPS driver (ESP32S3.GPS): a task-driven UART NMEA receiver38
gps_displayembeddedMulti-sensor dashboard on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)38
gt911embeddedGT911 capacitive-touch driver demo30
hc595embeddedA string of 74HC595 shift registers driven over SPI: MOSI->SER, SCLK->SRCLK, a GPIO RCLK latch and a GPIO /OE. It walks a single high output across the whole string ("chase"), so you can watch it on LEDs or a scope and confirm the wiring, the chip count, and the bit/chip ordering34
heaptestembeddedOn-target malloc/free stress of the Ada TLSF allocator (ESP32-S3)09
heartbeatlight-tasking05
i2c_loopbackembeddedAn Ada I2C MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.I2C) with NO external wiring and no device on the bus14
i2s_loopbackembeddedAda I2S self-test18
i2s_pdmembeddedAda I2S PDM microphone capture demo18
intr_levelsembedded55
lcdembedded19
lcd_i8080embeddedAda LCD (i80 8-bit parallel) self-test (no IDF)19
ledc_pwmembeddedAda LEDC PWM self-test22
m24c64embeddedM24C64 I2C EEPROM driver demo36
macembeddedReading the factory MAC address programmed into the ESP32-S3's eFuse, and the per-interface MACs the chip derives from it (Espressif allocates each part a block of four)29
mcpwm_pwmembeddedAda MCPWM PWM-output self-test23
modbus_masterembeddedA Modbus TCP *master* on the ESP32-S3 over the W5500: it connects to a slave on the LAN, reads holding registers and writes one back, reporting each Status44
modbus_slaveembeddedA Modbus TCP *slave* on the ESP32-S3 over the W5500: it serves holding registers and coils that live in the application's own storage (Slave_Dev) -- the Modbus.Slave library keeps no register tables44
multinicembeddedMultiple network interfaces on one board: TWO W5500s, the routing table that chooses between them, and interface pinning40
p256_katembeddedKnown-answer test for the pure-Ada P-256 (secp256r1) ECDSA + ECDH (P256)27
pcf85063aembeddedPCF85063A real-time clock33
pcnt_countembeddedAda PCNT self-test24
psramlight-taskingExternal PSRAM from Ada (ESP32-S3, no FreeRTOS, no ESP-IDF)09
qmi8658cembeddedQMI8658C 6-axis IMU driver demo (bare-metal ESP32-S3, no FreeRTOS, no IDF)32
rendezvousfullAda task RENDEZVOUS on the bare-metal dual-core ESP32-S3 -- synchronous task-to-task message passing (entries / `accept` / entry calls with `out` parameters): the full tasking model that lives beyond Jorvik08
rmt_loopbackembeddedAda RMT self-test21
rsa_katembeddedESP32-S3 RSA accelerator known-answer test (KAT)27
rtc_sleepembeddedAda RTC deep-sleep + retained-memory self-test26
rtcio_holdembeddedAda RTC-IO pad-hold self-test26
sd_spiembeddedSD card over SPI28
sdm_outputembeddedAda SDM self-test22
sdmmcembeddedAda native SD/MMC-host self-test28
sdmmc_ch422gembeddedReading an SD card on a board where the card's DAT3/CD line is wired not to the SoC but to a CH422G I2C expander pin, so two reusable HAL drivers work together: * ESP32S3.CH422G drives the card's DAT3/CD high via its IO4 pin -- needed so the card enters/stays in SD mode34
shared_l2embeddedTwo drivers, one interrupt -- ESP32S3.Shared_L255
sht41embeddedSHT41 temperature/humidity sensor driver demo32
simdembeddedThe ESP32S3.SIMD library (libs/esp32s3_simd) running on real silicon: a few representative vector kernels whose inner loops are GNAT inline assembly over the Xtensa LX7 PIE SIMD unit (the q-registers)51
smplight-taskingDual-core SMP cross-core mailbox (no FreeRTOS)08
sparknacl_katembeddedSPARKNaCl known-answer tests27
spi_loopbackembeddedAn Ada SPI MASTER hardware self-test -- exercises the reusable HAL master driver (ESP32S3.SPI) with NO external wiring15
st7789embeddedST7789 SPI display driver demo30
st7789_cubeembeddedBouncing solid-colour 3D cube on a 240x240 ST7789 panel (bare-metal ESP32-S3, no FreeRTOS, no IDF)30
stack_usagelight-taskingRuntime stack high-water-mark measurement (ESP32S3.Stack_Usage): paint the environment-task stack with a sentinel, run a workload that drives the stack to a known depth, then report the peak bytes actually used52
stressfullRTS stress suite: a randomized tiny-delay storm (stress_storm) plus cross-core wakeup ping-pong pairs (stress_pingpong), watched by an on-board stall monitor (stress_monitor)55
tca9555embeddedThe reusable HAL driver ESP32S3.TCA9555 -- a 16-bit I2C GPIO expander -- driven against a real part at 0x2034
timer_countembeddedAda general-purpose timer self-test (no IDF)24
tls_helloembeddedPure-Ada TLS 1.3 client over the W5500 (Ethernet)42
tls_resumeembeddedTLS 1.3 session resumption (PSK) over the W5500 (Ethernet)42
tls_weatherembeddedReal-world HTTPS over pure-Ada TLS 1.3: fetch a live weather forecast from api.open-meteo.com, end to end with no external C TLS library42
tlv2556embeddedTI TLV2556 12-bit serial ADC bring-up37
touch_readembeddedAda capacitive-touch read self-test25
twai_loopbackembeddedAda TWAI (CAN) self-test20
tx1812embeddedDrive a string of TX1812 addressable RGB LEDs on IO48 via the RMT peripheral35
uart_loopbackembeddedAda UART self-test16
w25qembeddedWinbond W25Q256FV SPI NOR flash bring-up36
w5500embeddedWIZnet W5500 TCP echo server39
w5500_controlembeddedWIZnet W5500 control registers39
w5500_dhcpembeddedDHCP client on the W5500 with automatic lease maintenance39
w5500_dnsembeddedA DNS name lookup over the W5500 Ethernet chip, using the portable DNS_Client module39
w5500_httpembeddedAn HTTP GET *client* over the WIZnet W5500 Ethernet controller, driven through the GNAT.Sockets facade (a TCP stream socket)39
w5500_lowpowerembeddedWIZnet W5500 PHY power-down (low-power)39
w5500_ntpembeddedAn SNTP / NTP time client over a Wiznet W5500 Ethernet module39
w5500_weatherembeddedWeather forecast for a latitude / longitude, from Open-Meteo (open-meteo.com)39
wifi_deepsleepembeddedESP32-S3: associate to Wi-Fi, then deep-sleep -- the RTC power-down IS the radio power-down43
wifi_dnsembeddedESP32-S3 Wi-Fi DNS over a pure-Ada software IP stack43
wifi_httpembeddedESP32-S3 Wi-Fi HTTP fetch over a pure-Ada software TCP stack43
wifi_scanembeddedESP32-S3 Wi-Fi scan + WPA2 connect, end to end on libs/esp32s3_wifi43
wifi_sniffembeddedESP32-S3 Wi-Fi promiscuous sniffer -- a WPA2 ground-truth tool43
wifi_tlsembeddedESP32-S3 Wi-Fi HTTPS: pure-Ada TLS 1.3 over the software TCP stack43
wlembeddedDynamic wear-leveling FTL over the W25Q SPI NOR flash46
x509_chainembeddedX.509 certificate-chain validation42
x509_katembeddedX.509 DER parser known-answer test (X509.Parse)42
x509_policyembeddedX.509 leaf-certificate policy checks42
x509_verifyembeddedEnd-to-end X.509 certificate signature verification as a known-answer test42