La solución es en realidad conceptualmente bastante simple. Un gestor de arranque, por su propia naturaleza, está diseñado para descargar nuevo firmware al dispositivo. Por lo tanto, contendrá al menos una instrucción spm. Debido a que el registro de configuración spm debe escribirse no más de 4 ciclos antes de la instrucción spm, significa que hay muy pocas secuencias que prácticamente se producen: solo sts, spm o out, secuencias spm. Entonces, todo lo que necesita es encontrar la secuencia en la sección del cargador de arranque; configurar los registros correctos y llamarlo.
Sin embargo, resultó que había un problema importante con eso también. Las instrucciones spm del cargador de arranque de autoprogramación V-USB no son una pequeña rutina, sino que están integradas en el código principal; así que llamarlo solo provocaría que el AVR se bloquee al intentar ejecutar el resto del cargador de arranque V-USB.
Desagradable, pero de nuevo hay una solución. Al usar un temporizador sincronizado a la frecuencia de la CPU (que es fácil en un AVR), puede crear una rutina en ensamblador que configure los registros para la secuencia spm del Bootloader; lo llama y justo en el momento en que se ejecuta el primer ciclo del SPM, la interrupción del temporizador se apaga y el AVR debe saltar a su rutina de interrupción (en el espacio de la aplicación). La rutina de interrupción muestra la dirección del gestor de arranque y luego vuelve al código anterior, que es la rutina que configura la secuencia spm de salida. Esto debería funcionar, porque cuando aplica las instrucciones spm a la sección del cargador de arranque, la CPU se detiene hasta que se completa.
Básicamente, puedes hacer una programación sofisticada y hacer que el gestor de arranque se maneje solo, haciendo que la MCU sea inútil sin un programador dedicado.