Здравствуйте.
Есть STM32 и DS2411.
Библиотеку для OneWire нашел в интернете. Вроде бы все стабильно работает. Код читается, но почему то CRC сходится очень редко.
Для проверки использую вот такую функцию:
Код:
|
uint8_t calculateCRC(uint8_t *data, uint8_t len) {
const uint8_t polynomial = 0x31; // Полином: X^8 + X^5 + X^4 + 1
uint8_t crc = 0x00;
for (size_t i = 0; i ‹ len; ++i) {
crc ^= data[i];
for (uint8_t bit = 0; bit ‹ 8; ++bit) {
if (crc & 0x01) {
crc = (crc ›› 1) ^ polynomial;
} else {
crc ››= 1;
}
}
}
return crc;
} |
Вот например считывает такой код:
01:C7:E7
C:1E:00:00:01 но мое значение суммы равно 0x3e
Подскажите чего не так? Может функция проверки не правильная или порядок байт?
Спасибо.