STM32F1xx vlastn bootloader
milger
milger na pobox.sk
Pátek Květen 16 20:03:43 CEST 2014
Mam nieco podobne vyriesene pre LPC2368. STM32F1xx nepoznam, ale
predpokladam ARM ako ARM.
Koli motivacii kratko popisem + par poznamok zo SRC:
Je tam celkom problem s roznymi privilegovanymi rezimami procesora
(napr. SW reset sa neda urobit z app. skokom na adresu 0).
Vyuzivam HW wdog na SW reset a HW detekciu 1.startu po zapnuti
napajania. Po zapnuti napajania sa aktivuje loader, robi sa pripadny
upgrade alebo sa hlada spustitelny SW a jeho adresa sa ulozi do RAM. Po
resete (HW, SW) sa uz iba odskoci vo vsetkych vektoroch prerusenia na
spustitelny SW na adresu z RAM, je to rychle a nenarocne, iba zo 5
instrukcii navyse.
Samozrejme to je chovanie ktore som potreboval ja, loader sa moze napr.
aktivovat po kazdom resete a upgrade nemusi hladat v internej FLASH ale
priamo cez USB...
/* - Loader potrebuje 8B na kazdom STACKu, aj v beziacej aplikacii
/SW/ */
/* - Loader zaberie 4B na adrese ETHERNET RAM 0x7FE00000 (adresa
platneho SW pri resete) */
/* */
/* - SW musi byt kompilovany medzi 0x00008000 a 0x0003FFFF */
/* - SW musi mat standardne vektory prerusenia */
/* - SW musi mat kazdy STACK vecsi o 8B pre potreby loaderu */
/* - SW nesmie pouzivat pamat RAM na 0x7FE00000-0x7FE00003
*/
/* - SW musi mat moznost zapisat upgrade do FLASH od bloku 15 a zapisat
dlzku a CRC do bloku 22 */
/* */
/* - Upgrade musi byt ulozeny od bloku 15 FLASH (0x00040000) */
/* - Upgrade musi mat na adrese 0x00040000-0x00041000 ako prvu tabulka
vektorov preruseni */
/* - Upgrade musi obsahovat v bloku 22 FLASH na adrese 0x0007D000
dlzku */
/* - Upgrade musi obsahovat v bloku 22 FLASH na adrese 0x0007D004
kontrolny sucet (U8 += U8) */
/* */
/* - Loader po beznom resete okrem zapnutia napajania, spusti SW na
ktory ukazuje RAM 0x7FE00000 */
/* - Ak loader po zapnuti napajania najde upgrade, kopiruje ho do FLASH
od 0x00008000 a spusti */
/* - Ak loader po zapnuti napajania nenajde upgrade, hlada vektory
prerusenia ako prve na adrese */
/* FLASH 0x00008000-0x00008FFF, ulozi ich adresu do RAM
(0x7FE00000) a spusti program resetom (wDog) */
/* - Ak loader po zapnuti napajania nenajde ani vektory prerusenia
ani upgrade, */
/* zastane v nekonecnej slucke a system sa definitivne posral
*/
/* */
/* - Loader po zapnuti napajania signalizuje aktivaciu, 1s. rychlo
blika ledkov */
/* - Loader pocas hladania upgrade, palenia upgrade a hladania SW
trvalo svieti ledkov */
/* - Loader po najdeni a uspesnom napaleni upgrade 1s. blika
rychlejsie ako po zapnuti napajania */
/* - Loader po zisteni ze nema spravny SW na spustenie, trvalo blika
ledkov kratkymi zableskami */
/* - Loader po beznom resete pokial ma spravny SW na spustenie
nesignalizuje ledkov nic */
/* */
/**************************************************************************************************/
On 16. 5. 2014 19:36, Jaroslav Buchta wrote:
> Neresil nekdo? Nejak me nenapada, jak to udelat, aby v procesoru
> vzdycky zustal funkcni zavadec. Vektory predpokladam presmerovat
> nejdou a nezbyva, nez program ukladat od adresy 0, cili pokud to selze
> je to v pytli. Na tohle jsou dobre AVR.
> Na jedne desce jsem k tomuto ucelu pouzil dalsi ATMEGA8, ktery tam
> nasype program z UART nebo externi FLASH, ale to je ponekud
> tezkopadne. Melo by to byt ovladatelne pouze pres USB procesoru, asi v
> rezimu VCP.
>
> ---
> This email is free from viruses and malware because avast! Antivirus
> protection is active.
> http://www.avast.com
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list