togarha, creo que si te he entendido, el punto es que yo analizo la funcionalidad de otra forma, déjame reexplicar mi punto a ver si me puedo dar a entender o realmente estoy muy fuera de foco y no lo veo.
1. El bootloader no se borrará con lo cual el pic no queda acéfalo nunca. El pic sigue funcionando. No hablo de un simple bootloader que reciba bytes y los guarde, sino que haya una interacción 'inteligente' con la PC.
2. En un bootloader no hay "programador" sino precisamente una PC u otro microcontrolador, con lo cual "la pérdida de comunicación con el programador" estaría en el terreno de lo que al hardware corresponde. Una transferencia/grabación de esta índole no debiera llevar más que un minuto.
En este punto, si hablamos de una comunicación serie o usb, no debiera haber mayor problema. Es más si hay un corte en la comunicación el software del lado de la PC debiera advertir al usuario para repetir la acción. Precisamente por eso hablamos de un bootloader, donde el usuario puede estar ahí viendo qué ocurre.
3. El pic revisa todo lo programado y en cuyo caso si algo falta o falla (sea el bloque 3, 4, o cualesquiera), volverá a pedir al PC o al microcontrolador externo que le vuelva a enviar el paquete en cuestión.
Lo único que veo en contra del punto 2 y 3, es si la comunicación la pretendes hacer por algún medio inalámbrico donde no tengas total control del medio físico.
Hace tiempo diseñé una autoactualización por memoria flash externa i2c pero era para otro caso diferente en que el usuario se llevaba la memoria en cuestión y podía actualizar su equipo sin necesidad de tener una pc u otro hardware extra. Tal vez por esa razón me vi movido a hacer un humilde aporte, sumado a que pienso en el plazo cercano meterme con los dspic.
i) El pic comprobaba si su versión era diferente a la de la memoria, en cuyo caso hacia el upgrade.
ii) El bootloader nunca se borraba.
iii) El pic no queda acéfalo porque si algo falla vuelve a reintentar y a reintentar hasta mostrar un mensaje de error, en cuyo caso el operario deberá reintentar la operación o bien poner la memoria anterior. Esto es algo simple y todo ocurre en solo unos segundos, lo peor que podía pasar eran 2 cosas.
iii.a) pérdida de comunicación con la memoria i2c por algún problema de hardware.
iii.b) error de checksum en la memoria.
Ambas opciones las tuve que provocar intencionalmente porque no me había pasado que efectivamente ocurran.
Espero haber aclarado mi punto.
En resumen, no digo que la solución sea mala , solamente digo que para un bootloader con estas características donde en definitiva hay una pc presente del otro lado, no es necesario ese control por la memoria flash, pero sí es útil cuando el usuario no sabe ni jota de usar una pc o realmente no tiene porqué lidiar con todo ese hardware y simplemente se lleva la memoria y hace la actualización.
Saludos