quarta-feira, julho 20, 2011

AVRDUDE

AVRDUDE é uma aplicação de código aberto para gravar programas na Flash de processadores AVR (como os utilizados na plataforma Arduino). A própria IDE do Arduino utiliza o AVRDUDE para fazer a carga dos sketches. Vamos ver aqui um resumo do seu uso.

O AVRDUDE roda em um PC (sob Windows, Linux ou MacOS) e se comunica com um programador externo, através de uma porta serial ou paralela do PC. O programador está conectado ao microcontrolador e utiliza a programação paralela ou SPI do AVR. Uma das vantagens do AVRDUDE é suportar uma quantidade muito grande de programadores e de modelos de microcontrolador.

A execução do AVRDUDE é controlada por parâmetros de linha de comando e um arquivo de configuração. Vamos examinar aqui apenas os parâmetros de linha de comando essenciais. O AVRDUDE e sua documentação completa podem ser encontrados em alguns locais:
  • A documentação e os fontes mais recentes podem ser baixados do site oficial.
  • O executável para Windows faz parte do pacote WinAVR, hospedado no sourceforge.
  • Se você instalou a IDE do Arduino, o avrdude faz parte dos arquivos sob hardware\tools\avr
Um tutorial mais completo pode ser encontrado no site ladyada.

Você precisa sempre especificar três parâmetros:
  • -p informa qual o modelo do microcontrolador a programar. Alguns exemplos são atmega328p, atmega168 e attiny2313.
  • -c informa o modelo do programador que será utilizado. Alguns exemplos (que veremos no futuro) são dapa, bsd, stk200, ponyser, avrisp e usbtiny.
  • -P informa a porta do PC (com1, lpt1, usb, etc) onde o programador está conectado.
Em seguida você precisa dizer o que é para o programador fazer:
  • -e apaga o dispositivo. Normalmente não é necessário, pois o AVRDUDE apaga automaticamente antes de gravar.
  • -U :r: efetua a leitura da área (flash, eeprom, lock, efuse, hfuse ou lfuse) e grava o resultado em um arquivo.
  • -U :v: compara o conteúdo da área (flash, eeprom, lock, efuse, hfuse ou lfuse) com o conteúdo de um arquivo.
  • -U :w: efetua a gravação da área (flash, eeprom, lock, efuse, hfuse ou lfuse) com conteúdo de um arquivo. Após a gravação é feita uma verificação. -U é o mesmo que -U flash:w:.
Embora não seja comum, múltiplos -U podem ser usados em uma linha de comando (por exemplo, para programar flash e eeprom em uma única execução).

Um recurso útil ao gravar ou verificar os fusíveis (lock, efuse, hfuse ou lfuse) é colocar o valor a gravar diretamente na linha de comando ao invés de usar um arquivo. Um exemplo seria -U lock:v:0xFF:m que verifica se o fusível lock possui o valor 0xFF.

A gravação dos fusíveis (lock, efuse, hfuse ou lfuse) requer um parâmetro adicional -u. Como diria Iago, a programação incorreta dos fusíveis não irá matar um microcontrolador mas coisas terríveis podem acontecer (inclusive impedir a gravação com um programador SPI).

Lembrando mais uma vez, estou listando aqui apenas o básico. A lista completa de comandos e opções está bem explicada no manual do AVRDUDE.

Nenhum comentário: