Ayuda para identificar la suma de comprobación

7

Necesito ayuda para identificar el algoritmo de suma de comprobación en los siguientes paquetes, por favor.

Entonces, el formato de paquetes es:

sd ?? dd dd dd ??

donde

s = start nibble d = datos (decimal codificado en binario) ? = desconocido - posiblemente suma de comprobación

Aquí hay cinco paquetes (el número se transmite entre paréntesis) y el paquete real enviado en el cable en hexadecimal a la derecha.

(1112694): f1 f7 11 26 94 74

(5432432): f5 7c 43 24 32 a2

(6430116): f6 dc 43 01 16 48

(3254817): f3 d8 25 48 17 e9

(0042863): f0 ce 04 28 63 b2

He intentado XOR y sumando pero no parecen funcionar. Los paquetes se transmiten utilizando UART.

cualquier ayuda apreciada!

    
pregunta user3780104

1 respuesta

16

Toma tu primera fila de datos:

(1112694): f1 f7 11 26 94 74

Haz un flujo de bytes de números hexadecimales como:

0x94

0x26

0x11

0xF1

Ejecute esos bytes en ese orden a través de un algoritmo CRC CRC-CCITT (XModem) para llegar a un CRC de 0xF774. El byte alto del CRC va a la segunda posición del mensaje y el byte bajo del CRC va a la última posición del mensaje.

Esta misma técnica funciona para cada uno de los mensajes en su muestra. Utilicé la calculadora en línea para mostrar el resultado como aquí:

LafunciónpolinomialparaelalgoritmoCRC-CCITTeslasiguiente:

Lo dejo a usted para que busque el código fuente del algoritmo CRC-CCITT y comprenda los matices específicos del uso de ese código en la antigua metodología XModem. El polinomio 0x1021 es bien conocido y lo he usado durante años en mis proyectos para todo, desde protocolos de comunicaciones hasta códigos de verificación en conjuntos de datos almacenados en EEPROM seriales y chips FRAM. Los matices de uso entran en juego en cuanto a si los campos CRC del paquete están preconfigurados a algo como 0x0000 o 0xFFFF y si esos campos preestablecidos también se pasan a través de la calculadora CRC para llegar a un resultado. Tenga en cuenta que hay una gran cantidad de información en línea.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas