Seznámení s bootloaderem - jak funguje?

To zavisi od komunikacnej rychlosti. Jasne, ze na 9600Bd nebudes dosahovat rychlost programovania ako cez SPI - napriklad 1 alebo az 2MHz pri 8MHz RC.

Takový základ bootloderu je snad v každém datasheetu ATmega. Kapitola “Serial downloading”. Při tvorbě bootloaderu je třeba mít na zřeteli:

  1. Bootloader (dále jen BL) je vždy nadřazen aplikaci, tedy něco jako bios na PC. Proto reset vektor musí vždy volat BL. Ten rozhodne, zda spustí aplikaci (JMP 0x0) nebo bootování. Rozhodování se zpravidla děje na základě testu integrity aplikace, např. kontrolním součtem. Čekání 4 sek a pak spouštět aplikaci nedává smysl, protože aplikace nemusí být po předchozím bootování Ok. To by se pak zařízení hroutilo vždy po zapnutí.

  2. BL lze zavolat z aplikace, např. přímo z menu, nebo stisknutím nějaké kombinace tlačítek. Lze použít např. podržení tlačítek a zapnutí přístroje. BL se spustí pohým skokem na bootreset.

  3. BL musí mít svoje interrupt vektory. Nikdy nesmí nastat situace, že by se během bootování volalo přerušení aplikace. Vedlo by to k zhroucení. Změna vektoru se provádí v MCUCR, bit IVSEL.

  4. BL se musí postarat také o EEPROM, pokud ji aplikace využívá. Změnou aplikace se též mohou změnit adresy v EEPROM a nemusely by s aplikací souhlasit.

  5. BL by měl znemožnit bootovat data, která mu nepatří. Bootování je zpravidla záležitostí sevisů, popř. uživatelů a ti mohou z neoptarnosti nabootovat jiný program a zařízení by mohly zničit. Pro ochranu se data opatří hlavičkou, která obsahuje nějaké identifikační údaje zařízení. Tytéž údaje má BL v sobě natvrdo vypáleny. Provnáním pak zjistíí, zda jde o správná data.

  6. BL musí být perfektě odladěn. Chyba by mohla způsobit nefunkčnost aplikace nebo zaseknutí celého zařízení včetně BL a už by s tím nešlo nic dělat. Nestačí jen zkusit 3x nabootovat a když to dopadne dobře tak je to odladěné. Je bohužel nutné počítat s kažbou možnou eventualitou, která může nastat, včetně toho, že během bootování vypnou proud, vypadne kablík z konektoru apod.

  7. Data pro BL by měla býs zašifrována pod nechcete, aby se někdo zmocnil vašeho SW. Dešifrovací algoritmus pak musí být v BL a nesmí mít možnost čtení FLASH. Pouze verifikaci. Obslužný program na PC nesmí obsahovat ani scrambler ani descrambler. Data musí být předem zašifrována někde u programátora.

K těmto zásadám jsem se dopracoval po letitých zkušenostech s programováním.

BL nemusi mat ziadne interupt vektory, lebo nerobi nic ine iba visi na linke (testovanim prislusneho bitu z UARTU) a ked pride cela sprava tak ju spracuje, ak je ok tak zapise do Flash a znovu caka, pripadne este po zapise posle do PC odpoved. Ked pre nic ine, tak preto ze BL ma byt co najmensi takze vela inych cinnosti sa od neho neocakava.

Pripadny cas sa da merat pomocou casovaca bez toho aby bol aktivny interupt. Takto mi to normalne funguje a je o starost menej.

Neviem ale vsade sa pise ze prepalovanie frmware je na vlastne nebezpecie, do zariadenia nieje mozne umiestnit tlacitka ani sa jednoducho dostat k DPS kde je programovaci konektor, jedine co je k dispozicii je datova linka rxd txd… predpoklad zmeny firmare je 1-2% ide o to aby to bolo možne…ak sa to pokasle tak sa rozoberie a naprogramuje standartne nevidim problem.

Podstane je ze sito moze uzivatel spravit sam aj ked s nejakym rizikom
Mne take riesenie postacuje…