This is also a problem if you use PICO_NO_FLASH builds (e.g. for debugging).
I get around it by flashing the firmware blob at a fixed address in flash, and overriding CYW43_CHIPSET_FIRMWARE_INCLUDE_FILE to point to a custom header file that defines fw_data to point to this location.
NB: Since by default PICO_NO_FLASH does not enable the XIP subsystem, we need to enable it before initialising the cyw43.
We do this on RP2040 by calling _stage2_boot(), which if called as a normal function enables XIP and returns.
(AFAICT this won't work on the RP2350, but manually enabling XIP shouldn't be hard.)
I get around it by flashing the firmware blob at a fixed address in flash, and overriding CYW43_CHIPSET_FIRMWARE_INCLUDE_FILE to point to a custom header file that defines fw_data to point to this location.
Code:
const uintptr_t fw_data = (uintptr_t)(FLASH_CYW43_FIRMWARE_ADDR);const unsigned CYW43_WIFI_FW_LEN = (224190); // launch_firmware/43439A0.binconst unsigned CYW43_CLM_LEN = (984); // launch_tuning/43439_raspberrypi_picow_v5_220624.clm_blobWe do this on RP2040 by calling _stage2_boot(), which if called as a normal function enables XIP and returns.
(AFAICT this won't work on the RP2350, but manually enabling XIP shouldn't be hard.)
Statistics: Posted by jeremyd — Sat Mar 01, 2025 5:07 pm