Toto je starší verze dokumentu!
Obsah
Programování procesorů AVR
Windows
Vývojové prostředí
AVRstudio obsahuje všechny potřebné softwarové nástroje pro práci s MCU AVR většinou tak není potřeba instalovat další software. Jeho nevýhodou je velikost a malá flexibilita.
Linux
Vývojové prostředí
$ sudo apt-get update $ sudo apt-get install gcc build-essential gcc-avr gdb-avr binutils-avr avr-libc avrdude
Code Blocks IDE
Nahrání programu do MCU
Pro nahrávání přeloženého programu do mikrokontrolérů Atmel je potřeba hardwarový programátor ATprog, který je připojen k MCU přes programovací kablík a k počítači přes USB.
V Ubuntu se pro nahrání programu do AVR obvykle používá program avrdude. Následujícím způsobem:
avrdude -P /dev/ttyUSB0 -c stk500v2 -B 50 -p atmega8 -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m -U flash:w:firmware.hex
Nastavení pojistek je třeba upravit pro konkrétní aplikaci. Nevhodným nastavením si můžete mikroprocesor zablokovat proti dalšímu zápisu
Nové verze avrdude nefungují a je potřeba použít starší verzi programu avrdude (5.10). Stažený balík pak nainstalujeme příkazem
sudo dpkg -i název_balíku.deb
Známé problémy
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error avrdude: stk500v2_recv(): checksum error avrdude: stk500v2_recv(): checksum error avrdude: stk500v2_recv(): checksum error avrdude: stk500v2_recv(): checksum error
Přes to, že tato chybová hláška vypadá podivně, tak obvykle znamená, že se s programátorem pokoušíte komunikovat na jiném portu, než na který je fyzicky připojen. Tj. např. /dev/ttyUSB1 místo /dev/ttyUSB1
Permission denied
Arduino: 1.6.13 (Linux), Board: "Sanguino, ATmega1284 or ATmega1284P (16 MHz)" /opt/arduino-1.6.13/hardware/tools/avr/bin/avrdude -C/opt/arduino-1.6.13/hardware/tools/avr/etc/avrdude.conf -v -patmega1284p -cstk500v2 -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m avrdude: Version 6.3, compiled on Sep 12 2016 at 15:21:49 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/opt/arduino-1.6.13/hardware/tools/avr/etc/avrdude.conf" User configuration file is "/home/kaklik/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : usb Using Programmer : stk500v2 avrdude: usbdev_open(): cannot open device: Permission denied avrdude: usbdev_open(): did not find any USB device "usb" (0x03eb:0x2104) avrdude done. Thank you.
Řešení:
sudo vim /etc/udev/avrisp.rules
vložit následující obsah:
SUBSYSTEM!="usb", ACTION!="add", GOTO="avrisp_end" # Atmel Corp. JTAG ICE mkII ATTR{idVendor}=="03eb", ATTR{idProduct}=="2103", MODE="660", GROUP="dialout" # Atmel Corp. AVRISP mkII ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="dialout" # Atmel Corp. Dragon ATTR{idVendor}=="03eb", ATTR{idProduct}=="2107", MODE="660", GROUP="dialout" LABEL="avrisp_end"
Pak vytvořit sybolický link:
cd /etc/udev/rules.d sudo ln ../avrisp.rules 60-avrisp.rules
A nakonec restartovat udev service
sudo service udev restart
Více na:
http://stackoverflow.com/questions/5412727/avrisp-mkii-doesnt-work-with-avrdude-on-linux
Bootloader
Vedle klasického způsobu pálení firmwaru v ISP módu je také možné využít bootloader. Tento způsob využívá Arduino a jeho příznivci jistě ocení jeho variaci LABduino, které díky boatloaderu hardwarový programátor nepotřebuje. Bootloaderů existuje ale mnoho druhů.
Xboot
Xboot je velmi flexibilní bootloader, který kromě v celku běžného způsobu nahrávání firmware přes UART rozhraní dovede firmware aktualizovat i přes rozhraní jako I²C, SPI, nebo paralelní FIFO. Bootloader do procesoru nahrajeme následujícím způsobem.
Stáhneme zdrojové soubory bootloaderu z githubu.
git clone https://github.com/alexforencich/xboot.git cd xboot
Dále je potřeba vytvořit konfiguraci bootloaderu podle požadované aplikace. V tomto případě si zkopírujeme referenční konfiguraci pro MCU ATMEGA328P, který je například v modulu atmegatq32
cp conf/arduino328p.conf.mk .
V kopii konfiguračního souboru je třeba změnit proměnnou AVRDUDE_PROGRAMMER = avrispmkII
na avrdude identifikaci programátoru, který bude skutečně použit pro první programování bootloaderu do MCU. Pak můžeme spustit příkaz pro vygenerování úplné konfigurace bootloaderu.
make arduino328p.conf.mk
Pokud proces proběhl bez chyb, tak bootloader zkompilujeme a nahrajeme do MCU.
make make program
Pokud předchozí krok proběhl bez chyb, tak by jsme nyní v MCU měli mít nahraný funkční bootloader Xboot, kterým je možné do MCU nahrát aplikační firmware. To uděláme například následujícím příkazem.
avrdude -P /dev/ttyACM0 -c avr109 -b 115200 -p m328p -U flash:w:Blink.cpp.hex
Kde soubor Blink.cpp.hex je vygenerovaný testovací program z Arduino IDE.