Con un ejemplo de datos con un valor hexadecimal de 0xda
y un polinomio 0x07
, encontraría el CRC de la siguiente manera (utilizando la metodología de Wikipedia )
0xda = 11011010
11011010|00000000
111
00111010|00000000
111
00000010|00000000
11 1
00000001|10000000
1 11
00000000|01000000
Pero la respuesta debe ser 0x08
según esta calculadora .
Necesito que la respuesta sea correcta para el estándar Ethernet IEEE. Descubrí que algunas fuentes rellenan los datos y algunas no . IEEE parece sugerir que se requiere relleno si los datos son menores que el ancho CRC.
Nota: Sé que el CRC tampoco es estrictamente el resto de los datos dividido por el polinomio.
0xda = 11011010 = 218
0x07 = 00000111 = 7
218/7 = 31 r 1
Como puede ver a continuación, el IEEE describe muchos más pasos que los sugeridos en Wikipedia. ¿Cómo puedo estar seguro de que las calculadoras CRC en línea dan los valores correctos para Ethernet?
Por mi intento de seguir el estándar (con el ejemplo de CRC de 8 bits) a.) Los primeros 8 bits de la trama se complementan
11011010 -> 00100101
c.) Multiplicar por x ^ 8 es equivalente a desplazar por 8 bits (rellenado con ceros)
00100101 -> 00100101 00000000 = 18688
d.) Divide por G(x)
y obtén el resto R(x)
18688/7 = 2669 r 5
Actualización: desde entonces tengo una implementación de vhdl de 8 bits utilizando una tabla de búsqueda de 256 entradas que funciona. O al menos da los mismos resultados que la calculadora en línea.