pico-sdk icon indicating copy to clipboard operation
pico-sdk copied to clipboard

rom_reset_usb_boot does not function when Watchdog is enabled

Open jondurrant opened this issue 3 months ago • 4 comments

On SDK 2.2.0 if you enable the watchdog then calling rom_reset_usb_boot just halts the calling core but does not trigger bootsel mode. This doesn't seem to be mentioned in the documentation and seems an unusual side effect.

jondurrant avatar Oct 06 '25 09:10 jondurrant

It looks like on RP2350 rom_reset_usb_boot eventually calls rom_reboot which is documented as "Reboot using the watchdog. Resets the chip and uses the watchdog facility to restart.", so maybe that's the "smoking gun" as to why this isn't working? (But I've no idea if this is a deliberate side-effect or an unintentional side-effect.)

lurch avatar Oct 06 '25 09:10 lurch

Good spot. Would explain it as I have the other RP2350 core resetting the watchdog timer. With this information I could write a workaround so the core resetting the watchdog is the one to trigger bootsel.

In terms of issue, either the side effect needs to be documented or a fix put in place.

jondurrant avatar Oct 06 '25 09:10 jondurrant

I think the full explanation here is that the core calling rom_reboot sets the watchdog up for a BOOTSEL reboot, then loads 10ms into the watchdog and goes __wfi() to wait for the reboot. If the other core prevents that watchdog reboot (by eg reloading the watchdog) then the calling core just remains in __wfi(). Fix is to not use the watchdog for 2 things at the same time, as there's only 1 watchdog.

will-v-pi avatar Oct 07 '25 08:10 will-v-pi

Thanks @will-v-pi . I agree with @jondurrant that there ought to be a warning about this in the docs, especially as https://www.raspberrypi.com/documentation/pico-sdk/runtime.html#group_pico_bootrom_1ga1bbe1c1df02daaa7b68a0c95fb9dc545 doesn't mention the watchdog at all.

lurch avatar Oct 07 '25 08:10 lurch