Elektrotechnika

Jak přehrát bootloader desky Arduino s čipem ATmega 328PB

25.5.2025 Upraveno 25.5.2025
spravce

Minulý rok před Vánocemi jsem si pořídil startovací sadu s klonem desky Arduino Uno. Sada je kromě desky a mnoha dalších užitečných komponent vybavena i návodem na různé experimenty, které se s nimi dají dělat. Když jsem nahrával do desky kód toho posledního, celý proces skončil se sérií chybových hlášek. Od té doby jsem na desku již nemohl nahrávat žádný kód. Po delším pátrání jsem zjistil, že za toto chování je zodpovědná část firmwaru, které se říká bootloader. Pokud nechcete číst článek, podívejte se na mé video, kde následující řádky prakticky vysvětluji. Přehledně seřazenou fotodokumentaci celého postupu si prohlédněte v mé galerii. Druhý díl článku naleznete na tomto odkazu.

Jednou z výhod desek Arduino je právě možnost nahrávat vlastní firmware na jejich řídící mikročip přes USB rozhraní. O tuto funkcionalitu se stará právě malá, většinou od výrobce předinstalovaná část firmwaru, nazývaná bootloader. Pokud si pořídíme levný klon desky Arduino, může se nám stát, že bootloader nahraný mít nebude. Stejně tak, což se stalo i mě, si jej můžeme neúmyslně poškodit. V tu chvíli deska ztrácí svoji uživatelskou přívětivost a není možné, ji programovat jednoduše přes USB.

Připojení desky Arduino k PC

Může se vyskytnout situace, kdy je nepřítomnost bootloaderu na čipu žádoucí. Jedná se o případy, kdy chceme využít plnou kapacitu jeho paměti. Stále máme možnost na desku nahrávat svůj vlastní firmware. Potřebujeme k této činnosti ale externí programátor, který určitým způsobem připojíme na piny desky. To zde ale rozebírat nebudu.

Poškozený nebo chybějící bootloader ještě neznamená, že máme desku vyhodit. Existuje jednoduchý způsob, jak nahrát nový. Můžeme k tomu použít již výše zmíněný externí programátor. V tomto článku popíšu postup, jak k tomuto účelu použít druhou desku Arduino. Samotný postup je velmi jednoduchý a internet je různých návodů plný. Příliš se však nikde nedozvíte, co dělat v případě nějakých komplikací. Můj problém byl mírně odlišný čip, než jaký používají originální desky Arduino.

Řídícím čipem originálních desek je totiž ATmega 328P. S podpisem pro tento čip počítá také Arduino AVR Boards, tedy varianta Arduino Core, která bývá předinstalovaná v Arduino IDE. To je právě originální vývojové prostředí, které používáme pro vývoj firmwaru k deskám Arduino. Arduino Core je mezivrstva, která se velmi jednoduše řečeno stará o komunikaci mezi naším kódem a hardwarem desky. Levnější klony těchto desek ale často používají různé další varianty čipů ATmega. Ta moje disponuje verzí ATmega 328PB. S podpisem tohoto čipu se ale v Arduino AVR Boards nepočítá. Takže všechny moje pokusy o přehrání bootloaderu skončily s chybovou hláškou o nerozpoznaném podpisu čipu. Na některých diskusích se dočtete, že to není žádný problém a že se přepsání má vynutit. To s sebou ale nese riziko poškození čipu. Proto jsem hledal jiné způsoby a o jeden z nich se s vámi teď podělím.

Internet je plný spousty variant Arduino Core určených pro všemožné čipy.  Tento návod ukazuje jak obecný postup přehrání bootloaderu, tak zároveň naráží na drobné detaily, které jsou důležité, pokud má naše deska nějakou méně typickou variantu řídícího čipu. Z toho důvodu jsem si vybral knihovnu MiniCore a nainstaloval ji do svého Arduino IDE. Jednoduše řečeno se jedná o Open Source variantu Arduino Core. Je rozšířená o kód specializovaný právě pro různé další typy čipů ATmega. Jedním z nich je právě i náš ATmega 328PB. Zdrojový kód i dokumentaci potřebnou k projektu nalezneme v repositáři na GitHubu: MCUdude/MiniCore: Arduino hardware package for ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB V dalších řádcích si probereme postup instalace knihovny.

Nastavení Arduino IDE

V našem Arduino IDE postupujeme na „File -> Preferences“. Otevře se nám nabídka, kde máme možnost měnit různá nastavení našeho vývojového prostředí. Zajímá nás kolonka „Additional boards manager URLs“. Do ní vložíme odkaz, který najdeme právě v oficiální dokumentaci k projektu. Pro přehlednost ho uvedu: https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json. Dále už jen klikneme na OK a pokračujeme dále.

V levém panelu klikneme na nabídku „Boards Manager“. Dále je nejrychlejší cesta využít vyhledávací pole v této nabídce. Zadáme „MiniCore“ a příslušný balíček by se nám měl zobrazit. Je možné, že budeme muset chvíli počkat, než se knihovna po zadání URL adresy načte a neuvidíme ji hned. Pokud tedy vidíme balíček „MiniCore“ nejspíš bude stačit pouze kliknout na tlačítko „Install“. V rozbalovací nabídce vedle máme možnost si vybrat i verzi knihovny. Ve výchozím nastavení ale bývá zvolena ta nejnovější, což nám vyhovuje. Teď už jen chvíli počkáme, než se celý balíček naistaluje a můžeme pokračovat dále.

Výběr knihovny MiniCore

V tuto chvíli závisí další postup na typu desky a jejího řídícího čipu, který používáme. Principálně je vše stejné ale pro zachování přehledu budu pojednávat o kombinaci, se kterou jsem sám pracoval. Jako programovací desku jsem použil Arduino Uno s čipem Atmega 328P, tedy běžnou variantu. Cílová deska, tedy ta pro přehrání bootloaderu byla opět Arduino UNO ale s čipem ATmega 328PB.

Jelikož už je tento článek dostatečně dlouhý a téma jsme zdaleka nevyčerpali, necháme si pokračování na příště. Budu se na vás těšit a zatím si můžete přečíst druhý díl článku.

Pro vstup do diskuze se prosím přihlašte