Como faço para gravar o bootloader?

Fui instruído a “gravar o bootloader” em meu Arduino para corrigir um erro que estava recebendo. Como posso fazer isso? (E o que exatamente é o bootloader?)

Comentários

Resposta

O bootloader é um pequeno programa que (quase) sempre em um Arduino. Ele gerencia o upload e o início dos esboços que você faz e pisca o LED do pino 13 sempre que a placa reinicia.


Para queimar o bootloader:

  1. Obtenha um AVR ISP, USBtinyISP , ParallelProgrammer ou semelhante; ou use outra placa Arduino . Este será o seu ISP.
  2. A menos que seja instruído de outra forma, conecte o ISP aos pinos ICSP em sua placa.
  3. Alimente sua placa com um cabo USB ou uma fonte de alimentação externa.
  4. Abra o IDE do Arduino.
  5. Certifique-se de selecionar a placa correta para a qual está gravando em Tools ► Board ► no IDE. Verifique isso, mesmo se você pudesse carregar programas corretamente; o upload nem sempre exige a placa certa.
  6. Selecione o programador apropriado em Tools ► Programmer ►.
  7. Clique em Tools ► Burn Bootloader e espere. Não deve demorar mais do que um minuto e geralmente leva apenas alguns segundos.

Fontes:

Comentários

  • O AVRISP é basicamente EOL (fim de vida) neste ponto. No mínimo, você quer um AVRISPmk2. Existem também muitas outras ferramentas sofisticadas (AVR One! Por exemplo). Você provavelmente deve apenas dizer {line 1} or other dedicated ISP programmer.
  • Em placas como o Arduino Yun, cada vez que você " faz upload via wi-fi ", você ' está gravando novamente o bootloader mesclado com seu esboço. Isso graças ao fato de que a CPU do Linux está conectada ao AVR MCU através de SPI, para que você possa imitar um ISP com software.
  • @FedericoFissore – é por isso que demorou tanto?
  • Sim, isso e o fato de que o bitbanging GPIO é mais lento. Há um esforço contínuo para acelerá-lo.

Resposta

O que é um bootloader?

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

O bootloader é 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 propósito é ser ativado imediatamente após um reset (os fusíveis são configurados para iniciar o código no endereço do bootloader em vez do endereço 0x0000). O bootloader irá esperar um pouco (como um segundo) para ver se os dados de “programação” estão chegando na porta serial.

  • Se sim, ele lê esses dados e decodifica para reprogramar o resto da memória flash. Trabalhando em conjunto com o programa de upload (normalmente avrdude), o novo esboço é enviado pela porta serial. O bootloader apaga as páginas da memória flash e as substitui pelo novo código. Uma vez feito isso, ele executa o novo código.

  • Se nenhuma instrução chegar, o bootloader salta para o endereço 0x0000 para executar o esboço existente na placa.


Como substituir o bootloader

Um método alternativo para programar um bootloader é usar um esboço que escrevi há um tempo que é executado em:

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

A placa de “programação” executa o esboço que tem bootloaders para várias placas embutidas 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 de carregador de boot para Uno

Essa foto em particular ilustra um Uno programando outro.

Você executa o sketch (operando através do Serial Monitor para dar comandos). Primeiro, ele identifica o chip alvo:

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, isso leva um segundo. Para programar um Mega2560 leva 3 segundos.

Instruções detalhadas em Programador de bootloader Atmega

O código pode ser baixado de Github: nickgammon / arduino_sketches

Comentários

  • Você deve selecionar o tipo do chip em que você está gravando (Ferramentas- > Placa ..)?Qual placa eu seleciono quando estou gravando o carregador de boot em um chip autônomo?
  • Você seleciona o tipo de placa que está usando para gravar o carregador de boot no IDE. O esboço do carregador de inicialização detecta automaticamente o tipo de placa de destino.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *