STM32 bootloader
STM32 bootloader
Jag håller på med en STM32 bootloader där tanken är att använda ST inbyggda bootloader för att ladda in min bootloader och sedan använda min bootloader till att ladda in applikationsprogramvaran.
Jag använder Coocox IDE och GCC 4.8.2 (inte helt säker på versionen då jag sitter vid en annan dator nu).
Defaultaddressen när man använder ST bootloader är 0x08000000
Jag har tänkt lägga upp adressen på följande vis:
* Bootloader 0x08000000 - 0x08005000, dvs 20 kB reserverade för bootloader
* Applikation 0x08005000 och uppåt (beroende på STM32 variant)
Nu till mina frågor:
* Kan jag lägga flashaddressena på detta visa eller måsta jag göra någon memory remapping från 0x08000000 till 0x08005000 innan hopp till applikationen (eller i applikationen)?
* Hur det blir interrupt vektorer när man lägger applikationnen på address 0x08005000? Kommer detta "lösa sig självt" med GCC eller måste jag göra någon specialare
Jag använder Coocox IDE och GCC 4.8.2 (inte helt säker på versionen då jag sitter vid en annan dator nu).
Defaultaddressen när man använder ST bootloader är 0x08000000
Jag har tänkt lägga upp adressen på följande vis:
* Bootloader 0x08000000 - 0x08005000, dvs 20 kB reserverade för bootloader
* Applikation 0x08005000 och uppåt (beroende på STM32 variant)
Nu till mina frågor:
* Kan jag lägga flashaddressena på detta visa eller måsta jag göra någon memory remapping från 0x08000000 till 0x08005000 innan hopp till applikationen (eller i applikationen)?
* Hur det blir interrupt vektorer när man lägger applikationnen på address 0x08005000? Kommer detta "lösa sig självt" med GCC eller måste jag göra någon specialare
Re: STM32 bootloader
Ändra i irom1 på applikationsproj så lär det funka rakt av i coocox.
Den inbyggda bootloadern i stm kommer du åt med bootpinnarna. När du startar i vanligt läge så kommer den starta ditt program/din bootloader i flashen. Då är den inbyggda inte inblandad.
Varför skriver du en egen bootloader?
Den inbyggda bootloadern i stm kommer du åt med bootpinnarna. När du startar i vanligt läge så kommer den starta ditt program/din bootloader i flashen. Då är den inbyggda inte inblandad.
Varför skriver du en egen bootloader?
Re: STM32 bootloader
Jag skriver en egen bootlooder helt enkelt för att ST inte stödjer det interface jag behöver.
Re: STM32 bootloader
De Flash adresser du valt nu kommer inte fungera.
Du måste aligna med dess interna "pages" vilket är på 32kB bland de första sen blir de större.
Detta står dock i deras flash programing appnote.
När det gäller flash offset för vektortabellen så ska applikationen göra det.
Applikationen måste vara kompilerad för att inte ta upp flashet som bootloadern ligger i annars stämmer inte adresser.
Du måste aligna med dess interna "pages" vilket är på 32kB bland de första sen blir de större.
Detta står dock i deras flash programing appnote.
När det gäller flash offset för vektortabellen så ska applikationen göra det.
Applikationen måste vara kompilerad för att inte ta upp flashet som bootloadern ligger i annars stämmer inte adresser.
Re: STM32 bootloader
Korken: måste behöver man inte, blir bara mycket enklare att kunna radera hela sektorn utan behöva hantera delar av innehållet....
Men jag håller med att det är mycket rekommenderat att lägga koden så den ligger efter flash-bankerna
Men jag håller med att det är mycket rekommenderat att lägga koden så den ligger efter flash-bankerna
Re: STM32 bootloader
Måste va kanske ett lite starkt ord. 
Kan säga det som extremt mycket rekommenderat istället.

Kan säga det som extremt mycket rekommenderat istället.

Re: STM32 bootloader
Lite kvällsläsning. 
Flash programming manual för STM32F40xxx och STM32F41xxx:
http://www.st.com/st-web-ui/static/acti ... 023388.pdf
Flash programming manual för STM32F10xxx:
http://www.st.com/st-web-ui/static/acti ... 283419.pdf

Flash programming manual för STM32F40xxx och STM32F41xxx:
http://www.st.com/st-web-ui/static/acti ... 023388.pdf
Flash programming manual för STM32F10xxx:
http://www.st.com/st-web-ui/static/acti ... 283419.pdf
Re: STM32 bootloader
Jag behöver GSM interface, dvs GPRS via UART för programmering.
Vad gäller adresserna så har de STM32F1 jag använder en page på 1 kB dvs det bör gå att ha 20 kB som bootloader. Man raderar alltså en 1kB page i taget.
Micke_S:
Jag har ändrat i memory.ld till
MEMORY
{
/*rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x00010000*/ /* Ingen boot loader*/
rom (rx) : ORIGIN = 0x08005000, LENGTH = 0x0000B000 /* Boot loader */
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00005000
}
men hex filen säger fortfarande address 0x08000000
Var hitta jag irom1 i Coocox?
Vad gäller adresserna så har de STM32F1 jag använder en page på 1 kB dvs det bör gå att ha 20 kB som bootloader. Man raderar alltså en 1kB page i taget.
Micke_S:
Jag har ändrat i memory.ld till
MEMORY
{
/*rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x00010000*/ /* Ingen boot loader*/
rom (rx) : ORIGIN = 0x08005000, LENGTH = 0x0000B000 /* Boot loader */
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00005000
}
men hex filen säger fortfarande address 0x08000000
Var hitta jag irom1 i Coocox?
Re: STM32 bootloader
Hittade det
Man höger klickar på projektet, väljer Configuration och sedan Link. Där kan man välja start och size på IROM1. Nu definerar hexfilen rätt startaddress!
Man höger klickar på projektet, väljer Configuration och sedan Link. Där kan man välja start och size på IROM1. Nu definerar hexfilen rätt startaddress!
Re: STM32 bootloader
Låter spännande! Berätta gärna mer om projektet om det är möjligt.Rick81 skrev:Jag behöver GSM interface, dvs GPRS via UART för programmering.
Re: STM32 bootloader
Tror jag fått ordning på programmeringen nu (visserligen kör jag bara UART nu, inte GSM) och de addresser och checksummor jag kollat stämmer mot STs bootloader.
Desssvärre får jag att stm32 kraschar när den hoppar till applikationen oavsett om jag använder ST eller min bootloader.
När jag gjorde en bootloader till en STR912 hade jag också problem med hopp från bootloader till applikationen. Har för mig att hoppet var tvunget att göras i 16 MHz och inte 96 MHz. Någon som vet om det finns nåt liknande begränsning för STM32?
Desssvärre får jag att stm32 kraschar när den hoppar till applikationen oavsett om jag använder ST eller min bootloader.
När jag gjorde en bootloader till en STR912 hade jag också problem med hopp från bootloader till applikationen. Har för mig att hoppet var tvunget att göras i 16 MHz och inte 96 MHz. Någon som vet om det finns nåt liknande begränsning för STM32?