====== Programování procesorů AVR ======
===== Windows =====
==== Vývojové prostředí ====
[[http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725|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 ===
[[http://stringofthoughts.wordpress.com/2009/11/06/code-blocks-ide-for-avr-gcc-and-avrdude-ubuntu/
|Code Blocks IDE for avr-gcc and avrdude (Ubuntu)]]
==== Nahrání programu do MCU ====
Pro nahrávání přeloženého programu do mikrokontrolérů Atmel je potřeba hardwarový programátor [[cs:atprogispusb|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 [[http://www.nongnu.org/avrdude/|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 ([[http://packages.ubuntu.com/lucid/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/ttyUSB0// 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 [[http://cs.wikipedia.org/wiki/In_System_Programming|ISP módu]] je také možné využít bootloader. Tento způsob využívá Arduino a jeho příznivci jistě ocení jeho variaci [[cs:labduino|LABduino]], které díky boatloaderu hardwarový programátor nepotřebuje. Bootloaderů existuje ale mnoho druhů.
=== Xboot ===
[[https://github.com/alexforencich/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 [[cs:i2c|I²C]], [[cs:spi|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 [[cs: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.
==== Reference ====
* [[http://stringofthoughts.wordpress.com/2009/11/06/setting-up-avr-development-environment-in-ubuntu/|Setting up AVR development environment in Ubuntu]]