Atmel SAM3X comutação de banco duplo não funciona

Atualmente, estou trabalhando com um microcontrolador Atmel SAM3X8 ARM que possui uma memória flash dupla de 2 x 256 KB. Estou tentando implementar um recurso de atualização de firmware, que coloca o novo firmware no banco de flash atualmente não utilizado e, quando concluído, troca os bancos usando o remapeamento do flash para executar o novo firmware.

A folha de dados indica que, para isso, preciso definir o bit GPNVM2; o MCU remapeará a memória; portanto, o Flash 1 agora está em 0x80000 e o Flash 0 em 0xC0000. Isso também levará o código de execução do MCU a partir do Flash 1.

Para citar a folha de dados:

O GPNVM2 é usado apenas para trocar o Flash 0 e o Flash 1. Se GPNVM2 estiver ATIVADO, o Flash 1 será mapeado no endereço 0x0008_0000 (o Flash 1 e o Flash 0 são contínuos). Se GPNVM2 estiver DESATIVADO, o Flash 0 será mapeado no endereço 0x0008_0000 (o Flash 0 e o Flash 1 são contínuos).

[...]

O GPNVM2 permite selecionar se o Flash 0 ou o Flash 1 é usado para a inicialização. A configuração do GPNVM bit 2 seleciona a inicialização do Flash 1, limpando-a e seleciona a inicialização do Flash 0.

Mas quando eu defino GPNVM2, via SAM-BA ou meu próprio firmware usandoflash_set_gpnvm (2) (API do ASF SAM Flash Service), ele ainda será inicializado a partir do programa no Flash 0 e o novo programa ainda residirá no deslocamento 0xC0000 do Flash 1. O estado do GPNVM2 foi verificado porflash_is_gpnvm_set (2)

A atualização do firmware no banco Flash1 funciona perfeitamente, o que foi verificado ao descarregar toda a memória flash com o SAM-BA.

Há uma errata da Atmel sobre um problema: o remapeamento do flash funciona apenas para partes menores que 64 KB. Meu código é menor que isso (40 KB), portanto, isso não deve ser um problema.

Não encontrei nenhuma outra pessoa com esse problema, nem nenhum exemplo de como usá-lo, então talvez alguém possa me dizer se estou fazendo algo errado aqui ou o que mais deve ser verificado.

questionAnswers(1)

yourAnswerToTheQuestion