Eso realmente depende de qué tan complejo es el cargador de arranque que quieres escribir y de lo que tienes implementado en cuanto a las opciones de comunicación.
Por ejemplo, si el cargador de arranque está usando un UART para tomar el código de la aplicación, podría incluir una consola mínima (controlada por menú, por simplicidad) en el cargador de arranque que le permite emitir varios comandos, por ejemplo. borre la aplicación existente, inicie la aplicación existente o cargue una nueva aplicación. Incluya un tiempo de espera de inicio: si no presiona una tecla dentro de los 3 segundos posteriores al inicio, se inicia automáticamente la aplicación existente, si la hay, de lo contrario, permanece en el menú esperando a que se cargue una aplicación.
Si el cargador de arranque implementa un protocolo de transferencia de archivos en serie simple, bien documentado y ampliamente compatible, por ejemplo. Módem Y (sí, el módem Z es mucho, mucho mejor, pero es complicado ), entonces puede cargar archivos binarios de aplicaciones desde casi cualquier programa de terminal.