A solução é realmente conceitualmente bastante simples. Um gerenciador de inicialização, por sua própria natureza, é projetado para baixar um novo firmware para o dispositivo. Portanto, ele conterá pelo menos uma instrução spm. Como o registro de configuração spm deve ser gravado não mais que 4 ciclos antes da instrução spm, significa que existem muito poucas sequências que ocorrem praticamente: apenas sts, spm ou out, sequências spm. Então, tudo o que você precisa é encontrar a sequência na seção do gerenciador de inicialização; configure os registros certos e chame-o.
No entanto, também houve um grande problema com isso. As instruções spm do carregador de inicialização com programação automática do V-USB não são uma rotina simples e agradável, mas estão embutidas no código principal; assim, chamar apenas causaria uma falha no AVR, ao tentar executar o restante do carregador de inicialização V-USB.
Desagradável, mas novamente há uma solução. Usando um timer com freqüência na CPU (que é fácil em um AVR), você pode criar uma rotina no assembler que configure os registros para a sequência spm de saída do Bootloader; chama e, exatamente no momento em que é executado o primeiro ciclo do spm, a interrupção do temporizador dispara e o AVR deve pular para sua rotina de interrupção (no espaço do aplicativo). A rotina de interrupção exibe o endereço do carregador de inicialização e retorna ao código anterior - que é a rotina que configura a sequência spm de saída. Isso deve funcionar, porque quando você aplica instruções spm à seção do gerenciador de inicialização, a CPU é interrompida até sua conclusão.
Então, basicamente, você pode fazer uma programação sofisticada e fazer com que o gerenciador de inicialização se propague, tornando o MCU inútil sem um programador dedicado.