En las comunicaciones tipo UNICAST (es decir, excluyendo los envíos masivos en modo BROADCAST o LOCALCAST), un paquete de datos únicamente debe reenviarse si la pantalla ha devuelto un código de error de transmisión o si el maestro no ha recibido el acuse de recibo (ACK).
El reenvío automático o incontrolado de información puede provocar que los datos dentro de un programa queden duplicados, desencadenando una ejecución o visualización no deseada por el usuario. Por ello, en caso de no recibir el ACK, es obligatorio seguir un estricto procedimiento de verificación para determinar si realmente es necesario reenviar el paquete.
Procedimiento de verificación ante la pérdida de ACK
Sigue esta secuencia lógica para asegurar la integridad de la transmisión:
Fase 1: Comprobación del último paquete recibido
1. Solicitar número de paquete: Espera 100 ms tras el fallo de comunicación y envía la orden GET_NUM_PACKET.
2. Esperar respuesta: La pantalla debe devolver el número del último paquete recibido correctamente. Si no se recibe respuesta, espera 3 segundos.
3. Reintentos: Si sigue sin haber respuesta, repite el paso 1 hasta un máximo de 3 veces. Si tras 3 intentos no hay respuesta, se considera que la comunicación se ha interrumpido.
Fase 2: Comprobación del Checksum
4. Solicitar Checksum: Si la comunicación sigue activa, espera 100 ms y envía la orden CHECKSUM.
5. Esperar respuesta: La pantalla enviará el Checksum del último paquete validado. Si no llega, espera 3 segundos.
6. Reintentos: Al igual que en la fase anterior, repite hasta 3 veces si es necesario. Si no hay respuesta tras los reintentos, la comunicación se da por interrumpida.
Fase 3: Evaluación de los datos
7. Verificación positiva: Si tanto el Checksum como el número de paquete devueltos por la pantalla coinciden con los del paquete que intentabas enviar, significa que el display lo recibió y procesó correctamente (simplemente se perdió el ACK de vuelta). Puedes continuar tranquilamente con la transmisión del siguiente paquete.
8. Doble verificación (si los datos no coinciden): Si los datos no coinciden, debes realizar una última comprobación enviando de nuevo GET NUM PACKET tras 100 ms. (Aplica la misma regla de esperar 3 segundos y reintentar hasta 3 veces en caso de silencio ).
9. Resolución final: * Si en esta doble verificación los datos sí coinciden, se asume que la primera lectura fue errónea, pero el paquete original llegó bien. Continúa con el siguiente paquete.
- Si los datos siguen sin coincidir, se concluye de forma definitiva que el paquete NO fue recibido por el display y, por tanto, debe reenviarse.
…
