Uživatelské nástroje

Nástroje pro tento web


cs:avr_programming

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


Předchozí verze
cs:avr_programming [2022/01/28 16:21] (aktuální) – [Známé problémy] kaklik
Řádek 1: Řádek 1:
 +====== 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 ==
 +
 +<code>
 +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:
 +
 +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.
 +
 +</code>
 +
 +Řešení:
 +
 +  sudo vim /etc/udev/avrisp.rules
 +  
 +vložit následující obsah:
 +
 +<code>
 +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"
 +</code>
 +
 +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]]