Que alternativas existem para o carregador de inicialização Optiboot?


12

Quase todas as placas Arduino modernas usam o carregador de inicialização Optiboot . Comparado com o ATmegaboot usado anteriormente, ele é menor em termos de flash (em cerca de 1,5 KB) e mais rápido na velocidade de upload (115,2k vs 57,6k) e inicia seu esboço mais rapidamente (o atraso enquanto aguarda após a redefinição é mais curto).

Existem alternativas para o carregador de inicialização Optiboot? Especificamente, existem carregadores de inicialização menores (em termos de flash)? Que diferenças eles têm?

Respostas:


8

Optiboot é o menor gerenciador de inicialização disponível.

Porém, existe um gerenciador de inicialização muito mais poderoso (com console embutido para teste de hardware, verificação de conteúdo de RAM e Flash etc.) com um protocolo de comunicação stk500v2 mais desenvolvido e robusto entre o avrdude e o gerenciador de inicialização AVR.

Eu usei no ATmega2560 e no ATmega1284p. Ele funciona para o contador de programas de 3 e 2 bytes do MCU.

Eu tenho uma versão do STK500v2 Bootloader no Sourceforge .

Este gerenciador de inicialização é baseado no gerenciador de inicialização Peter Fleury STK500v2, atualizado por Mark Sproul. Fiz edições para apoiá-lo na placa Goldilocks (um ATmega1284p).

O principal recurso é usar o protocolo STK500v2 para carregar a imagem do Flash no Arduino. Este protocolo é mais robusto e oferece melhores recursos de erro do que o protocolo avr109 . Além disso, o protocolo avr109 é chamado de "Arduino" no mundo do Arduino, porque alterna o DTR (para redefinir a placa e entrar automaticamente no gerenciador de inicialização), e o protocolo STK500v2 é chamado de "Wiring" no mundo do Arduino, devido ao mesmo razão.

O carregador de inicialização Fleury / Sproul STK500v2 foi projetado para funcionar com o ATmega2560, que possui um registro de programa de 3 bytes, devido ao tamanho maior do Flash. Mas também suporta placas normais de 2 bytes (na verdade, tudo o mais).

Para placas com bastante Flash (como o Goldilocks 1284p), existe um monitor de hardware que pode ser usado para consultar Flash, SRAM e hardware; você pode verificar as conexões sem código adicional e o conteúdo real do Flash e da EEPROM. Como o 1284p suporta 2 USART, eu adicionei a capacidade de depuração no USART1 , para que o processo de upload via USART0 não seja perturbado.


Isso parece fazer parte do FreeRTOS, esse gerenciador de inicialização é totalmente independente do FreeRTOS?
Jfpoilpret 28/03

1
É totalmente independente. O gerenciador de inicialização é usado para gravar flash com qualquer coisa. O FreeRTOS vem depois que o main () é iniciado. Eu apenas mantenho no mesmo repositório. Eu não escrevi, apenas modifiquei para meus propósitos.
feilipu

Isso parece interessante; seria útil se você pudesse resumir os recursos importantes do seu gerenciador de inicialização em sua resposta: tamanho no Flash, velocidade máxima de upload, velocidades do Arduino com as quais ele pode trabalhar e mais alguns detalhes sobre os testes de hardware).
Jfpoilpret 29/03/2014

É (com base no) carregador de inicialização Peter Fleury STK500v2, atualizado por Mark Sproul. Fiz edições para apoiá-lo na placa Goldilocks (um ATmega1284p). O principal recurso é usar o protocolo STK500v2 para carregar a imagem flash no Arduino. Este protocolo é mais robusto e oferece melhores recursos de erro do que o protocolo avr109. Além disso, o protocolo avr109 é chamado de "Arduino" no mundo do Arduino, porque alterna o DTR (para redefinir a placa e entrar automaticamente no gerenciador de inicialização), e o protocolo STK500v2 é chamado de "Wiring" no mundo do Arduino, devido ao mesmo razão.
feilipu 29/03

