Cuando el dispositivo maestro transfiere una parte de los datos, el esclavo responderá una vez que el esclavo haya recibido los datos. Por lo tanto, no es posible garantizar la integridad de los datos solo mediante el sondeo ACK.
Implementé una función C:
unsigned char i2c_write_byte(unsigned char s);
Aquí estoy devolviendo el bit ACKSTAT. Entonces, si no hay un ACK enviado por el esclavo, intentaré enviar los datos nuevamente usando:
while(!i2c_write_byte(data));
Sé que el noveno reloj es para ACK, pero qué pasa si no hay un ACK enviado por el dispositivo esclavo. Entonces debería detectarse como NACK, lo que significa que el esclavo no logró un SDA bajo, que es el esclavo que nunca recibió datos transferidos.
Entonces, en esta ocasión, ¿debo enviar datos nuevamente o enviarlos después de un reinicio?
Solo puedo pensar en volver a enviar datos para solucionar el problema de NACK y aún no puedo resolver el error ocurrido en los datos mientras estaba en una transferencia.
Entonces, ¿cómo garantizar la integridad de los datos en I2C?