РАСЧЕТ КОНТРОЛЬНОЙ СУММЫ
В режиме 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;
}