Skip to content

Arduino GIGA R1: a firmware for the GIGA Display Shield, with LVGL - #266

Merged
bdbarnett merged 3 commits into
mainfrom
giga-display-shield
Nov 6, 2026
Merged

bdbarnett merged 3 commits into
mainfrom
giga-display-shield

Conversation

@bdbarnett

@bdbarnett bdbarnett commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

--port stm32 --board ARDUINO_GIGA --variant DISPLAY_SHIELD --modules displayif,lvgl now builds a GIGA R1 WiFi firmware that drives the GIGA Display Shield. LVGL and displayif don't fit the board's 1280 KB firmware slot as upstream lays it out, so the variant moves the Wi-Fi chip's firmware into the megabyte of QSPI flash the board reserves for it, as a second image (firmware1.bin), turns Bluetooth off, and leaves out LVGL's 40 px font. It also turns on the HAL's DSI and LTDC drivers that displayif's mipidsi uses. The boards table has the command, and the flash guide has the two dfu-util writes and how to put the Python libraries in ROMFS.

build_mp.py takes stm32 variants the way it takes rp2 ones: upstream's board unchanged, our mpconfigvariant.mk after the board's, a header named like one of the board's included after it, and any other file (here a linker script fragment) beside them. Overlay patch 0048 links stm32 firmware from a response file: with LVGL the link command passed the 128 KB Linux allows one argument, and /bin/sh refused it.

I built this branch together with #264, #265 and PyDevices/omnipython-lvgl#7 and PyDevices/omnipython-lvgl#8: the build exits 0 and firmware0.bin is 1,281,088 bytes of the 1,310,720-byte slot (29,632 free); firmware1.bin is byte-for-byte the Wi-Fi firmware the board already had. I flashed both images with the commands in the guide, and LVGL ran on the shield through FBDisplay with GT911 touch for 60 s with no timer errors. The Stm32BoardDir, Rp2BoardDir and provenance tests pass. I ran the guide's ROMFS step from a fresh clone of pydevices with mpremote 1.29 and the mpy-cross package: it deployed a 475 KB image, and the OmniPython libraries import from /rom. Once the two omnipython-lvgl PRs merge, modules.lock moves to that commit here before this merges, so a build without the sibling checkout gets them too. The board isn't in the firmware releases.

--port stm32 --board ARDUINO_GIGA --variant DISPLAY_SHIELD builds the GIGA
R1 WiFi with room for LVGL and displayif's MIPI DSI driver in its 1280 KB
firmware slot: the Wi-Fi chip's firmware moves to the QSPI flash the board
reserves for it, as a second image (firmware1.bin), Bluetooth is off, and
LVGL's 40 px font is left out. It also turns on the HAL's DSI and LTDC
drivers.

build_mp.py takes stm32 variants the way it takes rp2 ones: upstream's
board unchanged, plus our mpconfigvariant.mk, headers that follow the
board's, and other files beside them. Overlay patch 0048 links stm32
firmware from a response file, because with LVGL the link command passed
Linux's 128 KB limit on one argument.

Built with --modules displayif,lvgl (firmware0.bin 1,281,088 bytes of the
1,310,720-byte slot), flashed with the two dfu-util writes in the flash
guide, and ran LVGL through displaydev's FBDisplay on the shield with GT911
touch. Ran the Stm32BoardDir, Rp2BoardDir and provenance tests.
@bdbarnett
bdbarnett merged commit ef0fc23 into main Nov 6, 2026
40 of 41 checks passed
@bdbarnett
bdbarnett deleted the giga-display-shield branch November 6, 2026 10:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant