diff --git a/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h b/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h index 308721cdf..125b3beea 100644 --- a/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h +++ b/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h @@ -86,6 +86,12 @@ extern unsigned char *OMV_UNIQUE_ID_ADDR; // USB IRQn. #define OMV_USB_IRQN (USBCTRL_IRQ_IRQn) +// Jump to bootloader function. +#ifndef LINKER_SCRIPT +void pico_reset_to_bootloader(void); +#endif +#define MICROPY_RESET_TO_BOOTLOADER pico_reset_to_bootloader + // Linker script constants (see the linker script template port/x.ld.S). #define OMV_FB_MEMORY RAM // Framebuffer, fb_alloc #define OMV_MAIN_MEMORY RAM // data, bss and heap memory diff --git a/src/omv/boards/PICO/omv_boardconfig.h b/src/omv/boards/PICO/omv_boardconfig.h index f489657e5..ed5c2b470 100644 --- a/src/omv/boards/PICO/omv_boardconfig.h +++ b/src/omv/boards/PICO/omv_boardconfig.h @@ -86,6 +86,12 @@ extern unsigned char *OMV_UNIQUE_ID_ADDR; // USB IRQn. #define OMV_USB_IRQN (USBCTRL_IRQ_IRQn) +// Jump to bootloader function. +#ifndef LINKER_SCRIPT +void pico_reset_to_bootloader(void); +#endif +#define MICROPY_RESET_TO_BOOTLOADER pico_reset_to_bootloader + // Linker script constants (see the linker script template port/x.ld.S). #define OMV_FB_MEMORY RAM // Framebuffer, fb_alloc #define OMV_MAIN_MEMORY RAM // data, bss and heap memory diff --git a/src/omv/ports/rp2/main.c b/src/omv/ports/rp2/main.c index 440eed58a..43d2ef566 100644 --- a/src/omv/ports/rp2/main.c +++ b/src/omv/ports/rp2/main.c @@ -47,6 +47,7 @@ #include "hardware/rtc.h" #include "hardware/structs/rosc.h" #include "pico/unique_id.h" +#include "pico/bootrom.h" #include "omv_boardconfig.h" #include "framebuffer.h" @@ -86,6 +87,11 @@ void __fatal_error() } } +void pico_reset_to_bootloader(void) +{ + reset_usb_boot(0, 1); +} + void exec_boot_script(const char *path, bool interruptible) { nlr_buf_t nlr; diff --git a/tools/picotool b/tools/picotool new file mode 100755 index 000000000..6c7b7a76f Binary files /dev/null and b/tools/picotool differ