CRC в Si7021
- Войдите на сайт для отправки комментариев
Вс, 14/07/2019 - 00:51
Читаю данные из HTU21D(F) Старший байт, Младший байт, СRС. При пересчете CRC выявляется несовпадение суммы.
В прямую считывал с логического анализатора данные, брал из ДШ, ничего совпадает.
К примеру 0x683A, CRC=0x7C, по ДШ. В реальности
Bout[0]=104; Bout[1]=58;Bout[3]=OneWire::crc8(Bout,2);
Serial.print("CRC2 = ");Serial.println(Bout[3], DEC); CRC2 = 236! Должно быть 124! Полином далассовский... Целый день думаю, чего лыжи не едут. Сталкивался кто нибудь с этим?
А почему Bout[3] если длина данных 2 байта?
В Bout[3] записывается CRC предыдущих двух байт.
Пример из интернетов - чтение влажности, температуры и расчет CRC8 для датчика si7021
Спасибо! Как раз такой скетч искал! Сейчас посмотрим, что там в третьем байте пересылается.
Проверил - суммы совпадают, значит, ошибка в моей программе на АСМе. Спасибо!
В Bout[3] записывается CRC предыдущих двух байт.
третий байт массива - это Bout[2], а не Bout[3]
Ага! Рассеянность... Сути несовпадения сумм это не меняет. Запустил прогу - CRC высчитанное и полученное не совпадают. Совпало только в одном месте, именно в него и уткнулся на радостях. CRC считал другой библиотекой.
команда 0xE0 считывает температуру, при которой производилось последнее измерение влажности
Понятно.
Железо -ОК! Может CRC считается как то по другому? Примеры из ДШ тоже не совпадают.
Где читать об остальных командах, не представленных в ДШ?
Все таки косяк в проге на АСМ.
На вход подаётся массив, выловленный из Wire (3 байта) Возвращаемый результат равен нулю при корректном CRC.
Спасибо! Я тоже исследовал, где накосячил. Пишу на АСМе, поэтому Си, немного не в тему, но подход - тот же! необходимо суммировать все ТРИ байта. Буду переделывать. Проверял вручную 100110001 и XOR. На определенных шагах вычислений получался 0.