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