Uživatelské nástroje

Nástroje pro tento web

Překlady této stránky?:

cs:avr_programming

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/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 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.

Reference

cs/avr_programming.txt · Poslední úprava: 2022/01/28 16:21 autor: kaklik