Board Testing
To align expectations with the reality of what can be done with CircuitPython today, here are benchmarks on a few boards in different configurations. These can be compared to the original baseline Metro RP2350 (SPI) / Feather ESP32-S3 (SDIO) boards as well as against each other for relative performance.
These tests use the following:
- PyPortal M4 - Everything is built-in (TFT, Controller, WiFi, SD card slot)
- 3.5" FeatherWing V2 + Feather RP2350
- Feather RP2350 + Adalogger FeatherWing
- RP2040 Adalogger
- Memento Camera (ESP32-S3)
The PyPortal M4 has a nice screen, WiFi and an SD card slot. When benchmarking with a 64GB A2/U3 SD card, the results show excellent SPI based performance. It is right in line with the Metro RP2350. While the PyPortal is significantly slower than an SDIO setup for bulk read/write, it wins at logging lines per second. This board did require a 3 second pause between benchmarks to re-stabilize, something other boards did not struggle with.
| Board | Bus | Bulk write | Bulk read | Logging |
|---|---|---|---|---|
| PyPortal M4 | SPI @24MHz | 2.5 MB/s | 2.4 MB/s | 2763 l/s |
| Metro RP2350 | SPI @25MHz | 2.3 MB/s | 2.2 MB/s | 2581 l/s |
| ESP32-S3 | 4-bit SDIO @40MHz | 4.5 MB/s | 7.1 MB/s | 1489 l/s |
There is a significant slowdown with the 3.5" FeatherWing V2 display, but it is still near 2 MB/s bulk read/write. It's not as fast as the PyPortal M4.
| Board | Bus | Write | Read | Logging |
|---|---|---|---|---|
| Feather RP2350 +3.5" TFT FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2182 l/s |
| PyPortal M4 | SPI @24MHz | 2.5 MB/s | 2.4 MB/s | 2763 l/s |
| Metro RP2350 | SPI @25MHz | 2.3 MB/s | 2.2 MB/s | 2581 l/s |
| ESP32-S3 | SDIO @40MHz | 4.5 MB/s | 7.1 MB/s | 1489 l/s |
The Feather RP2350 + Adalogger FeatherWing setup will always be limited to SPI, unlike the Feather RP2040 Adalogger which has SDIO potential in the future. The logged lines per second roughly doubled versus the RP2040 Adalogger, a notable difference.
| Board | Bus | Write | Read | Logging |
|---|---|---|---|---|
| Feather RP2350 + Adalogger FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2181 l/s |
| Feather RP2350 + 3.5" TFT FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2182 l/s |
| PyPortal M4 | SPI @24MHz | 2.5 MB/s | 2.4 MB/s | 2763 l/s |
| Metro RP2350 | SPI @25MHz | 2.3 MB/s | 2.2 MB/s | 2581 l/s |
| ESP32-S3 | SDIO @40MHz | 4.5 MB/s | 7.1 MB/s | 1489 l/s |
The Feather RP2040 Adalogger has bulk throughput just under the 2 MB/s mark. Longer term, CircuitPython may add PIO SDIO support as well as asyncio. Should these be included, it would allow this board to use 4-bit SDIO instead of SPI. The RP2040 Adalogger board could have much faster performance with software updates.
| Board | Bus | Write | Read | Logging |
|---|---|---|---|---|
| Feather RP2040 Adalogger | SPI (built-in) | 1.9 MB/s | 1.8 MB/s | 1065 l/s |
| Feather RP2350 +3.5" TFT FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2182 l/s |
| PyPortal M4 | SPI @24MHz | 2.5 MB/s | 2.4 MB/s | 2763 l/s |
| Metro RP2350 | SPI @25MHz | 2.3 MB/s | 2.2 MB/s | 2581 l/s |
| ESP32-S3 | SDIO @40MHz | 4.5 MB/s | 7.1 MB/s | 1489 l/s |
The Memento Camera is significantly slower for writes and reads than other configurations. The chip itself is capable, but the card slot is wired for SPI not SDIO, and the frequency is set to 20 MHz to stay within spec. The next speed jump is 26.7 MHz (over spec) as the display is sharing the SPI bus the SD card is on.
| Board | Bus | Write | Read | Logging |
|---|---|---|---|---|
| Memento ESP32-S3 | SPI @20MHz | 0.8 MB/s | 1.1 MB/s | 1511 l/s |
| Feather RP2040 Adalogger | SPI (built-in) | 1.9 MB/s | 1.8 MB/s | 1065 l/s |
| Feather RP2350 + Adalogger FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2181 l/s |
| Feather RP2350 +3.5" TFT FeatherWing | SPI @24MHz | 1.8 MB/s | 1.7 MB/s | 2182 l/s |
| PyPortal M4 | SPI @24MHz | 2.5 MB/s | 2.4 MB/s | 2763 l/s |
| Metro RP2350 | SPI @25MHz | 2.3 MB/s | 2.2 MB/s | 2581 l/s |
| ESP32-S3 | SDIO @40MHz | 4.5 MB/s | 7.1 MB/s | 1489 l/s |
Page last edited June 03, 2026
Text editor powered by tinymce.