STM32 bootloader nalaganje aplikacije

Vse kar je v povezavi z ARM-Cotrex-M procesorji. Sem spada tako HW kot SW.

Moderator: tilz0R

STM32 bootloader nalaganje aplikacije

OdgovorNapisal/-a marko » 16 Apr 2019, 14:22

Živjo,

Delam bootloader in sem si zadevo zamislil takole:
- bootloader se nahaja na 0x8000000
- aplikacija se nahaja na 0x8005000.
- bootloader se zažene, pogleda če je kaj za upgradat (in upgrada) in/ali zažene aplikacijo

Prvi del, torej pisanje v flash imam narejeno. Težavo pa imam z poganjanjem aplikacije na drugem naslovu. Sem gledal in poskušal vse možne kombinacije "Vector table relocating" pa mi nič ne dela.

Zadnja varianta je tole:
Koda: Izberi vse
typedef void (*pFunction)(void);

#define APPLICATION_ADDRESS        0x08005000

void RunApplication()
{
        pFunction appEntry;
        uint32_t appStack;

   /* Get the application stack pointer (First entry in the application vector table) */
   appStack = (uint32_t) *((__IO uint32_t*)APPLICATION_ADDRESS);

   /* Get the application entry point (Second entry in the application vector table) */
   appEntry = (pFunction) *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);

   /* Reconfigure vector table offset register to match the application location */
   SCB->VTOR = APPLICATION_ADDRESS;

   /* Set the application stack pointer */
   __set_MSP(appStack);

   /* Start the application */
   appEntry();
}


Aplikacijo delam tako, da se poganja na defaultnem 0x8000000 naslovu in je ne spreminjam. Med razvojem bi jo rad pisal direktno v flash, po koncu pa .hex shranil v svojo "obliko" in potem zapisal s pomočjo bootloaderja. Bi moral že aplikacijo napisati tako, da štarta z 0x8005000. Kako to sploh naredim?
Če ti v življenju ne gre in si nesrečen, se spomni na lastnike Renaultov.
marko
 
Prispevkov: 1002
Pridružen: 18 Jan 2015, 02:00
Zahvalil se je: 116 krat
Prejel zahvalo: 124 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 67

Re: STM32 bootloader nalaganje aplikacije

OdgovorNapisal/-a tilz0R » 16 Apr 2019, 19:41

Najprej napiši kateri STM32, prevajalnik in linker imaš.
Tvoja aplikacija, ki se bo nahajala na x naslovu, mora tudi linkerju povedati, da bo le-ta na X naslovu.
Poleg tega bi bilo zaželjeno, da v system_stm32flxyz.c pogledaš če se SCB->VTOR kam postavu v funkciji SystemInit, in če se, nastavi lokacijo kjer pričakuješ da bo tvoja aplikacija, torej 0x08005000.

Poleg tega obstaja trik, da preveriš če je lokacija vsaj bila programirana kdaj :)
To narediš, da pogledaš če se vrednost v appStack začne z 0x20000000. Malo maskinga in bo. Zakaj ta številka? Prvi word v tvojem hexu je vbistvu default stack address, torej najnižji nivo stacka, ki je ponavadi na koncu RAM-a. RAM se ponavadi (na vseh STM32 v defaultu) nahaja na naslovu 0x20000000 in je dolg kolikor pač je. Zato preverjaš samo prvi del.

Potem bo delalo.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1692
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 221 krat
Prejel zahvalo: 442 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32 bootloader nalaganje aplikacije

OdgovorNapisal/-a marko » 17 Apr 2019, 08:00

uC je STM32F303CBTx.

Sem poskusil najprej samo prestaviti aplikacijo na naslov 0x8005000. Pa se ne zažene.

Nastavil sem VECT_TAB_OFFSET na 0x5000, ter vse na 0x8005000 nastavil v linkerju. Vidim, da se shrani na pravi naslov, požene pa se ne. Kaj sem spregledal?

1.png

2.png

3.png
Če ti v življenju ne gre in si nesrečen, se spomni na lastnike Renaultov.
marko
 
Prispevkov: 1002
Pridružen: 18 Jan 2015, 02:00
Zahvalil se je: 116 krat
Prejel zahvalo: 124 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 67

Re: STM32 bootloader nalaganje aplikacije

OdgovorNapisal/-a tilz0R » 17 Apr 2019, 18:09

To bi moralo biti to. Vector tabelo je potrebno nastaviti + linker zašiftati x bytov višje, kar si naredil in jo naloži na MCU.
Sedaj rabiš bootloader, da skoči tja, saj MCU sam ne ve, da si jo prestavil višje.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1692
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 221 krat
Prejel zahvalo: 442 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na ARM-Cortex-M

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost