Zvětšení dostupné flash paměti pro Arduino Nano


Tohle původně neměl být první návod, no co, rovnou začneme něčím zajímavějším, než je blikání ledkou. 

Ukážu ti, jak do oblíbeného Arduino Nano vmáčknout víc kódu. No, nejdůležitější je samozřejmně optimalizace kódu, ale co když už to dál nejde? S tímhle návodem dokážeme flash paměť zvětšit o 1,5kB.

Přece se nevyhneme trochu teorie.

Paměť mikrokontroleru: 

U mikrokontrolerů jsou dva druhy paměti SRAM a Flash. U ATmega328p použité jak v Arduino UNO tak i Nano jsou následující velikosti.

SRAM: 2kB pro proměnné.
Flash: 32kB pro udržení dlouhodobé paměti pro bootloader a samotný program. Možná sis všiml/a, že Arduino UNO má použitelných 32256 bytů flash zatímco Nano jen 30720 bytů. 

Co za tím je? Drobnost. Pojistky.

Bootloader: 

Bootloader je krátký kód, sídlící na začátku flash paměti, který má na starosti komunikaci po USB a ukládání programu do flash paměti. I když to stojí cennou paměť, je pohodlnější připojit Arduino přes USB k počítači, než programy pokaždé nahrávat přes ISP rozhraní nějakým programátorem. 

Fuse bits - pojistky: 

Jednoduše řečeno, je to soubor bitů, který nastavuje základní funkce mikrokontroleru, jako je frekvence, její děličky a spoustu dalšího. A tady je (možná chyba?) zakopaný pes. High Fuse je u Arduina Uno nastavený na 0xDE a u Arduino Nano na 0xDA což je již zmíněný rozdíl v dostupné flash paměti. Mimochodem obě desky používají totožný bootloader Optiboot. 

Youtuber Design Build Destroy nám ukázal, jak změnit pojistky u Arduino Nano aby se do flash paměti vešel delší program. Samotný alokovaný prostor pro bootloader zabírá 2kB, po úpravě pouhých 0,5kB, to je rozdíl 75 % jen změnou pojistek a bootloaderu se to nedotkne.

Jak to nastavit?

No, celkem jednoduše. Najdi si textový soubor s nastavením desek boards.txt. Tenhle soubor najdeš jednoduše přes Arduino IDE nastavení. Soubor > Vlastnosti a tam klikni na odkaz, kde je uložený soubor preferences.txt. 

Následně se proklikej dál až k souboru boards.txt, který si otevři. Cesta se může lišit, v mé portable verzi je: ...\packages\arduino\hardware\avr\1.8.3\

Na konec, nebo za definici Arduino Nano, přidej celý následující kód.

 

Soubor ulož a zavři. Restartuj IDE a ve výběru desek najdeš "Arduino nano Small Optiboot". 
A teď už jen stačí vzít nějaký ISP programátor* a vypálit do svých Arduin Nano nový bootloader. 

 

Na vyzkoušení můžeš použít tenhle kód. Zabírá 100 % flash paměti, 32256B, 30772 znaků textu se vypisuje na serial monitor.

* Třeba náš univerzální ATtiny programátor s ISP výstupem, ISP kabelem a případně i ISP pogo adapterem