User Tools

Site Tools


avr:linux

This is an old revision of the document!


Programmation de microprocesseur AVR sous GNU/Linux

Installation

Pour ce faire, nous avons besoins des outils suivants :

NomFonction
gcc-avrCompilateur
gdb-avrDébogueur
avr-libcLibrairie standard AVR
avrdudeProgrammateur
binutils-avrOutils binaire
avariceConnecteur GDB pour JTAG ICE mkII

Installation sous Debian et dérivé :

sudo apt-get install gcc-avr gdb-avr avr-libc avrdude avrdude-doc binutils-avr avarice

Port série en mode utilisateur

Pour utiliser un programmateur via un port série sous Linux sans droit administrateur, il faut que l'utilisateur fasse parti des groupes tty et dialout.

 usermod -a -G tty Nom_Utilisateur 
 usermod -a -G dialout Nom_Utilisateur 

Premier programme

Squelette de base pour les programmes AVR à créer dans un fichier main.c

#include<stdint.h> // Ajout des types int#_t et uint#_t, # vaut 8 , 16 ou 32
#include<avr/io.h> // Utilisation des entrées sorties
#define F_CPU 1000000UL	// 1MHZ, réglage de la fréquence du CPU
#include<util/delay.h> // Gestion des temporisations
 
int main(void)
{
    return(0);
}

Câblage pour STK500

Compilation et programmation

Les commandes ci-dessous compile le fichier main.c en fichier main.elf, puis convertisse le fichier elf en fichier hex qui est ensuite programmé dans notre micro-processeur.

Bien sur, il faut adapter les options au type de microprocesseur et au programmateur utilisé

uPGCCAVRDUDE
ATtiny85attiny85t85
Autrevoir : le manuelVoir le manuel
ProgrammateurAVRDUDE
Atmel STK500stk500
AutreVoir le manuel
avr-gcc -mmcu=attiny85 -o main.elf main.c
objcopy -O ihex -R .eeprom main.elf main.hex
avrdude -p t85 -c stk500 -P /dev/ttyUSB0 -U flash:w:main.hex

Déboguage

Debug-wire est une norme de communication basée sur le one-wire permettant une programmation basique ainsi que le déboguage de la série ATtiny.

Initialisation

Pour l'enclencher, il faut modifier la valeur des fusibles de configurations à l'aide du STK500

Le STK500 ne gère pas le mode debug-wire, il faudra ensuite utiliser le JTAGICEmkII

Exemple pour l'Attiny85, avec utilisation de l'horloge interne 8MHz sans divisions et debug-wire activé.

avrdude -p t85 -c stk500 -P /dev/ttyUSB0 -U lfuse:w:0xfe:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m 

Câblage du JTAGICE mkII pour debug-wire

Il faut brancher trois câble :

STK500 PORTBJTAGICE
PB56-nSRST
VTG4-VTREF
GND2-GND

Compilation et programmation

Il faut activé les symbôles de débugage (-g) et désactivé les optimisations du compilateur.
avr-gcc -g -mmcu=attiny85 -o main.elf main.c
objcopy -O ihex -R .eeprom main.elf main.hex
avrdude -c jtag2dw -P usb -p t85 -U flash:w:main.hex

Si l'upload ne fonctionne pas, un redémarrage de l'Attiny peut aider.

Déboguage

Pour débuguer, il faut tout d'abord lance avarice :

avarice -2 -w -P attiny85 --jtag usb :4242

Puis, dans un autre terminal, on lance avr-gdb:

avr-gdb main.elf

Dans l'invite de commande gdb, on peut connecter gdb à avarice avec la commande:

target remote :4242

Commande GDB

CommandeEffet
continueContinue jusqu'au prochaint point d'arrêt
break main.c:26Met un point d'arrêt à la ligne 26 de main.c
break initADCMet un point d'arrêt sur la fonction initADC
print variableAffiche la variable si le programme est à l'arrêt
set variable hello = 12Met la variable hello à la valeur 12

Tutoriel : http://beej.us/guide/bggdb/ Info : http://avr.2057.n7.nabble.com/avr-gdb-use-td6037.html

Désactivation de DebugWire

Avec le mode debugWire, on ne peux pas lire les fusibles. Seulement écrire la valeur de hfuse. Pour cela il faut désactiver la vérification et le mode sécurisé de avrdude avec les options -u -V

Exemple : Pour un attiny85, pour passer de debugWire à SPI avec une horloge interne à 16MHz (PLL) :

avrdude -u -V -c jtag2dw  -P usb:070000004DAA  -p t85 -U hfuse:w:0xdf:m

Liens utiles

DescriptionLiens
Calculateur de fusiblehttp://www.engbedded.com/fusecalc/
avr/linux.1378815104.txt.gz · Last modified: 2013/09/10 12:11 by sdolt