A resposta simples é sim - você precisa de blocos de flash suficientes para suportar imagens do carregador de inicialização e código A / B, se desejar alta confiabilidade. Antes de ativar a nova imagem, você pode escrever a coisa toda, verificar e potencialmente tentar novamente.
No entanto, essa é uma estratégia cara / confiável e há coisas que você pode fazer para reduzir a sobrecarga. O suporte de baixo nível para atualizações do OTA também pode ser parte do firmware do dispositivo ou do SO, para que você possa evitar o uso de seus próprios recursos, a menos que queira aprender. Esse recurso pode ser descrito como FOTA
.
O particionamento da sua base de código permite atualizações incrementais; na melhor das hipóteses, o gerenciador de inicialização é capaz de ativar a conexão de rede, fazer o download e verificar o código sem precisar de nenhum código de usuário substituto. Com um gateway local, o gerenciamento desta tarefa pode ser delegado a partir dos pontos de extremidade de baixo custo.
Muitos dispositivos possuem uma pequena quantidade de flash para apagar palavras e, mesmo com essa falha, você pode definir bits sem precisar apagar um bloco inteiro. Esses recursos podem ser usados para manipular tabelas de salto e unir códigos atualizados em blocos de tamanhos de blocos. Mesmo se você planejou inicialmente um espaço de código A / B completo, pode ser necessário voltar a um esquema mais complexo quando a base de código crescer demais.
Para esclarecer a funcionalidade que pode ser alcançada com uma solução sofisticada de firmware por via aérea, o carregador de inicialização e potencialmente uma pilha de comunicação primária podem permanecer residentes enquanto o espaço restante total do aplicativo do usuário é reapresentado. Isso não precisa de sobrecarga (principalmente se o particionamento de bloco for suave). No cenário em que a pilha de comunicação precisa ser atualizada, a região geralmente usada para o código do aplicativo pode ser temporariamente usada durante o download e a verificação. Conseguir isso requer algum suporte no SoC, mas os dispositivos de segunda e terceira geração projetados com isso em mente já existem.