Es que la unica proteccion que se me ocurre es depender de algun bit (flag) de un registro en RAM. Para saber si poder grabar o no.
Me refiero al comienzo ponerlo en 1 luego de verificar la EEPROM y antes de grabar CADA BYTE ponerlo en 0. Al final de la rutina de EEPROM ponerlo en 1 de nuevo. ( Rutina que graba 1 solo numero) es decir terminas poniendo a 0 luego para cada numero.
Esto podria evitar el que se grabe por que "salto" el codigo. O en el peor caso, solo afectaria a 1 solo campo. Y no todos. Esto tambien implica que la rutina de ponerlos a default deberian de solo modificar el byte problematico y no los demas ( o un grupo y no todos )
Tambien es depender demasiado de la integridad de los datos de la RAM.
Ahora si la modificacion de la EEPROM ocurre por un ruido introducido por Vdd/Vss, hay otro problema. Y ya aca me cuestionaria realmente si la RAM es correcta tambien. Lo cual no podes tener una certeza al igual que la EEPROM. Por eso mismo una proteccion por Soft no veia posible.
Vi una placa que me trajeron que va en un auto, y solo posee una inductancia en la entrada ( 6 vueltas sobre un toroide pequeño ) en la alimentacion + capacitores de la fuente. Luego en el PIC 1 capacitor ceramico de .1uf y luego uno de tantalio ( este fue agregado, soldado por debajo ) de 6uF, toda la proteccion
, y usa la EEPROM para su programacion.
-------------------
Sigamos pensando nuevamente en el "salto" de programa.
La solucion que di antes queda inutilizada al saltar a la rutina que la graba, hagamos algo mas complejo, antes de la rutina de grabar Toda la EEPROM ademas corroboramos que existan 2 bytes en cierto orden en la RAM ( algo parecido al 0x55 y 0xAA ) Si no estan no graba. Pero aun asi el "salto" puede llevarlo a otra parte donde se ponen esos valores y se le da a grabar. Seguimos con las misma. Lo va a hacer mas dificil, pero no va a solucionar el tema.
Resumen comparacion con algo en la RAM no se puede, por que el salto puede coincidir con las instrucciones de seteo.
-------------------
¿Es realmente un "salto" ?
Si tenes el WDT podes masomenos saberlo, De todas las direcciones de memoria viene a caer JUSTO en la EEPROM y encima varias veces seguidas?. Si ocurre muchas veces y suponemos que el salto es aleatorio, deberian haber saltos de software por muchos lados y no solo en la rutina de la EEPROM. Podrias poner el WDT, y leer los bits de reset para determinar si es que ocurre con el WDT, deberias tener reset por WDT como loco Si realmente fuera un salto de software. Ya que como decia si es aleatorio y suerte que caiga en la EEPROM entonces deberia haber muchos mas saltos que ocurran en partes sin ocupar de la flash.
Otra cosa, si el ruido afectara al PC, por que no afecta a todos los demas registros/RAM, etc. Y nuevamente estamos ante la posibilidad que se modifiquen miles de cosas pero solo se hace una siempre.. Que sumado a lo anterior parece poco probable lo del salto ( aun asi si fuera mas "vulnerable" el PC que lo demas )
Al menos es lo que pienso. Yo opino igual que Leon, para mi es un ruido externo por la alimentacion. Choque en la alimentacion general del micro + capacidad bien cerca de los pines