Atualização remota de firmware Arduino Nano

8

Estou trabalhando no Arduino Nano (32Kb de memória flash, dos quais 2Kb são usados ​​pelo gerenciador de inicialização, 2Kb SRAM, 1Kb EEPROM) .

O microcontrolador recebe a entrada de um dispositivo elétrico via módulo RS485 e lança os dados lidos em um servidor remoto usando o módulo GPRS A6 . O produto deve interagir com o servidor remoto, postando dados em intervalos.

Concluí a parte de integração e o dispositivo funciona bem, coletando dados e postando no servidor (a cerca de 10-15 km de distância). O único desafio que estou enfrentando é que, se houver 100 desses dispositivos e precisar atualizar o firmware, usando o servidor remoto (ou qualquer outro mecanismo adequado), como devo proceder?

Eu já passei por muitos posts que sugerem o uso de outro Arduino como ISP, essa poderia ser minha última abordagem (pois aumentaria o custo final do produto).

A atualização de firmware over the air ainda não está clara, como na comunidade Stack Exchange para microcontroladores low-end. Qualquer discussão pode ser uma grande ajuda para muitos.

Ashish K
fonte
Descrever "local remoto", 10 metros, 1 km, 10 km para o usuário?
Bence Kaulics
@BenceKaulics, estamos usando o módulo GPRS para enviar solicitação ao microcontrolador que fica a cerca de 10 km de distância.
Ashish K
3
Você precisa descrever seu caso de uso com mais clareza, incluindo a pilha de software. Dê uma olhada nas outras perguntas de atualizações sem fio .
Sean Houlihane
Este é um novo desenvolvimento ou você está tentando se adaptar a um produto existente?
Sean Houlihane
@ SeanHoulihane É um novo desenvolvimento. Eu poderia escolher qualquer microcontrolador (o custo é o único limite) que pode enviar dados para um servidor em um local remoto (10 Km) ao redor. Eu usei um módulo GPRS para enviar dados e o único desafio que estou enfrentando atualmente é como atualizo o firmware remotamente.
Ashish K

Respostas:

9

Resposta curta: é possível.

Resposta longa: é complicado. É por isso que tantas implementações muito ruins estão por aí.

No mínimo, você tem duas etapas em qualquer processo de atualização remota / remotamente.

  1. Transmissão de firmware
  2. Instalando firmware.

Obviamente, esse é o mínimo absoluto. Se você estiver trabalhando em iterações, também é um primeiro passo muito válido. Se você tiver mais de um dispositivo, poderá associar o firmware correto ao dispositivo correto . Se você quiser reduzir a chance de bloquear o dispositivo, desejará uma maneira de verificar o estado do dispositivo antes e depois da atualização , também desejará proteger o transporte e torná-lo o mais confiável possível e, naturalmente, tenha uma estratégia de fallback em caso de erro de atualização .

São mais cinco etapas que levam você a um produto confiável. Existem práticas recomendadas para essas coisas, mas elas dependem do ambiente do seu projeto. Talvez seja algo barato e a taxa de falha de 5% nas atualizações esteja correta, talvez seja um marcapasso e até um erro no total seja inaceitável, pois leva a um cenário fatal. Você precisará encontrar soluções para os princípios básicos que se encaixam no seu produto.

Além disso, existem dezenas de coisas diferentes a considerar. Você vai ter clientes? Você tem que informá-los? Eles têm alguma influência no tempo / instalação da atualização? Seus dispositivos estão em diferentes países? As restrições legais se aplicam? Os padrões normativos se aplicam? Quantos dispositivos você está atualizando? 1? Uma dúzia? Centenas? Milhões?

Se você atualizar cinco dispositivos, o processo poderá ser bastante falador. Se você estiver atualizando milhões, pode ficar muito caro. E sim, isso afeta o que listei acima como etapa um, transmitindo o firmware. Talvez você crie um marca-passo e um custo de processo de centenas de mensagens por atualização seja bom, considerando a alternativa.

Essas são apenas as perguntas que escrevi em dois minutos, portanto essa lista certamente não é exaustiva. Meu argumento é que sem informações sobre o cenário, não podemos realmente ajudá-lo adequadamente.

Helmar
fonte
Muito obrigado @Helmar, atualizarei a pergunta com o máximo de detalhes possível. Para microcontroladores que não suportam um sistema operacional executando, a atualização remota de firmware ainda é vaga e uma boa solução clara não só me ajudaria, mas para muitos que estão trabalhando em placas de desenvolvimento de baixo custo. Gostaria de solicitar que você o verifique também após a atualização.
Ashish K
1
Possível, desde que a plataforma permita que o flash seja dividido em pelo menos três regiões (ou você gosta de rodar a partir da RAM enquanto repassa o flash e possui muitas peças de reposição ou um JTAG implantável remotamente).
Sean Houlihane
@SeanHoulihane a série ATmega não pode ser executada a partir da RAM.
22617 Chris Stratton