Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

DS2411 не совпадает CRC

Непрочитано 17.06.2024, 11:26  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию DS2411 не совпадает CRC

Здравствуйте.
Есть 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:E7C:1E:00:00:01 но мое значение суммы равно 0x3e

Подскажите чего не так? Может функция проверки не правильная или порядок байт?
Спасибо.
Реклама:
worldmasters вне форума  
Непрочитано 17.06.2024, 12:17  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,394
Сказал спасибо: 85
Сказали Спасибо 672 раз(а) в 392 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: DS2411 не совпадает CRC

А так:

Код:
unsigned crc8maximdow(unsigned char *data, size_t len) {
    unsigned crc = 0;
    for (size_t i = 0; i ‹ len; i++) {
        crc ^= data[i];
        for (unsigned k = 0; k ‹ 8; k++)
            crc = crc & 1 ? (crc ›› 1) ^ 0x8c : crc ›› 1;
    }
    return crc;
}
pambaru вне форума  
Эти 2 пользователя(ей) сказали Спасибо pambaru за это сообщение:
worldmasters (17.06.2024), индюк (17.06.2024)
Непрочитано 17.06.2024, 12:19  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,394
Сказал спасибо: 85
Сказали Спасибо 672 раз(а) в 392 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: DS2411 не совпадает CRC

P.S. Не углублялся, но мне кажется X^8 забыт в вашей версии полинома.
pambaru вне форума  
Непрочитано 17.06.2024, 13:03  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: DS2411 не совпадает CRC

Спасибо. Заработало )
worldmasters вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой копировщик домофонных ключей RECTO Микроконтроллеры, АЦП, память и т.д 7973 04.09.2016 02:46
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
SPI с аппаратным CRC ilya_sh STM8 6 11.06.2015 13:06
Функция для расчета CRC maxNTF Микроконтроллеры, АЦП, память и т.д 3 30.12.2009 10:16
DS1990 и crc sergio-nsk Микроконтроллеры, АЦП, память и т.д 13 12.02.2009 11:09


Часовой пояс GMT +4, время: 01:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.