* Save/restore QMI window 1 registers across calls to flash_exit_xip().
This works around the RP2350 ROM reinitialising window 1 even when it
does not actually issue an XIP exit sequence to that QSPI device. If no
exit sequence is issued, then the original configuration still applies.
This is not valid in the case where the ROM *does* issue an XIP exit
sequence to the second chip select, because the original mode is no
longer valid once the device is in the serial command state. The ROM
does this when FLASH_DEVINFO (loaded from OTP, stored in boot RAM) has a
nonzero size for chip select 1. To distinguish the two cases, this patch
adds getters/setters for FLASH_DEVINFO.
If chip select 1 has a nonzero size in FLASH_DEVINFO then the ROM's
register changes for window 1 are not reverted, and instead the
hardware_flash code makes additional changes to ensure writes also work
(as the ROM only reinitialises for reads).
This means that, in the case you have opted into ROM support for the
second chip select by setting a nonzero CS1 size in FLASH_DEVINFO, the
device on chip select 1 will continue to function correctly, but full
performance won't be restored until it is reinitialised. The best way to
handle this is initialising both chip select devices in your XIP setup
function (your boot2).
* Fix whitespace. Fix handling of PICO_FLASH_SIZE_BYTES == 0.
* making pio_calculate_clkdiv8_from_float round to the neareset 1/256 (not lower 1/256)
* chage rounding of all float clkdivs to round to neareset; default to nearest (which is a backwards incompatible change, but I think OK), and add ability to turn it off
* fix copy/paste errors in PICO_CONFIG
* Calculate size of FRAC field using its own MSB and LSB, rather than hoping that INT_LSB is in the right place
* Add a new REG_FIELD_WIDTH macro, and make the calculation of the clock-dividers more consistent
---------
Co-authored-by: Andrew Scheller <andrew.scheller@raspberrypi.com>
In some cases, the flash lockout task can start on the wrong core and
not have time to move to the correct core before exit is called. This
causes a timeout as the exit function is looking at the wrong core when
checking for the lockout task.
- Re-synchronise the PICO_CMAKE_CONFIG: entries with the corresponding PICO_CONFIG: entries
- Fix a silly typo I made in #2002
- Enhance config-extraction scripts to catch similar typos in future
* Remove btstack Segger RTT from pico-btstack
We now have this in the SDK so adding it again in pico-btstack leads to
link errors.
But it's possible to use the btstack RTT functionality by defining
ENABLE_SEGGER_RTT=1, and if we're not using pico_stio_rtt we still need
to add the btstack RTT source.
* Fix build issues when RTT is enabled
Fixes https://github.com/raspberrypi/pico-examples/issues/565
* Fixes to picolibc_interface
- Don't include bindings for tinystdio if picolibc was compiled with POSIX_IO.
- Add times() function, which seems to be missed, in the same pattern as settimeofday/gettimeofday.
* Add XIP cache maintenance API (fixes#2005)
Also add a cache clean to hardware_flash implementations, to avoid
losing pending writes on the subsequent invalidate.
* Fix comment typos, add to docs index, remove unnecessary defaulting of XIP_CACHE assertions on FLASH
* Fix sense of unsigned wrapping test
* update bazel build
---------
Co-authored-by: graham sanderson <graham.sanderson@raspberrypi.com>
* add support for machdyne werkzeug rp2040 board
* boards/machdyne_werkzeug: set default flash size for cmake
---------
Co-authored-by: inc <87362+inc@users.noreply.github.com>
It seems to be possible to get stuck in the loop which is checking for
abort. It can take 100s of iterations before an abort happens and on
each iteration we're clearing the abort interrupt even when it's not
required. If we only clear the abort when needed the lockup doesn't seem
to be reproducible.
Fixes#2025
* Add `pico_btstack_mesh` CMake library to link BlueTooth Mesh capabilities hidden in BTstack
* Add pico_btstack_mesh to docs
---------
Co-authored-by: theshteves <stevenkneiser@gmail.com>
The function is setting the callback after enabing the interrupt which
can cause a hang if a receive character is already pending.
Similarly we also have to clear the callback pointer only after the
interrupt is disabled.
Fixes#2009
GCC14 doesn't like the 2-character temporary label "00" and throws an error
.../pico-sdk/src/rp2040/boot_stage2/boot2_w25x10cl.S: Assembler messages:
.../pico-sdk/src/rp2040/boot_stage2/boot2_w25x10cl.S:147: Error: junk at end of line, first unrecognized character is `0'
.../pico/rp2040/pico-sdk/src/rp2040/boot_stage2/boot2_w25x10cl.S:150: Error: garbage following instruction -- `beq 00b'
Convert it to a single number, "1", like in other boot2xxx.S files
Fixes#1999
Correct flash size from 8MB to 4MB to avoid wrapped addresses causing
firmware to be overwritten by the user filesystem in MicroPython.
Signed-off-by: Phil Howard <github@gadgetoid.com>
Stop handle_sync_func_call removing the worker. Depending on thread priority
this can occur after the memory has gone out of scope in
async_context_freertos_execute_sync.
Fixes#1962
It was probably not a good idea to put the default pin definitions in
cyw43_configport.h as they're specific to pico_w and Micropython needs
these but it has it's own version of cyw43_configport.h