Getnet DocsGetnet Docs

Integridad y checksums

Esta referencia describe los checksums matemáticos que se usan para validar la integridad de los datos en la comunicación por la conexión serie.

Verificación de redundancia longitudinal (LRC)

Todo mensaje operativo intercambiado entre el SP y el PP (por ejemplo, Y19, Y15, Y02) debe llevar un byte de validación LRC. Ese byte garantiza que el payload no se haya corrompido durante la transmisión serie.

Alcance de la validación LRC

El cálculo del byte LRC debe abarcar todos los caracteres del payload activo. Empieza inmediatamente después del carácter de control <STX> y termina inmediatamente después del carácter de control <ETX>.

  • Incluidos: los caracteres del payload, los separadores <FS> y <ETX>.
  • Excluidos: <STX>, <ACK>, <NAK> y el propio byte {LRC} calculado previamente.

Algoritmo LRC

El LRC es un cálculo directo de OR exclusivo (XOR) que se ejecuta de forma secuencial sobre cada byte de la cadena objetivo.

Lógica del pseudocódigo:

def calculate_lrc(payload_string, etx_char):
    lrc = 0
    # Process the entire payload string
    for byte in payload_string:
        lrc = lrc ^ ord(byte)
    
    # Process the ETX character 
    lrc = lrc ^ ord(etx_char)
    
    return lrc

Acción ante un fallo de LRC

Al recibir un mensaje:

  1. La parte receptora (el SP o el PP) debe calcular de forma independiente el LRC del bloque de datos entrante hasta el <ETX>.
  2. Después compara el LRC calculado con el byte {LRC} que viene al final del mensaje.
  3. Si coinciden, el receptor devuelve un carácter <ACK> (Acknowledge).
  4. Si difieren, el receptor devuelve un carácter <NAK> (Negative Acknowledge). El remitente debe retransmitir de inmediato el mismo paquete completo.

Verificación de redundancia cíclica (CRC-16)

El byte LRC garantiza la integridad de los comandos operativos cortos. Para las transferencias masivas de datos, el terminal necesita un marco de validación más robusto, en particular durante las descargas remotas de aplicaciones con el comando YDL.

Alcance del CRC

Durante una descarga de archivo YDL, el archivo se divide en numerosos bloques manejables. El SP debe calcular un CRC sobre el payload de datos [DDA] de cada fragmento individual y enviar ese CRC junto con el fragmento.

Algoritmo CRC (CRC-16/CCITT-FALSE)

El sistema usa un CRC de 16 bits basado en el polinomio estándar CCITT. Estos son los parámetros estándar:

  • Ancho: 16 bits
  • Polinomio: 0x1021 (X^16 + X^12 + X^5 + 1)
  • Valor inicial: 0xFFFF
  • Entrada reflejada: False
  • Resultado reflejado: False
  • Valor XOR final: 0x0000

Nota de implementación

Como el CRC actúa sobre el bloque de datos del paquete YDL, el propio mensaje YDL sigue necesitando un byte {LRC} estándar al final de su trama. Ese byte valida la cadena de transmisión. Por lo tanto, una transmisión YDL contiene dos capas de integridad distintas: el CRC verifica el fragmento binario del APK y el LRC verifica la trama serie ascii que transporta ese fragmento.