Amigos que utilidad tiene el sacar esos calculos de checksum.
Comprobar si existe algun cambio en un dato. Ejemplo tengo 3 datos:
0x59
0x10
0x22
Si los sumo me da:
Suma =
0x8BPuedo quedarme con este valor o usar el complemento a 2, que seria:
Complemento a 2 de la suma =
0x75Guardo cualquiera de esos valores lo cual conforma mi cuarto dato o checksum. Para confirmar que esta todo bien procedo de la siguiente forma:
En caso de usar solo la suma:Sumo los 3 bytes y reviso si me da igual a 0x8B. ¿No es igual? Entonces algun byte cambio cuando no lo deberia hacer.
CORRECTO: 0x59 + 0x10 + 0x22 = 0x8B
INCORRECTO (Cambia el segundo) : 0x59 + 0x20 + 0x22 = 0x9B distinto de nuestro checksum que es 0x8B, lo cual sabemos que hay un error.
En caso de usar el complemento a 2 de la suma:Sumo los 3 bytes + el checksum, si es 0 esta todo bien, si es otro numero hay algun error.
CORRECTO: 0x59 + 0x10 + 0x22 + 0x75 = 0x00
INCORRECTO: 0x59 + 0x20 + 0x22 + 0x75 = 0x10 Nuevamente el error en el segundo byte igual que en el caso anterior
ResumenComo ves la funcionalidad es la misma, un CHECKSUM como su nombre lo indica es una SUMA de COMPROBACIÓN para saber que es correcto lo enviado o almacenado o si sufrio una alteracion imprevista.
Una cosa a notar es que el CHECKSUM te permite discriminar si existio algun error, cambio de bits o no, pero no determinar donde ocurrio el error, por lo cual cuando se trata de un envio de datos que se envia con su checksum, si no coinciden entonces tendras que retransmitir todos los datos de nuevo. O en el caso de una EEPROM, si cambio un dato sea la causa que sea, el CHECKSUM te va a indicar que todo es invalido. Siempre consideramos que ante un cambio hecho por el programa del microcontrolado este va a actualizar correctamente el CHECKSUM, por lo cual siempre se considera en caso de que exista algun cambio de forma externa.