cancel
Showing results for 
Search instead for 
Did you mean: 

SD Card bootloader for STM32F407

xmen4001
Associate
Posted on February 26, 2015 at 02:14

Hello:

I need develop an SD card bootloader for STM32F407, mine also will include encrypted XTEA algorithm. I developed it already time ago for Microchip PIC32, and now need to do it sot STM32F4.

I have donwload already a lot of information, even some examples about USB and Serial bootloaders, and started to develop mine for SD Card.

But after read a lot, also some in this forum Im a bit confused about the named ''Vector Table'', do not know exactly what is it and how must config it properly in a Bootloader.

I know about how config Linker Script for bootloader and for firmware programms, about the ROM ORIGIN.

Please may somebody confirm if I must apply these config to bootloader ??:

1.- Jump to user application must to be Application Address + 0x04. Why ??

2.- In user application always must include in main.c 

 NVIC_SetVectorTable(NVIC_VectTab_FLASH, Application address);

3.- In user Application, modify Linker script ROM ORIGIN to first address of user application.

Thats right, need to apply some more to bootloader or firmware applications ???

Thank you and kind regards.

2 REPLIES 2
Posted on February 26, 2015 at 02:35

Yes, seems fair enough.

You know there are books and manuals that describe the function of the micro processor? example.lst file, the address stored in the second vector entry (+4) points to the ResetHandler routine.

...
56 00000200 ; Vector Table Mapped to Address 0 at Reset
57 00000200 AREA RESET, DATA, READONLY
58 00000000 EXPORT __Vectors
59 00000000 EXPORT __Vectors_End
60 00000000 EXPORT __Vectors_Size
61 00000000
62 00000000 00000000
__Vectors
DCD __initial_sp ; Top of Stack
63 00000004 00000000 DCD Reset_Handler ; Reset Handler
64 00000008 00000000 DCD NMI_Handler ; NMI Handler
65 0000000C 00000000 DCD HardFault_Handler ; Hard Fault
Handler
66 00000010 00000000 DCD MemManage_Handler
; MPU Fault Handler
67 00000014 00000000 DCD BusFault_Handler
; Bus Fault Handler
68 00000018 00000000 DCD UsageFault_Handler ; Usage Faul
t Handler
69 0000001C 00000000 DCD 0 ; Reserved
70 00000020 00000000 DCD 0 ; Reserved
71 00000024 00000000 DCD 0 ; Reserved
72 00000028 00000000 DCD 0 ; Reserved
73 0000002C 00000000 DCD SVC_Handler ; SVCall Handler
74 00000030 00000000 DCD DebugMon_Handler ; Debug Monito
r Handler
75 00000034 00000000 DCD 0 ; Reserved
76 00000038 00000000 DCD PendSV_Handler ; PendSV Handler
77 0000003C 00000000 DCD SysTick_Handler
; SysTick Handler
78 00000040
79 00000040 ; External Interrupts
80 00000040 00000000 DCD WWDG_IRQHandler ; Window WatchD
...

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
xmen4001
Associate
Posted on February 26, 2015 at 03:21 Than you, clive1 for your help. One more question please: I do not understand this function to check if there is a User Application to allow that bootloader jump to it or not. Why that

if ((sp & 0xFFFE7FFF) == 0x20000000)

?? Its not enough to check if the first Application Address is to 0xFFFFFFFF, if true then there is not User Application, and bootloader can not jump.

bool checkUserCode (u32 usrAddr) {
u32 sp = *(vu32*) usrAddr;
if ((sp & 0xFFFE7FFF) == 0x20000000)

 {

return (TRUE);
} else {
return (FALSE);
}
}