Use um chip com mais do dobro da quantidade de memória Flash necessária para o seu código. Dessa forma, você pode obter o novo firmware nessa memória enquanto ainda deixa o antigo, caso algo dê errado.
Depois de descriptografar e verificar as somas de verificação no novo firmware, um carregador de inicialização pode copiá-lo para o local final, substituindo o antigo. Se algo der errado durante esta parte, após uma reinicialização forçada, o carregador de inicialização deve verificar que o novo firmware não é válido (executando a soma de verificação novamente) e tente novamente a cópia.
Esta é a maneira mais simples e infalível que eu conheço. Ele também requer pouco código no carregador de inicialização e não requer duplicação de nenhuma funcionalidade entre o programa principal e o carregador de inicialização (você não precisa de nenhuma lógica de comunicação no carregador de inicialização).
Use um gerenciador de inicialização e alguns KB de flash extra.
Uma atualização é realizada pelo carregador de inicialização, enviando algum comando especial sobre UART, USB, I2C ou outro protocolo. Somente o código principal é sempre atualizado - o código do carregador de inicialização nunca é tocado, exceto por meio de um programador externo (por exemplo, JTAG / PICkit for PICs etc.)
Se a atualização falhar (falta de energia, alguém tropeçar em um fio ou outro motivo), o widget não funcionará, mas o carregador de inicialização ainda estará lá para que a atualização possa ser tentada novamente.
Um sinalizador pode ser definido em algum byte em algum lugar, o que impede que o código principal seja executado incorretamente porque não foi totalmente atualizado.
fonte
Se o seu dispositivo for comparativamente caro e você puder arcar com o custo (e os clientes se importam com atualizações), você pode fazer isso ...
(geralmente essa técnica requer armazenamento externo ou uso desonesto de jtag ..)
Tenha um micro de programa fixo (como um pequeno PIC) que pode interromper o sistema e reprogramá-lo.
porque você não pode alterar o firmware do "processador de atualização", ele nunca pode dar errado.
1) o usuário pode atualizar o dispositivo
2) se uma atualização falhar, eles sempre poderão tentar novamente. Não pode ser emparedado
3) mesmo quando o dispositivo de destino não suporta um gerenciador de inicialização (ele só deseja inicializar e executar), você ainda pode fazer o que deseja.
funciona para FPGA, DSP e outros alvos ímpares.
Pode ter uma interface de usuário realmente elegante (mesmo um PIC pode executar um servidor da Web ...)
fonte
Verifique se o seu produto possui algum tipo de interface serial simples , de preferência EIA232. Um conector não padrão é bom se você não tiver espaço para um DB-9. Por exemplo, um conector TRS é tudo o que você precisa para TxD, RxD e terra.
Ao programar o dispositivo pela primeira vez, inclua um gerenciador de inicialização . Isso deve ser o mais simples possível , porque mais cedo ou mais tarde você desejaria atualizar o próprio gerenciador de inicialização, se fosse necessário novos recursos. (Você provavelmente nem pode atualizá-lo)
Em seguida, o conector TRS. Use uma tomada com um interruptor para poder detectar quando há um conector presente. Basta verificar imediatamente após a reinicialização e iniciar o gerenciador de inicialização se o plug estiver presente; caso contrário, inicie o aplicativo. Dessa forma, o gerenciador de inicialização e o programa de aplicativo do usuário permanecem bem separados. (A verificação é realmente parte do carregador de inicialização; precisamos dela independentemente da versão do aplicativo, caso contrário, não poderemos entrar no carregador de inicialização!)
fonte
Que equipamento o 'modernizador' terá disponível? Um PC, um pendrive, um cartão micro SD?
Uma maneira seria ter o aplicativo em um item removível (pendrive, cartão SD, etc.). O chip carrega sua aplicação do item. Seu atualizador simplesmente troca o item e reinicia.
Os chips de microcontrolador ARM e Cortex que conheço (NXP, Atmel) possuem um carregador de inicialização serial embutido; portanto, se o seu atualizador chegar com um PC e um cabo serial (e você tiver organizado uma interface de porta COM), ele poderá simplesmente fazer o download do seu atualizar.
fonte