STM32F1xx vlastn bootloader
Tomáš Halabala
hwnews na regulace.org
Sobota Květen 17 11:10:39 CEST 2014
Zdravím,
já mám následující vlastní řešení, které používám u svých produktů.
Jedná se o skupinu zařízení, které vždy komunikují s okolím IP
protokolem ať už je fyzickým rozhraním LAN / WiFi / USB nebo jiné IP
kompatibilní medium. Hlavní výhody to má v tom, že aplikaci na PC je
jedno jak je zařízení připojené a nepotřebuji žádné vlastní ovladače,
protože třeba i přes USB se zařízení tváří jako USB síťový adaptér,
takže se automaticky použijí ovladače, které jsou součástí OS.
Flash je rozdělená na 4 nezávislé bloky:
1) Blok od adresy 0 je pro hlavní program a všechny jeho podsekce, které
vytvoří linker, který je omezen pouze na tento blok.
2) Blok srovnatelné velikosti nebo větší jako 1 slouží jako úložiště pro
data
3) Blok s konfigurací, kde jsou uloženy údaje o konkrétním kusu produktu
jako je např. sériové číslo, MAC adresy, VID, PID atd.
4) Bootloader
Linker má k dispozici blok 1 a přeložený program funguje se standardním
umístěním vektorů. Vše co je potřebné pro zajištění komunikace s okolím
je součástí hlavního programu, který volá podle potřeby funkce
"bootloaderu", které mají pevné a neměnné adresy. Jedná se vlastně jen o
jakousi sadu funkcí pro manipulaci s flash pamětí a s programovatelnými
pojistkami. Upgrade firmware probíhá tak, že jej hlavní program přijme,
zkontroluje a uloží do bloku 2 a pak jen zavolá funkci z bloku 4, která
si zakáže přerušení (takže žádnou vlastní tabulku vektorů nepotřebuje) a
následně provede samotné přepsání firmwaru v bloku 1 daty, uloženými v
bloku 2. Jediné co se nesmí stát je přerušení napájení zrovna v
okamžiku, kdy probíhá tato závěrečná fáze, ale ta trvá opravdu jen
několik ms, takže je riziko znefunkčnění naprosto minimální.
Výsledkem je, že je možno firmware v takovém zařízení naprosto pohodlně
přepsat třeba i přes internet.
Tomáš
Další informace o konferenci Hw-list