Arduino como ISP sem um computador

12

Alguém já viu ou conhece um método de pré-carregar (usando um computador ou o que seja) um firmware como dados em um arduino configurado para operar como um isp e, em seguida, usando esse arduino, conecte a interface isp em outro e faça o upload do firmware.

Para esclarecer, estou procurando uma maneira de tornar possível o upload de esboços do arduino sem uma conexão direta com um computador completo.

Idealmente, as etapas envolvidas seriam:

  1. Escrever novo esboço / firmware
  2. Compilar firmware
  3. Escreva um firmware de cópia no Arduino A como dados (o Arduino A está configurado para funcionar como ISP)
  4. Desconecte o Arduino A do computador
  5. Em um local separado, conecte o Arduino A ao Arduino B usando cabeçalhos do ISP
  6. O uso de algum método (talvez um botão) aciona o Arduino A para fazer upload do firmware pré-carregado no Arduino B.

Estou assumindo que, teoricamente, poderia funcionar porque o upload de firmware é apenas uma troca de bytes pela interface SPI, mas não tenho certeza sobre a realidade.

O cenário para o qual estou pensando é que, se eu instalasse um arduino (permanentemente) em um local remoto do meu computador (não tenho laptop nem quero um), seria problemático reprogramar isto.

O outro método que considerei é usar o ATMEGA empacotado com DIL, que eu posso remover da placa e programar no computador e retornar à placa - no entanto, eu preferiria não arriscar dobrar os pinos e ter que remover o chip cada vez que eu quero reprogramar.

m3z
fonte
O resultado seria que você só seria capaz de programar outros Arduinos com o esboço / firmware exato carregado no programador (Arduino A). Portanto, seria útil fazer cópias como em uma linha de produção, é isso? Se você precisar alterar alguma coisa no esboço, precisará voltar ao computador para modificá-lo e carregá-lo novamente. Eu entendi direito?
Ricardo
1
Não é possível manter a "imagem em flash" para ser copiada para o destino em outro suporte (como um cartão SD)?
jfpoilpret
Sim. Suponho que também seria bom para uma linha de produção. Minha situação é que tenho um arduino colado em um gabinete difícil de mover e fica em uma sala diferente do meu computador (também difícil de mover). Então, eu ficaria feliz em carregar o esboço no Arduino A toda vez que quisesse alterá-lo.
M3z 19/03/2014
2
Isso foi feito com o objetivo limitado de programar um gerenciador de inicialização - github.com/WestfW/OptiLoader - mas deve funcionar com qualquer carga útil menor que o flash disponível, menos o tamanho da ferramenta. Para um firmware de carga útil maior, um dispositivo de armazenamento externo (ou simplesmente um Arduino Mega?) Deve funcionar.
Chris Stratton
@ ChrisStratton que parece perfeito para eu me adaptar. Graças
m3z

Respostas:

5

Acho µProg - programador AVR pequeno, rápido e portátil com SD faz o que você deseja. Você pode armazenar vários arquivos no cartão SD (hex, eep etc.) e selecionar no menu do dispositivo qual deles deseja gravar no MCU de destino sem a necessidade de um PC.
A melhor parte é que ele está disponível gratuitamente (PCB, esquema, firmware etc).

Um programador AVR portátil e único! Ajuda onde quer que você precise atualizar o firmware do dispositivo, onde o dispositivo de destino está em um local de difícil acesso e você não pode (ou não deseja) levar seu laptop com vários fios com você. Trivialmente fácil de usar, super barato de fazer, super pequeno, super rápido, usa cartões SD…

Recursos:

  • super pequeno - dimensões 44 x 39 x 5,5 mm
  • super rápido - escreva até 12,5kB / s, leia até 14,5kB / s
  • usa meio de armazenamento barato - pequenos cartões MICRO SD
  • suporta sistemas de arquivos FAT16 e FAT32
  • pode ler, escrever, verificar memória flash e eeprom
  • pode ler, escrever, verificar fusebits e lockbits
  • gravar e ler em arquivos BIN, HEX e TXT
  • pode definir valores padrão de fusebits, apagar memórias
  • display gráfico LPH7779 barato e fácil de obter
  • mostra animações engraçadas após cada operação
  • cabeçalho de programação padrão - Atmel 6-PIN ISP
  • tem a função de atualizar automaticamente seu próprio firmware (do SD)
  • muito simples de usar, 4 botões de navegação
  • menu de configuração do usuário
  • seleção automática de velocidade de programação (até 4MHz)
  • Opera em 3V, programa chips fornecidos de 3V a 5V

Lista de chips suportados

insira a descrição da imagem aqui

alexan_e
fonte
Parece bom. Irá investigar no fim de semana.
M3z 21/03
Não sei como perdi essa pergunta no outro dia. Só conversei com um amigo sobre como criar esse projeto exato. E então eu vejo sua resposta.
Madivad 22/03/14
4

Não tenho solução direta para o que você deseja, mas sim, é possível fazê-lo. Você pode hackear um firmware do carregador de inicialização para que ele leia o código flash do firmware e faça o upload pelo ISP.

Embora você obviamente não possa carregar 32k de firmware no AVR de destino, se ambos os arduinos tiverem apenas 32k de flash total em seus MCUs, será necessário que o pisca-pisca tenha mais flash que o alvo, se você quiser (um 1284p ou 2560 Mega será longe o suficiente, ou um 328 / 32u4 será uma boa opção para exibir um 168 ou um attiny). A única exceção seria fazer com que o firmware ficasse muito menor que a memória total (como em um esboço piscando).

No final, isso não será fácil, é um código AVR 100% puro, mas você pode fazê-lo. Dê uma olhada em:

A maneira como eu implementaria isso seria ajustar tudo no carregador de inicialização do dispositivo de pisca-pisca, para que ele leia o firmware (tudo de 0x00 ao endereço de início do carregador de inicialização) e o atualize através do ISP, mesclando o AVRISP com o Optiboot.

Enfim, esse é um projeto interessante para um workshop sobre gerenciadores de inicialização e AVRs que posso sugerir no meu espaço de hackers local! ;-)

HTH

zmo
fonte
Obrigado, o código-fonte AVRISP não parece tão complexo quanto eu esperava. Vou olhar um pouco mais sobre isso no fim de semana
m3z 19/03/14
Onde está o seu espaço de hackers local? :)
Madivad 22/03/14
está na França Le Loop
zmo 22/03
sem problemas, isso é o que votar se é para ;-)
Zmo