Dobrý den,
chtěl bych si vyrobit malé kapesní hodinky. Všechno naostro bez vyzkoušení na nepájivém poli (teď nemám jinou možnost), a tak předpokládám, že moje ATMega32 v smd provedení bude potřebovat přeprogramovat znovu a znovu. Logická chyba tam určitě někde bude. Protože naprogramovat takto miniaturní čip je pro mě docela problém (stačí že to budu muset dělat nejméně jednou), a také protože do pouzdra na tyto hodinky se nevejde konektor na programování, zjistil jsem si, že mám použít “jakýsi” bootloader, a nejlépe bych tam dal mikro usb konektor na programování.
Četl jsem si dost, počínaje datasheetem, ale pořád nerozumím o co se vlastně jedná, nebo jak si ho naprogramovat či sehnat nějaký jiný který tam nahraju? A co vlastně potom, musím mít nějaký speciální program, který mi bude nahrávat .hex soubor, nebo to už vždycky jen pošlu do usb “normálně” a můj dosavadní program na nahrávání “eXtreme Burner - AVR” s tim nebude mít problém? Kam připojím datové vývody USB kabelu? Budu od nahrání už jen nahrávat na část paměti pro bootloader který si ji nahraje do zbytku sám?
Takovéto projekty často nedělám, a kdykoliv, kdy jsem něco potřeboval, sehnal jsem nespočet návodů na youtube. I kdyby po kouskách, vždycky to šlo složit dohromady a udělat z toho výsledek. Avšak u bootloaderu skoro nic. Každý ho jen nahrává do Arduina a ani nevim odkud ho berou (či jak si sehnat “svůj” pro usb programování) a nastaví pár pojistek (těm jako jediným rozumím). Nic víc, nikdo nemá stejné otázky jako já, nikdo na ně neodpovídá. Něco mi musí unikat.
Samozřejmě základy o bootloaderu jsem si přečetl, takže zhruba vím o co se jedná, ale výše zmíněné otázky stále trvají. Nepřišel jsem se sem vylít a šup sem odpovědi, ale spíš jen poprosit, jestli nemáte užitečné zdroje k výše zmíněným otázkám, popřípadě nějaké tutoriály (pár jsem jich taky prošel).
Bootloader není nic jiného, než program, který umí přenést data odněkud do programové paměti mcu. Záměrně píšu odněkud, protože zdroj dat může být v podstatě cokoliv. Pojistky se přenastavují proto, že pro bootloader je vyhrazená paměť na konci paměťového prostoru procesoru a spouští se vždy po zapnutí mcu. Na základě nějakých podmínek (ty si opět volíš sám) buď spustí vlastní program nebo zůstane čekat na příjem dat. Většinou se používá UART, protože je to nejjednodušší, jak nasypat program do mcu. USB rozhraní bys musel implementovat do ATmega32 softwarově a na to by Ti pravděpodobně paměť vyhrazená pro bootloader nestačila. Do bootloaderu se sypou většinou BIN a ne HEX soubory, protože HEX soubory bys musel v mcu ještě překládat do BIN a to by se opět nemuselo do paměti pro bootloader vejít. Na webu samozřejmě existuje spousta bootloaderů připravená pro všeobecné použití. I Arduino není nic jiného, než AVR s nahraným bootloaderem pro UART komunikaci s prostředím. A pochopitelně, potřebuješ vědět, jakým protokolem spolu komunikují. To pochopitelně potřebuješ u všech bootloaderů.
Podmínky, za jakých se (ne)spustí hlavní program a komunikační protokol a rozhraní si samozřejmě určuješ sám pouze v případě, že si bootloader programuješ sám. Jinak se musíš přizpůsobit tomu, co si stáhneš.
Pokud chceš nahrávat přes USB, příklad třeba zde fischl.de/avrusbboot/ , asi 5 sekund na googlu. Nezkoušel jsem. Bootloader je program, který musíš nahrát klasicky přes extreme burner a ISP jednou, potom to půjde přes to USB. Pro nahrávání přes USB už není potřeba žádný programátor, pouze program, který to pošle do uC (prakticky každý terminál). Program přeložíš ve svém prostředí (Atmel Studio, Eclipse atd) a výsledný soubor tam nahraješ. Ve výše uvedeném příkladě musíš přehodit jumper aby se spustil bootloader a po nahrání ho přehodíš zpět. Booloader výše uvedený yabírá 1k paměti, což se vleze skoro všude.