Repository navigation
Arduino GIGA R1: a firmware for the GIGA Display Shield, with LVGL - #266
Merged
Merged
Conversation
--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.
This was referenced Nov 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
--port stm32 --board ARDUINO_GIGA --variant DISPLAY_SHIELD --modules displayif,lvglnow 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'smipidsiuses. 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.pytakes stm32 variants the way it takes rp2 ones: upstream's board unchanged, ourmpconfigvariant.mkafter 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/shrefused 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.binis 1,281,088 bytes of the 1,310,720-byte slot (29,632 free);firmware1.binis 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 thempy-crosspackage: it deployed a 475 KB image, and the OmniPython libraries import from/rom. Once the two omnipython-lvgl PRs merge,modules.lockmoves 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.