CYD Studio › Docs › Known traps
Known traps
All of these happened, all of them were measured. If something "does not work", look here first.
Board
- Display MISO is not wired (CYD): reading back from the display returns
0xFF. The controller id and MADCTL cannot be queried; orientation is set by eye (Settings → Display). Verified settingrotation=0,bgr=False; leave it. - SD only on VSPI (slot 3). Slot 2 is the display's HSPI bus; a failed attempt leaves the host locked and kills the display. With no card
os.statvfs('/sd')falls back to the root filesystem and gives a false positive. - SD cards of 64 GB and above come as exFAT, and MicroPython only reads FAT.
sd_kontrol.pydiagnoses it and formats as FAT withBICIMLE = True(erases everything on the card). - Module name must not clash with a folder name.
projects.py+/projectsclashed and MicroPython treated the folder as a package; hence the module isstore.py. - Threads do not isolate. There is a GIL; a project that never yields the CPU starves the panel. Even
sleep_ms(1)is enough. - Normal mode + a wait inside a
def: MicroPython silently acceptsawaitin a plaindefand turns it into a generator; the body never runs. The pre-scan catches this and opens the project as T. - The ESP8266 pre-emptor cannot enter a blocking C call (
uart.write, big SPI); those are in the millisecond range. uart.write(512 bytes)blocks for 44 ms and trips the watchdog: 64-byte chunks withsleep_ms(1)in between.- Module cache: modules a project
imported stayed insys.modules; 6 KB never came back and fixes were invisible.Job._runnow drops the modules the project brought in when it ends.
PC and serial port
mpremoteleaves the board at the REPL.fs cpinterruptsmain.pywith Ctrl-C and never restarts it; after every deploy the panel is down. Pass--reset.- Clone CH340 driver 3.9.2024.9 (Windows) fails to open the port at 38400 baud or above with
PermissionError(31, 'A device attached to the system is not functioning'). Opening at 9600 and raising the speed works; patchserial.Serial.openthroughsitecustomize.py, or roll the driver back to 3.5 (2019). - CH340 wedge: the port keeps emitting the same garbage byte (
0xE2) and writes fail withWrite timeout. It does not recover in software; unplug and replug the USB cable. - PowerShell BOM:
Set-Content -Encoding utf8adds a BOM and MicroPython saysNameError: name '' isn't defined. Write with Python or an editor. - esptool baud trap:
--baud 460800leaves the stub at that speed and the next command cannot connect at 115200. Stay at 115200 for multi-step work. - Interrupted flash: if the port drops the board stays in download mode; no need to hold the button again, just rerun
flash.py --koru. If a reset still showsboot:0x3 DOWNLOAD_BOOT, BOOT is physically pressed. - The
txbuf=parameter returnsEPERMon the ESP32 UART; pass onlyrxbuf. - First-boot format (ESP8266): on an erased 4 MB flash the LittleFS format takes a few seconds;
mpremoteresets the board on every connect and restarts the format. Leave it alone ~10 s after flashing.
Power
- Unpowered USB hub: when the display board starts WiFi the hub cannot supply the current and the board drops off USB together with its serial chip (the COM port vanishes within 1.5 s). Use a direct PC port or a powered hub.
- ESP32 OLED from PC USB: the 3.3 V rail falls to 1.63 V the moment WiFi starts, brownout loop. 2 × 1000 µF capacitors do not help (~2 ms of buffer). Fix: battery, powered hub or external 3.3 V.
- Cable resistance: at 300 mA a thin/long cable drops ~1 V and the regulator goes into dropout. A 3 A adapter does not rescue the cable.
Network
- A second HTTP server drains lwIP buffers and internal DRAM through its second listening socket and freezes the panel. Use
cyd.rota. - HTTPS through
requestsisENOMEMin normal mode, BLE isEIO. Both work in Solo mode. - A VPN on the PC can cut off the local network: the board reports "connected" at its own IP while the PC cannot even ping the router. Turn the VPN off first.
- A slow client used to lock the panel while receiving a file: socket timeout 5 s and a heartbeat per chunk; with a client reading 512 B every 0.5 s, 50 s with 0 errors.
Shadowing
A same-named .py on the filesystem overrides the frozen one (priority .py > .mpy > frozen). Upload a server.py and the RAM savings silently disappear. Always run the deploy tools with --frozen on frozen boards.
Last updated 2026-10-17 · This page as Markdown