En nuestro prototipo, tenemos una EEPROM basada en I2C. Durante la prueba de ESD (la chispa de alto potencial se inyecta en el sistema por un momento muy corto), los controladores cuelgan el código I2C.
Básicamente, existen bucles while en los que estamos verificando si el indicador de ocupado o ocupado está o no configurado, Reconocimiento recibido o no utilizando los registros respectivos. Por lo tanto, si alguno de los parámetros no coincide, entonces el código se bloqueará en ese bucle.
Este controlador funciona bien en condiciones normales.
Pero durante la inyección de chispa, se cuelga en uno de los bucles.
E incluso después de la prueba ESD permanece en la misma condición, no se recupera hasta que reiniciamos el dispositivo.
¿Qué podría ir mal con el controlador (MSP430F6438 bus I2c) o el esclavo (EEPROM basado en I2c), lo que hace que el código se cuelgue en uno de los bucles que comprueba el bus ocupado, la bandera de transmisión, la bandera de confirmación de recepción?