Known board quirks¶
This page collects the hardware and firmware quirks that make one board fail where another, running the same code, succeeds. When a board behaves oddly, find its row here before you suspect your own code. Most entries link to the page with the full fix.
| Board | Quirk | What to do |
|---|---|---|
| Raspberry Pi Pico W (RP2040) | HTTPS and wss:// need flash deploy mode |
Deploy those workloads in flash mode. See TLS and HTTPS failures. |
| Raspberry Pi Pico W (RP2040) | Silent wifi drop, last_error stays None |
Check wifi.state and wifi.connected, not last_error. See WiFi won't connect. |
| Raspberry Pi Pico W (RP2040) | CYW43 idle power-save causes 30 to 100 ms tick stalls | Keep the power_save = false default; do not set power_save = true. |
| Raspberry Pi Pico W (RP2040) | CircuitPython wifi fails Unknown failure 1 in some demos |
Known rp2 CircuitPython radio-state quirk; retry, or run the board on MicroPython. |
| Raspberry Pi Pico W (RP2040) | CircuitPython TLS server bricks the CYW43 chip | Do not serve HTTPS or wss:// from a Pico W on CircuitPython; use an ESP32 board or MicroPython. See TLS and HTTPS failures. |
| Raspberry Pi Pico W (RP2040) | No NVS on MicroPython | Use chumicro-kvstore, which falls back to a LittleFS file (/_chu_kv.msgpack). See Persisting data. |
| Raspberry Pi Pico W (RP2040) | Onboard LED sits on the wifi coprocessor and can't PWM | Drive it as a plain on/off pin, not with PWM. |
| Raspberry Pi Pico W (RP2040) | Slower USB mass-storage controller | More prone to a read-only CIRCUITPY after a mid-write teardown; reset and replug before you redeploy. |
| Lolin S2 Mini (ESP32-S2) | machine.bootloader() leaves the chip half-running, no ROM bootloader appears |
Enter the bootloader by hand: hold BOOT (GPIO0), tap RESET, release BOOT. |
| Lolin S2 Mini (ESP32-S2) | CircuitPython raw-paste (Ctrl-E) hangs on CP 10.1.4 | Upgrade firmware past 10.1.4. |
| Lolin S2 Mini (ESP32-S2) | Very slow CircuitPython flash writes, 30 to 60 s per example | Not a hang; wait it out. |
| Lolin S2 Mini (ESP32-S2) | TCP stack coalesces fragments differently | Size websocket and HTTP frame buffers with headroom. |
| Lolin S2 Mini (ESP32-S2) | USB-CDC serial can drop mid-telemetry | Reset and replug; keep runs short. |
| Lolin S2 Mini (ESP32-S2) | Ships with a corrupted FAT, or demotes CIRCUITPY to read-only on a flaky cable | Swap to a known-good cable; reset-board to rebuild the filesystem. |
| ESP32-S3 (incl. UM FeatherS3 P4) | Unstable wifi at full transmit power on pre-2024 P4 and P7 revisions | Set wifi.tx_power_dbm = 15. See WiFi won't connect. |
| ESP32-S3 (incl. UM FeatherS3 P4) | Half-open station slow-fails with Unknown failure 205 |
Upgrade chumicro-wifi to 0.7.1 or later (it calls stop_station() before each attempt) and retry. |
| ESP32-S3 (incl. UM FeatherS3 P4) | Individual RF-dud units (all-zeros-prefix MAC is the tell) | Reseat or replace the board, or add an external antenna. |
| ESP32-S3 (incl. UM FeatherS3 P4) | Enough free heap for HTTPS in RAM mode (over 200 KB after wifi) | No flash-mode requirement for HTTPS on this board, unlike the Pico W. |
| Classic ESP32 (TinyPICO, no native USB) | CircuitPython 10.2.0 corrupts the running program non-deterministically ('Runner' object has no attribute 'tick', NUL bytes in attribute names) |
Keep classic ESP32 on MicroPython; it is off the CircuitPython matrix until re-tested at CP 10.3.0. |
| SAMD21, nRF52, SAMD51-CP (below the 256 KB floor) | No collections.deque, so ChuMicro libraries won't import |
Use a supported chip (ESP32, RP2040, RP2350, STM32). See Running out of memory. |
| SAMD21, nRF52, SAMD51-CP (below the 256 KB floor) | SAMD21 NVM is only 256 B | Expect KVStoreFull quickly; keep persisted state tiny or use a larger-NVM board. See Persisting data. |
These below-floor boards are unsupported, not buggy. The quirks above are hardware and firmware facts, not defects in your code or in the libraries.