mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Added feature to reset into DFU from omv onboard software when receiving USBDB_BOOT
This commit is contained in:
parent
9618f383ea
commit
dbb2019b9a
@ -76,7 +76,20 @@ defined in linker script */
|
|||||||
.section .text.Reset_Handler
|
.section .text.Reset_Handler
|
||||||
.weak Reset_Handler
|
.weak Reset_Handler
|
||||||
.type Reset_Handler, %function
|
.type Reset_Handler, %function
|
||||||
|
|
||||||
Reset_Handler:
|
Reset_Handler:
|
||||||
|
ldr r0,=0x20002000 /* load magic number location */
|
||||||
|
ldr r2,[r0, #0]
|
||||||
|
str r0,[r0, #0] /* invalidate */
|
||||||
|
ldr r1,=0xDEADBEEF /* if magic number found */
|
||||||
|
cmp r2,r1
|
||||||
|
bne EnableCCM /* run the bootloader, else... */
|
||||||
|
|
||||||
|
Reboot_Loader:
|
||||||
|
ldr r0,=0x1FFF0000
|
||||||
|
ldr sp,[r0, #0]
|
||||||
|
ldr r0,[r0, #4]
|
||||||
|
bx r0
|
||||||
|
|
||||||
EnableCCM:
|
EnableCCM:
|
||||||
/* enable ccm clock */
|
/* enable ccm clock */
|
||||||
@ -122,6 +135,7 @@ LoopFillZerobss:
|
|||||||
/* Call the application's entry point.*/
|
/* Call the application's entry point.*/
|
||||||
bl main
|
bl main
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
.size Reset_Handler, .-Reset_Handler
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
#include "py/py_file.h"
|
#include "py/py_file.h"
|
||||||
#include "core_cm4.h"
|
#include "core_cm4.h"
|
||||||
#include "usbdbg.h"
|
#include "usbdbg.h"
|
||||||
#include "rcc_ctrl.h"
|
#include "stm32f4xx_hal_rcc.h"
|
||||||
|
|
||||||
#define USB_TX_BUF_SIZE (64)
|
#define USB_TX_BUF_SIZE (64)
|
||||||
static int xfer_bytes;
|
static int xfer_bytes;
|
||||||
@ -192,26 +192,36 @@ void usbdbg_control(void *buffer, uint8_t request, uint16_t length)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case USBDBG_BOOT:
|
case USBDBG_BOOT:
|
||||||
|
/* http://goo.gl/VcKqst
|
||||||
|
* disable IRQ, reset USART1 and RCC before setting MSP/PC.
|
||||||
|
* Disable all peripheral clocks
|
||||||
|
* Disable used PLL
|
||||||
|
* Disable interrupts
|
||||||
|
* Clear pending interrupts
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
rcc_ctrl_hsi(); // run off the HSI clock, no PLL
|
__set_PRIMASK(1); // disable interrupts
|
||||||
SysTick->CTRL = 0; // reset the SysTick timer
|
HAL_RCC_DeInit(); // reset RCC
|
||||||
|
HAL_USART_DeInit( ); // reset USART1
|
||||||
|
SysTick->CTRL = 0; // reset the SysTick timer
|
||||||
SysTick->LOAD = 0;
|
SysTick->LOAD = 0;
|
||||||
SysTick->VAL = 0;
|
SysTick->VAL = 0;
|
||||||
__set_PRIMASK(1); // disable interrupts
|
//__set_MSP(0x20001000); // set main SP to its default
|
||||||
__set_MSP(0x20001000); // set main SP to its default
|
|
||||||
*/
|
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"ldr r0, =0x40023844\n\t" // RCC_APB2ENR
|
|
||||||
"ldr r1, =0x00004000\n\t" // enable SYSCFG clock
|
|
||||||
"str r1, [r0, #0]\n\t"
|
|
||||||
"ldr r0, =0x40013800\n\t" // SYSCFG_MEMRMP
|
"ldr r0, =0x40013800\n\t" // SYSCFG_MEMRMP
|
||||||
"ldr r1, =0x00000001\n\t" // remap ROM at zero
|
"ldr r1, =0x00000001\n\t" // remap ROM at zero
|
||||||
"str r1, [r0, #0]\n\t"
|
"str r1, [r0, #0]\n\t"
|
||||||
"ldr r0, =0x1fff000\n\t" // load ROM base
|
"ldr r0, =0x1fff000\n\t" // load ROM base
|
||||||
"ldr sp,[r0, #0]\n\t" // assign main stack pointer
|
"ldr sp,[r0, #0]\n\t" // assign main stack pointer
|
||||||
"ldr r0,[r0, #4]\n\t" // load bootloader address
|
"ldr r0,[r0, #4]\n\t" // load bootloader address
|
||||||
"bx r0\n\t"
|
"bx r0\n\t"
|
||||||
);
|
);
|
||||||
|
// STM32F40xxx e.g., 405, 407 : 0x1FFF77DE
|
||||||
|
// STM32F429xx : 0x1FFF76DE
|
||||||
|
*/
|
||||||
|
// set magic flag => reset handler will jump into boot loader
|
||||||
|
*((uint32_t *)0x20002000) = 0xDEADBEEF;
|
||||||
|
NVIC_SystemReset();
|
||||||
while (1);
|
while (1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -220,3 +230,5 @@ void usbdbg_control(void *buffer, uint8_t request, uint16_t length)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user