Como gravar bootloader no Arduino Nano

Eletrônica Arduino 17 de Novembro de 2019 às 14:11

A placa de desenvolvimento Arduino Nano oferece uma prototipagem ágil, pois podemos utilizar em um protoboard ou soquetes em uma PCB. A integração com o projeto é mais simples comparando com outras placas, como o Arduino Uno e Mega.

Esta placa possui o microcontrolador Atmega328p MLF32, onde se enquadra nos componentes SMD, oferecendo o benefício de miniaturização do circuito, porém sua utilização é adequada em placas de circuito impresso. O projeto original do Arduino Uno comporta um Atmega328p DIP28 slim, onde seu tamanho é maior, porém de fácil utilização em protótipos, como o Arduino Standalone em protoboard.

Placas Arduino Nano e Uno.

Estes componentes vindos de fábrica não possuem nenhum código interno. E quando precisamos realizar manutenção (troca do microcontrolador), é necessário na maioria das vezes a gravação do bootloader.

O bootloader é um firmware gravado em endereços específicos no fim da memória flash do microcontrolador, tendo a capacidade de interagir com circuitos integrados dedicados em comunicação serial, como o CH340g, FTDI e Atmega16u, gerenciando a gravação do código em C/C++ ou "linguagem Arduino" compilado em .hex para a memória flash, é por este motivo que conectamos o Arduino Uno utilizando um cabo USB no computador e enviamos os firmwares de forma prática.

Mapeamento das memórias do Atmega328p.

Mas como gravar um bootloader em um Arduino Nano ou projeto embarcado que possui este microcontrolador SMD? A resposta é simples! Utilizando a comunicação ICSP, um gravador e programador AVR.

Podemos gravar o bootloader de duas formas.

  1. Utilizando uma outra placa Arduino Atmega328p em modo ISP (ICSP).
  2. Utilizando o gravador e programador USBasp e AVRDude.

Gravando o bootloader com ArduinoISP

Este método é o mais simples, pois utiliza uma placa Arduino Atmega328p com bootloader. A IDE oficial do Arduino fornece código e gravação para o microcontrolador.

O primeiro passo é abrir a IDE do Arduino, depois navegue pelo menu superior em Arquivo/Exemplos/11.ArduinoISP/ArduinoISP. Abrindo o código, envie este firmware para a placa Arduino Uno/Nano.

Após este procedimento, pegue o Arduino Nano sem bootloader e realize as seguintes ligações com o Arduino Uno/Nano como ISP.

Conecte o ArduinoISP no computador, e navegue pelo menu superior em Ferramentas, selecione o modelo da placa a ser gravado (neste caso, Nano), a porta COM em que se localiza o ArduinoISP, selecione o programador como "Arduino as ISP" e clique em Gravar Bootloader.

Gravando bootloader em um Arduino Nano utilizando um ArduinoISP.

Com a gravação realizada, podemos enviar um código de teste para verificar a comunicação serial e o funcionamento do microcontrolador com bootloader. Para isso, retire a conexão com o ArduinoISP, conecte o Arduino Nano ao computador, altere a placa e porta COM em Ferramentas, e abra o exemplo Blink da IDE. Envie o código ao microcontrolador e veja o LED "L" da placa piscar a cada 1 segundo.

Arduino Nano com bootloader piscando o LED "L".

Gravando o bootloader com USBasp e AVRDude

Para este método é necessário um gravador AVR USBasp, sendo um excelente dispositivo USB para gravação direta em placas embarcadas, e além disso o programador em linha de comando AVRDude reconhece o USBasp como um gravador AVR, sendo possível a utilização em outras IDEs de desenvolvimento embarcado, como o Atmel Studio 7.

O gravador USBasp possui um conector ICSP de 10 pinos, as placas Arduino possuem este conector também, mas com 6 pinos. Se preferir, utilize um adaptador ICSP 10/6 pinos para facilitar as ligações.

Gravando bootloader no Arduino Nano com USBasp.

Realizando as ligações ICSP e conectando o gravador no computador, faça o download do programador AVRDude, e descompacte ele em um local de fácil acesso em seu computador, como a C:\ ou D:\. Faça o download do código de Blink com bootloader, descompacte e coloque o arquivo .hex dentro da pasta do AVRDude.

Abra uma janela de comando (CMD) dentro da pasta do AVRDude, e digite o seguinte comando:

avrdude -e -c usbasp -p ATmega328P -U flash:w:PiscaLEDBootloader.hex:i

Se a gravação for bem sucedida..

D:\avrdude>avrdude -e -c usbasp -p ATmega328P -U flash:w:PiscaLEDBootloader.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.08s

avrdude: Device signature = 0x1e950f
avrdude: erasing chip
avrdude: reading input file "PiscaLEDBootloader.hex"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 17.78s



avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against PiscaLEDBootloader.hex:
avrdude: load data flash data from input file PiscaLEDBootloader.hex:
avrdude: input file PiscaLEDBootloader.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 12.10s



avrdude: verifying ...
avrdude: 32768 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Depois da gravação do microcontrolador, você verá o LED interno "L" piscar algumas vezes e piscar a cada 200ms. Agora o Arduino Nano está pronto para ser utilizado na IDE oficial do Arduino com sua comunicação serial.

Se o gravador USBasp apresentar problemas na hora da gravação do código ou comunicação com o Arduino Nano, verifique as ligações MISO, MOSI, SCK, RESET, 5V e GND, e os drivers para Windows, ou siga este tutorial Usando o firmware original do gravador AVR USBasp no MX-USBASP (clone chinês).