1
Obrigado pela informação, atualizei sua postagem, pois acho que essa informação deve fazer parte diretamente de sua resposta. Sinta-se à vontade para adicionar mais informações, se achar melhor!
Jfpoilpret 29/03

3

O TinySafeBoot é uma alternativa para dispositivos ATtiny e ATmega.

  • Compatível com muitos ATtinys e ATmegas (veja abaixo)

  • Acesso de leitura / gravação ao Flash e EEPROM.

  • Todos os IOs disponíveis para comunicação serial

  • Um fio, também com vários AVRs em uma única linha

  • Protocolo robusto com autobausa.

  • Ativado por Reset + Senha (opcional)

  • O usuário da senha e do tempo limite pode ser alterado a qualquer momento.

  • "Apagar emergência" para superar a senha perdida - mata todos os dados, mas deixa intacto o gerenciador de inicialização.

  • ATtinys: ~ 550 bytes,

  • ATmegas: <512 bytes (!)

  • O TSB for ATtiny pode se atualizar.

  • O código-fonte é um software livre (GPL)


Alguém sabe como o TSB se compara ao Optiboot? Última atualização parece pelo menos 2 anos atrás ...
johny why

1

Existem alternativas para o carregador de inicialização Optiboot?

Err ... na verdade não. Na verdade, há uma modificação [não oficial] no Optiboot para torná-lo mais rápido durante o upload .

Para instalar as variações de alta taxa de transmissão…

  • Verifique se o IDE do Arduino não está em execução
  • Faça o download do arquivo 7-Zip usando o link acima
  • Extraia os três arquivos para o seguinte diretório: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Abra o arquivo boards.txt localizado no seguinte diretório: {Arduino Installation Root}\hardware\arduino\

Encontre esta seção dentro dela:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Adicione a seguinte seção…

uno_uf.name=Arduino Uno / Upload Fast
uno_uf.upload.protocol=arduino
uno_uf.upload.maximum_size=32256
uno_uf.upload.speed=250000
uno_uf.bootloader.low_fuses=0xff
uno_uf.bootloader.high_fuses=0xde
uno_uf.bootloader.extended_fuses=0x05
uno_uf.bootloader.path=optiboot
uno_uf.bootloader.file=optiboot_atmega328_250000.hex
uno_uf.bootloader.unlock_bits=0x3F
uno_uf.bootloader.lock_bits=0x0F
uno_uf.build.mcu=atmega328p
uno_uf.build.f_cpu=16000000L
uno_uf.build.core=arduino
uno_uf.build.variant=standard
  • Altere os dois valores destacados para a taxa de transmissão que você planeja usar: 250000, 500000 ou 1000000 Salve e feche o arquivo boards.txt
  • Usando seu programador de ISP favorito, instale o novo gerenciador de inicialização. Não se esqueça de: Verifique se a placa Arduino Uno / Upload Fast está selecionada (Ferramentas / Placa) , se apropriado, verifique se a Porta serial do seu programador está selecionada (Ferramentas / Porta serial) , Verifique se o programador está selecionado (Ferramentas / Programador ) , Depois de instalar o carregador de inicialização, altere a Porta serial para a porta serial do seu Arduino Uno .

Texto acima ligeiramente modificado para compatibilidade com o site. Postagem original


Além disso, e o gerenciador de inicialização ATmegaboot, você não consegue encontrar nenhuma alternativa. Eu imagino que, se o Arduino o carregar em todos os Unos já produzidos, ele será bastante otimizado. O truque acima acelera o tempo de upload, mas não reduz o tamanho do gerenciador de inicialização. Você também pode remover o tempo de espera no gerenciador de inicialização para que ele tenha uma inicialização mais rápida.

Se você está preocupado com a maximização do flash, consulte: Como realmente encolher um esboço e esta resposta [em O que posso fazer se ficar sem memória Flash ou SRAM? ]

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.