Como eu queimo o gerenciador de inicialização?

15

Fui instruído a "gravar o gerenciador de inicialização" no meu Arduino para corrigir um erro que estava recebendo. Como posso fazer isso? (E o que exatamente é o carregador de inicialização?)

O cara com o chapéu
fonte
É muito fácil gravar o gerenciador de inicialização no arduino, desde que você siga as etapas corretas. Este vídeo pode ajudá-lo: YouTube - Como gravar o gerenciador de inicialização no ATMEGA328P-AU (SMD) | Homemade ARDUINO MINI
Sandesh HS

Respostas:

15

O gerenciador de inicialização é um pequeno programa que está (quase) sempre em um Arduino. Ele gerencia o upload e o início dos esboços que você faz e pisca o LED 13 do pino sempre que a placa é redefinida.


Para gravar o gerenciador de inicialização:

  1. Obtenha um AVR ISP , USBtinyISP , ParallelProgrammer ou outra placa Arduino . Este será o seu ISP.
  2. Salvo indicação em contrário, conecte o ISP aos pinos do ICSP na sua placa.
  3. Ligue a sua placa com um cabo USB ou uma fonte de alimentação externa.
  4. Abra o IDE do Arduino.
  5. Verifique se você selecionou a placa correta na qual está gravando no Tools ► Board ►IDE. Verifique isso mesmo se você puder fazer o upload de programas corretamente; o upload nem sempre exige a placa certa.
  6. Selecione o programador apropriado em Tools ► Programmer ►.
  7. Clique Tools ► Burn Bootloadere aguarde. Não deve demorar mais de um minuto e geralmente leva apenas alguns segundos.

Fontes:

O cara com o chapéu
fonte
11
O AVRISP é praticamente a EOL (final da vida) neste momento. No mínimo, você deseja um AVRISPmk2. Existem também muitas outras ferramentas mais sofisticadas (AVR One! Por exemplo). Você provavelmente deveria dizer #{line 1} or other dedicated ISP programmer.
Connor Wolf
Em placas como o Arduino Yun, cada vez que você "faz o upload via wifi", está queimando o gerenciador de inicialização mesclado com seu esboço. Isso graças ao fato de a CPU do Linux estar conectada ao AVR MCU através da SPI, para que você possa imitar um ISP com software.
Federico Fissore 27/02
@FedericoFissore - é por isso que demora tanto?
TheDoctor
Sim, isso e o fato de o GPIO bitbanging ser mais lento. Há um esforço contínuo para acelerar isso.
Federico Fissore 01/03
8

O que é um gerenciador de inicialização?

E o que exatamente é o carregador de inicialização?

O carregador de inicialização é um pequeno pedaço de código que reside na parte "alta" da memória do programa. Normalmente, não é apagado quando você carrega novos esboços. Seu objetivo é ser ativado imediatamente após uma redefinição (os fusíveis são configurados para iniciar o código no endereço do carregador de inicialização em vez do endereço 0x0000). O carregador de inicialização aguardará um curto período de tempo (como um segundo) para ver se os dados de "programação" estão chegando na porta serial.

  • Nesse caso, ele lê esses dados e decodifica-os para reprogramar o restante da memória flash. Trabalhando em conjunto com o programa de upload (normalmente avrdude), o novo sketch é enviado via porta serial. O carregador de inicialização apaga as páginas da memória flash e as substitui pelo novo código. Uma vez feito, ele executa o novo código.

  • Se nenhuma instrução chegar, o carregador de inicialização pula para o endereço 0x0000 para executar o esboço existente no quadro.


Como substituir o carregador de inicialização

Um método alternativo para programar um gerenciador de inicialização é usar um esboço que escrevi há pouco tempo, executado em:

  • Uno (ou similar, como Duemilanove)
  • Leonardo
  • Mega2560

A placa de "programação" executa o esboço que possui gerenciadores de inicialização para várias placas codificadas nele. Você conecta a placa de programação à placa de destino (a placa que deseja o carregador de inicialização) com 6 fios de conexão, conforme mostrado.

Programador do gerenciador de inicialização para Uno

Essa foto em particular ilustra um Uno programando outro.

Você executa o esboço (operando através do Serial Monitor para fornecer comandos). Primeiro, ele identifica o chip de destino:

Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...

Você pressiona G para programá-lo.

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Done.
Type 'C' when ready to continue with another chip ...

Para um Uno, leva um segundo. Para programar um Mega2560 leva 3 segundos.

Instruções detalhadas no programador do gerenciador de inicialização Atmega

É possível fazer o download do código no Github: nickgammon / arduino_sketches

Nick Gammon
fonte
Você precisa selecionar o tipo de chip para o qual está gravando (Ferramentas-> Placa ..)? Qual placa eu seleciono quando estou gravando o gerenciador de inicialização para ficar sozinho?
Camilo
Você seleciona o tipo de placa que está usando para gravar o gerenciador de inicialização no IDE. O esboço do carregador de inicialização detecta automaticamente o tipo de placa de destino.
Nick Gammon