DFU: fix transitions between runtime and DFU mode
we now always go through a processor reset to avoid any state that might
be persistent/left-over during the switch.
diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c
index f4792f5..bc89b1b 100644
--- a/firmware/libboard/common/source/board_cstartup_gnu.c
+++ b/firmware/libboard/common/source/board_cstartup_gnu.c
@@ -125,6 +125,7 @@
};
#if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu)
+#include "usb/device/dfu/dfu.h"
static void BootIntoApp(void)
{
unsigned int *pSrc;
@@ -134,7 +135,7 @@
SCB->VTOR = ((unsigned int)(pSrc)) | (0x0 << 7);
appReset = pSrc[1];
- printf("Booting into App from %p, PC=%p\r\n", pSrc, appReset);
+ g_dfu->state = DFU_STATE_appIDLE;
appReset();
}
@@ -153,8 +154,11 @@
#if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu)
- if (*(unsigned long *)IRAM_ADDR != 0xDFDFDFDF)
+ if (g_dfu->magic != USB_DFU_MAGIC) {
BootIntoApp();
+ /* Infinite loop */
+ while ( 1 ) ;
+ }
#endif
/* Initialize the relocate segment */