Přeskočit na hlavní obsah

Překlad a nahrávání

V kapitole Příprava prostředí máme nainstalované nástroje a v kapitole Konfigurace sestavení je popsané, co má být v CMakeLists.txt nebo Makefile. Tady už budeme jen spouštět příkazy.

U běžného programu na počítači často stačí spustit výsledek překladu. U mikrokontroléru je cesta delší:

Soubor .elf je výsledek pro linker a nástroje jako avr-size nebo avr-nm. Soubor .hex je formát, který se typicky používá pro nahrání programu do paměti čipu.

Překlad přes CMake

Projekt sestavíte například takto:

cmake -S . -B build -G Ninja
cmake --build build

Ve složce build/ vzniknou typicky dva důležité soubory:

  • attiny_blink.elf je výsledek pro linker a ladicí nástroje,
  • attiny_blink.hex je soubor vhodný pro nahrání do čipu.

Když chcete změnit cílový čip, můžete hodnotu MCU předat při konfiguraci:

cmake -S . -B build -G Ninja -DMCU=attiny1626

Stejným způsobem můžete nastavit i F_CPU:

cmake -S . -B build -G Ninja -DF_CPU=3333333UL
Když měníte konfiguraci

Když změníte MCU, F_CPU nebo port programátoru, je často nejjednodušší smazat složku build/ a nechat CMake vytvořit konfiguraci znovu.

UPDI linka

Novější ATtiny se často programují přes UPDI, tedy Unified Program and Debug Interface. Je to jednovodičové rozhraní pro programování a ladění. Microchip ho popisuje jako jednovodičovou half-duplex komunikaci založenou na UARTu.

To znamená, že data tečou po jednom vodiči oběma směry, ale ne současně. Tento typ komunikace se také označuje jako 1-Wire (používá se 1 komunikační vodič). Chvíli mluví programátor, chvíli odpovídá čip. Není to stejné jako běžný UART se samostatným TX a RX. Spíš je to UARTová komunikace nacpaná na jednu společnou linku.

Jednoduchý UPDI adaptér se dá udělat z USB-UART převodníku. Zapojení používané nástrojem pymcuprog vypadá takto:

Prakticky to znamená, že RX převodníku je připojený přímo na UPDI linku a TX převodníku jde na stejnou linku přes odpor. Na nepájivém poli to často vypadá jako odpor mezi TX a RX, přičemž uzel u RX pokračuje na UPDI pin čipu.

Odpor je důležitý. Když by převodník i čip omylem táhly linku proti sobě, odpor omezí proud. Bez něj by to byla zbytečně drsná hádka dvou výstupů na jednom drátu.

Napětí musí sedět

Použijte USB-UART převodník se stejnou logickou úrovní, jakou má napájený ATtiny. Když čip běží na 3.3 V, neposílejte do něj 5 V logiku. Společná zem (GND) je povinná.

UPDI pin může být sdílený

U některých ATtiny může být UPDI pin sdílený s resetem nebo GPIO. Když si špatným nastavením vypnete běžné UPDI, může být potřeba vysokonapěťová aktivace. Tu jednoduchý USB-UART adaptér neumí. Proto si dobře rozmyslete změny fuse bitů a nastavení reset/UPDI pinu.

Kontrola spojení

Než začnete nahrávat, ověřte, že počítač vidí programátor a že programátor vidí čip. Pokud máte v CMakeLists.txt target updi-ping, spustíte ho takto:

cmake --build build --target updi-ping

Pokud příkaz selže, zkontrolujte hlavně:

  • správný port, například /dev/ttyUSB0,
  • zapojení UPDI, GND a napájení,
  • jestli máte práva k sériovému zařízení,
  • jestli v MCU používáte správný typ čipu.

Port programátoru se dá předat při konfiguraci:

cmake -S . -B build -G Ninja -DUPDI_PORT=/dev/ttyUSB0

Nahrání programu

Pokud máte v CMakeLists.txt target flash, program nahrajete příkazem:

cmake --build build --target flash

Typický průběh je:

  1. CMake zkontroluje, jestli je aktuální .hex.
  2. Pokud není, program znovu přeloží.
  3. pymcuprog smaže paměť čipu.
  4. Nahraje nový .hex.
  5. Ověří, že se program zapsal správně.

Když všechno projde, ATtiny se po resetu rozběhne s novým programem. U blink příkladu by měla začít blikat LED.

Překlad přes Makefile

Pokud místo CMake používáte Makefile, typicky stačí:

make

Tím vznikne .elf a .hex. Samotné nahrávání pak můžete spustit ručně přes pymcuprog, například:

pymcuprog write \
--tool uart \
--uart /dev/ttyUSB0 \
--clk 115k \
--device attiny1626 \
--filename attiny_blink.hex \
--erase \
--verify
--tool uart není UART vašeho programu

U pymcuprog znamená --tool uart, že se k UPDI adaptéru připojujeme přes sériový port počítače. Není to totéž jako USART nebo UART ve firmware. Program v čipu nemusí používat UART vůbec.

Časté chyby

Když nahrávání nefunguje, většinou je problém v jedné z těchto věcí:

  • špatný port, například jiný než /dev/ttyUSB0,
  • chybí oprávnění k sériovému portu,
  • špatně zapojené UPDI,
  • čip není napájený,
  • v projektu je nastavený jiný MCU,
  • programátor používá jinou rychlost než je nastavená v programu, například 115k.

Chyba při nahrávání ještě neznamená, že je špatně program. Nejdřív je potřeba ověřit, že funguje komunikace s čipem.