Primero que si vas a aplicar un checksum o un CRC es por que lo vas a hacer en un stream de datos, es decir varios datos. Si vas a hacerlo unicamente por 1 dato no vale la pena computacionalmente. Y tal ves conviene mas una deteccion de paridad para detectar errores o de ultima algun codigo detector/corrector de errores ( Hamming )
Lo mas facil como te decia es un checksum ( suma de comprobacion ). Si lo que envias esta dividido en datos de 8 bits que seria lo mas comun, por ejemplo cada 5 datos podrias enviar lo que es el checksum.
Este es muy facil de realizar.
Supongamos que tenes 5 datos: 0x12 , 0x59 , 0xA5, 0x8B , 0xFF y tenes que generar el checksum para enviarlo. Lo que haces es sumar todo y luego recortarlo a 8 bits. O directamente sumar en variables de 8 bits, total solo se va a recortar
0x12 + 0x59 + 0xA5 + 0x8B + 0xFF = 0x29A
Recortado de 8 bits es 0x9A, entonces envias ese Checksum cada 5 bytes. Sumas los 5 y
comparas con el checksum, si hay algun error significa que no son iguales. En este caso implica comparacion.
Otro metodo que podes encontrar es enviar el complemento a 2 de la suma que te dio de los 5 bytes y enviar eso, es decir 0xFF - 0x9A + 1 = 0x66
De esa forma al sumar todo, los 5 bytes + ese ultimo checksum 0x29A + 0x66 = 0x300 , recortado a 8 bits es 0x00.
Es decir que en este ultimo caso que se envia el complemento para que no posea errores la suma de los 6 bytes ( 5 de informacion + 1 suma de comprobacion) te debe dar 0
---------------------------------------------
Tal ves estamos confundiendo division. Ya que la mayoria de los codigos CRC que vi estan realizados con XOR
VP_CRCTableValue = (VP_CRCTableValue << 8) ^ F_CRC_ObtenValorDeTabla(((uint8_t)((VP_CRCTableValue >> (WIDTH - 8)) & 0xFF)) ^ AF_Datos[VP_bytes]);
Tal ves esto te sirva:
http://ww1.microchip.com/downloads/en/AppNotes/01148a.pdfhttp://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00068118.pdf