РАСЧЕТ КОНТРОЛЬНОЙ СУММЫ

 
В режиме Modbus-RTU  для проверки на наличие ошибок используется циклический избыточный код CRC. Код CRC – это 16 бит данных, которые генерируются для последовательности произвольной длины состоящей из 8-битных элементов данных.
 
Порождающий полином CRC-16 (X16  + X15  + X2  + 1).
Пример реализации алгоритма расчета контрольной суммы CRC–16 на языке ANSI C .
 
//;================================================================
//  Name  : CRC-16
//  Poly  : 0xA001 
//  Init  : 0xFFFF
//  Revert: false
//  XorOut: 0x0000
//;================================================================
uint16_t Crc16_0xA001(uint8_t *src, uint8_t len)
    uint16_t crc = 0xFFFF;
    uint8_t i;       
    while (len--)
    {
        crc ^= *src++;
        for (i = 0; i < 8; i++)
        crc = crc & 0x0001 ? (crc >> 1) ^ 0xA001 : crc >> 1;           
    }
    return crc;
}