====== 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]]