sexta-feira, 1 de fevereiro de 2019

Digispark Attiny85 - removendo os 6s de boot

Quem tem um Digispark Attiny85 sabe que ele leva cerca de 6s para iniciar o sketch que subimos para ele.

Esse tempo de 6s é destinado a aguardar por comandos vindos de um PC, via USB, para o modo "programação". Isso faz com que a programação do dispositivo seja bem fácil, mas traz transtorno pra quem precisa que o sketch comece a executar logo no início do boot.

Mas tem uma notícia boa: é possível atualizar o firmware para remover esse tempinho chato. Vou demonstrar num passo a passo de como fazê-lo.

Versões do Digispark Attiny85:





Primeiro passo, ter em mãos o hardware. São necessários "apenas" os seguintes itens:
- 1x Digispark Attiny85;
- 1x Cabo USB x Micro USB, desses usados em carregadores de celular (necessário apenas se for a versão com Micro USB);
- 1x fio/jumper qualquer (na verdade, pode ser qualquer coisa metálica, desde que saiba manipular).



Se tiver os terminais da placa, e for utilizá-los depois, pode ser interessante soldá-los agora:


Existe também a opção de terminais curvos:







Baixe o driver necessário para reconhecer a placa no seu PC:
https://github.com/digistump/DigistumpArduino/releases/

Ou diretamente no link:
https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

Descompacte (em uma pasta de fácil acesso) e execute a instalação:





Para ver se deu tudo certo, entre no diretório, pelo Prompt de Comando. Um atalho é segurar o SHIFT e clicar direito em qualquer lugar da pasta, onde aparecerá um menu com a opção de Prompt de Comando / PowerShell:





No Prompt de Comando, digite (o "TAB" ajuda a autocompletar o nome do arquivo):
micronucleus -?





Agora insira o Digispark na porta USB do seu PC:




Aparecerá a versão do firmware do seu Digispark. Neste exemplo, a versão é a 1.6.

Se tudo deu certo até aqui, quer dizer que seu Digispark está configurado e funcionando corretamente.




Agora, vamos baixar o firmware.
https://github.com/micronucleus/micronucleus

A versão completa, com as opções que precisamos, é a v1.1. Baixe diretamente no diretório upgrade (vou explicar o porquê mais para frente):
https://github.com/micronucleus/micronucleus/tree/v1.11/upgrade/releases

O arquivo que precisamos é o:
https://github.com/micronucleus/micronucleus/blob/v1.11/upgrade/releases/micronucleus-1.11-entry-jumper-pb0-upgrade.hex

Explicando os arquivos:
- os arquivos iniciando com "micronucleus-1.11" significam que são da versão 1.11;
- o nome "upgrade" no final do arquivo será explicado mais a frente;
- o arquivo "micronucleus-1.11-entry-ext-reset-upgrade.hex" significa que o modo de programação será ativado através do reset, o pino PB5 (mostrado a figura mais a frente), e deverá ser programado através de um Arduino ou outro programador;
- o arquivo "micronucleus-1.11-entry-jumper-pb0-upgrade.hex" significa que entrará no modo de programação quando estiver com um jumper conectando o pino PB0 com o GND (negativo, ou terra);
- o arquivo "micronucleus-1.11-ledpb1-upgrade.hex" significa que o LED que está conectado ao pino PB1, sempre iniciará ligado (ON);
- o arquivo "micronucleus-1.11-upgrade.hex" é o firmware normal, com o mesmo tempo de 6s do qual já possuímos.

Pinagem do Digispark:



Decidi utilizar a versão v1.11, porque ela já vem com essas opções compiladas, facilitando o nosso trabalho. A última versão (Master) tem opções de redução do tamanho do firmware, sobrando mais espaço para o nosso sketch.

Devemos utilizar os firmware da pasta "firmware\releases" somente quando o nosso Digispark não possui quaisquer firmware gravado. No nosso caso, já possui um firmware, então, caso tente gravar, ocorrerá um seguinte erro, ao executarmos a instalação do firmware da pasta "firmware\releases":
micronucleus.exe --run micronucleus-1.11-entry_jumper_pb0.hex


O erro ocorrido é "Program file is 1856 bytes too big for the bootloader!". Por quê isso ocorre?
A questão é que nosso Digispark já possui um firmware, então o espaço disponível é muito pequeno. Para isso que serve a pasta "upgrade\releases", que é onde estão os firmware "compactados" para que seja possível atualizar uma placa que já possua um firmware. Após o upload, o firmware é expandido, passando a ocupar o espaço necessário, e todo o sketch existente é apagado.
Para maiores informações, acesse:
https://gist.github.com/valterfc/bc3828a0a85bf6c6df608b37886b1cf5

Agora, vamos gravar o firmware que desejamos. Para isso, digite no Prompt de Comando:
micronucleus.exe --run micronucleus-1.11-entry-jumper-pb0-upgrade.hex


Pronto. Agora caso desejarmos fazer qualquer operação de gravação ou consultar a versão do firmware, será necessário adicionar o jumper.






Vale observar que com a troca do firmware, ficamos com mais espaço livre disponível para nosso sketch. Mas para podermos usar esse espaço extra no Arduino IDE, será necessário fazer uma pequena configuração.
Mas isso é assunto para a próxima. Até lá.

Nenhum comentário:

Postar um comentário