Skip to content

v0.1.6

Latest

Choose a tag to compare

@nuraci nuraci released this 11 Nov 03:59

Every board now runs on omnipython-lvgl 665dec5, the RP2350 included, and every board has been tested on hardware with this firmware.

Board File State
STM32H7_CORE V1.0 + IPS 1024x600 STM32H7_CORE-V10-v0.1.6.dfu, .hex tested on hardware: board checks, SD card, perf; on c34fbee: 15 min soak, touch
STM32H7_CORE V1.3 + IPS 1024x600 STM32H7_CORE-V13-v0.1.6.dfu, .hex tested on hardware: board checks, SD card, perf; on c34fbee: 15 min soak, touch 5/5, the 10 examples
DEV190806042 + IPS 1024x600 DEV190806042-v0.1.6.dfu, .hex tested on hardware: board checks, perf; on c34fbee: 15 min soak, touch 5/5, the 10 examples
FK743M5-XIH6 + IPS 1024x600 FK743M5-XIH6-v0.1.6.dfu, .hex tested on hardware: board checks, SD card, perf; on c34fbee: 15 min soak, touch 5/5, the 10 examples
Waveshare RP2350-Touch-LCD-4 WAVESHARE_RP2350_TOUCH_LCD_4-v0.1.6.uf2 tested on hardware: tile CRCs, panel, perf; on c34fbee: 1 h soak, touch, the 10 examples
ESP32-4848S040 ESP32_4848S040-v0.1.6.bin tested on hardware: panel, perf; on c34fbee: pools, 15 min soak, the 10 examples

The checks before "on c34fbee" ran on these very files (2026-11-11). The rest ran the day before on the same sources with omnipython-lvgl c34fbee; the only change since is its #19, the LVGL assert handler, which every board was re-checked for.

What changes

  • SD card on the STM32H743 boards. It never worked: the SDMMC kernel clock was 480 MHz, so the card got 960 kHz at init and 120 MHz in transfers. Now 240 kHz and 30 MHz. Tested on the V1.0 (SDMMC2), V1.3 and FK743M5-XIH6 (SDMMC1): mounted at boot as /sd, reads of 8.7-12.5 MB/s. SPI1-3 share that clock; machine.SPI reads the real frequency.
  • UART flasher (scripts/stm32_uart_flash.py) fixed for images over 1 MB, which every STM32 image since v0.1.5 is: the script of v0.1.5 stops with cmd 31: timeout after erasing the second flash bank. Use the script of this release.
  • The RP2350 moves to omnipython-lvgl from the archived lvgl-micropython, with LVGL's memory pools: a redraw costs the same whatever the state of the heap (26.5 ms with two buffers, against up to 43.8 ms without), for about 26 KB of heap. Same image as before (tile CRCs), 1 h soak at 57.7 fps.
  • omnipython-lvgl 665dec5: an LVGL assert raises RuntimeError: LVGL assert failed at lv_display.c:614 and LVGL keeps running; images 46-50 KB smaller than v0.1.5.
  • ESP32-4848S040: 64 KB more free heap than v0.1.5. With code run from PSRAM, ESP-IDF keeps whole 64 KB pages of PSRAM for the code and the constants; v0.1.5's constants crossed into one more page (not 128 KB as the v0.1.5 notes said, and the cause is now known). 665dec5 brings them back.

Flashing

  • STM32 boards over USB: dfu-util -a 0 -d 0483:df11 -D <board>-v0.1.6.dfu, with the board in DFU mode: machine.bootloader() from v0.1.5 on, or BOOT0 held while pressing RESET. See docs/flash-dfu.md.
  • STM32 boards over UART1: scripts/stm32_uart_flash.py flash <board>-v0.1.6.hex --verify, with the script of this release (see docs/stm32h743.md).
  • RP2350-Touch-LCD-4: machine.bootloader() (or hold BOOT and press RESET), then copy the .uf2 to the RP2350 drive.
  • ESP32-4848S040, from v0.1.0 or later, keeping your files: esptool.py --chip esp32s3 -p <port> -b 460800 write_flash 0x0 ESP32_4848S040-v0.1.6.bin. From other firmware, erase_flash first (it erases everything on the board).

Good to know

  • FAT file names that are not UTF-8 (written by some PCs) make os.listdir() with str paths raise UnicodeError; with bytes paths (os.listdir(b"/sd")) they list fine. That is MicroPython's FAT driver.

Sources: MicroPython 1.29.0, omnipython-lvgl 665dec5, ESP-IDF 5.5.2. Measurements and logs: docs/stm32h743.md, docs/rp2350-touch-lcd4.md, docs/esp32-4848s040.md, docs/log/. Checksums: SHA256SUMS.