Dois modos de gravar o bootloader no Atmega328

Estive fazendo uns testes com um bootloader na esperança de fazer algo realmente útil e diferente, mas o resultado foi apenas bootloaders corrompidos. E recuperados, claro. Por conta disso, acabei modificando todo o artigo e deixando apenas duas coisas importantes, que são os dois modos de gravar bootloader no Arduino, ambos experimentados para fazer os testes de gravação do bootloader na placa MBZ Pro Mega RF Edition.

Gravar o Bootloader no Arduino

O Arduino possui um bootloader. O CI Atmega328 vem virgem. Se estiver adquirindo uma placa da MaxBlitz (como a da imagem de destaque), o bootloader padrão já vem gravado. Se ainda não tem a placa da MaxBlitz, dê uma passada no site e confira; é uma placa barata, incrível e você terá o prazer de montar sua própria standalone.

Optiboot

Eu não sabia, mas após iniciar as experimentações vi que o atual bootloader utilizado no Arduino UNO é o optiboot. Os bootloaders oficiais estão disponíveis dentro do diretório da sua IDE do Arduino, se quiser dar uma conferida, discorro a respeito mais adiante.

Na definição de placas também é possível ver os fuses utilizados, além do bootloader da respectiva placa. No caso do Arduino UNO:

uno.name=Arduino/Genuino Uno

uno.vid.0=0x2341
uno.pid.0=0x0043
uno.vid.1=0x2341
uno.pid.1=0x0001
uno.vid.2=0x2A03
uno.pid.2=0x0043
uno.vid.3=0x2341
uno.pid.3=0x0243

uno.upload.tool=avrdude
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.maximum_data_size=2048
uno.upload.speed=115200

uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0xFD
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex

uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.board=AVR_UNO
uno.build.core=arduino
uno.build.variant=standard

Gravar o bootloader

Podemos gravar o bootloader de duas maneiras; utilizando um Arduino como ISP ou utilizando um USBASP conectado ao ICSP da placa que receberá o bootloader em seu Atmega.

Apenas para complementar o raciocínio, esse procedimento não é exclusivo para a placa MBZ Pro Mega RF, nem para esse bootloader. É um procedimento genérico, que daria outro artigo, inclusive. Também não precisa ter medo extremo, eu perdi o bootloader durante os testes que estava fazendo com um bootloader personalizado e com um esforço pra cá e outro pra lá, acabei conseguindo regravar; várias vezes. Em suma, se tudo der errado quando estiver fazendo experimentações, volte o bootloader padrão.

Utilizando o adaptador USBASP

Não quis desenhar e também não procurei muito, me desculpe a preguiça e por “chupinhar” a imagem abaixo, mas tenho muitas outras coisas a fazer (relacionadas aos artigos e à vida pessoal) e por isso resolvi agilizar da melhor maneira possível.

O wiring do adaptador USBASP fica assim:

USBASP wiring - gravar o bootloader

Mas como irei gravar o bootloader  na MBZ Pro Mega RF Edition, desconsiderei a ordem dos headers. Da direita e conecte-os em seus correspondentes, conforme a lindíssima imagem abaixo:

MBZ Pro Mega RF Edition - gravar o bootloader

Ainda, vou facilitar a relação entre o USBASP e o ICSP da placa na tabela abaixo. Considere os pinos da fileira superior da esquerda para a direita como sendo 1, 2, 3Então volte para a segunda fileira, da esquerda para a direita como sendo os pinos 4, 5, 6. Desse modo use como referência a seguinte relação:  Pino 4 = GND, Pino 6 = 5V.

Agora olhe para a tabela e tudo deve ficar claro:

USBASPMBZ Pro Mega RF Edition (pino)
VCC6
MOSI5
/RES1
SCK2
GND4
MISO3

Por fim, o exemplo de conexão é como se fosse ligado ao cabo que vai ao USBASP. Ao encaixar o cabo ao adaptador, as posições se invertem. Para evitar que alguém conecte errado e para reforçar o entendimento, eis uma foto dos jumpers conectados diretamente ao USBASP:

Jumpers encaixados no USBASP - gravar o bootloader no Arduino

Conectores paralelos

Mas depois de conectar e desconectar 10 vezes, já não é mais tão empolgante. Daí faz todo o sentido utilizar os conectores paralelos de 3 posições, vendido pelo nosso parceiro MASUGUX. Esses conectores estão disponíveis para compra através desse link. Se quiser jumpers e headers no mesmo pacote, o link é esse outro. A partir de então, a conexão com a placa é feita em segundinhos. Repare na imagem de destaque, nos jumpers do USBASP.

Utilizando Arduino como ISP

Nesse modo, utilizaremos um Arduino para gravar o bootloader invés de utilizar um adaptador USBASP.

Coloque os jumpers primeiramente em GND5V do Arduino UNO que será utilizado como ISP ao 5V e GND do MBZ Pro Mega RF. Agora siga a tabela, essa é bem fácil:

Arduino UNOMBZ Pro Mega RF
5V5V
GNDGND
10RST
1111
1212
1313

Conecte o Arduino UNO (que será o master, pois através dele o bootloader será gravado na MBZ Pro Mega RF) à porta USB do computador. Se for uma gravação de bootloader padrão (como exemplificado abaixo para USBASP), abra a IDE do Arduino, selecione a porta, selecione a placa Arduino UNO . Na Opção Programador, selecione Arduino como ISP. Em Arquivo > Exemplos selecione ArduinoISP. Faça o upload para preparar a placa para funcionar como ISP.

Após ter gravado o sketch ArduinoISP, coloque um capacitor 10uF (foi o que eu tinha) entre o  reset e o GND do Arduino UNO (que é o master). A listra branca do capacitor vai em direção ao GND.

Arduino as ISP - gravar o bootloader

No menu Ferramentas, clique em Gravar bootloader após já ter subido o sketch para que o UNO funcione como ISP. Agora repare que a gravação será feita na MBZ Pro Mega RF.

Se estivesse fazendo a gravação em um Arduino Mega por exemplo, após subir o sketch de ArduinoISP, o próximo passo seria trocar a placa para Arduino Mega na IDE do Arduino e então gravar o bootloader.

Se quiser, pode utilizar esse modo para gravar o programa no Arduino, mas remova primeiro o capacitor.

Gravar o bootloader padrão (para CI virgem) usando USBASP

Se deseja apenas gravar um bootloader padrão em um CI novo, basta seguir esse procedimento, abrindo a IDE do Arduino como root, porque o usuário padrão não tem permissão para escrever no USBASP.

Na IDE do Arduino, selecione a placa Arduino UNO para a MBZ Pro Mega, selecione a porta serial e seleciona a programadora USBASP. Ainda no menu Ferramentas, clique na opção gravar bootloader.

Feito!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Dois modos de gravar o bootloader no Atmega328

Fechado para comentários.