Свежие обсуждения
Консультации

Как рассчиитать СRС для DS18B20?

1 2

Здравствуйте всем.
Вопрос как и на основе каких данных можно рассчитать CRC в МК для сравнения с СRC из датчика? Может кто решал эту задачу на asm для PIC?

При чтении SCRATCHPAD-а датчика DS18B20 он выдает 8-байт данных, последний байт это СRC(циклический избыточный код). В пдфке сказано "CRC = X^8 + X^5 + X^4 + 1" что такое "X"? Если это данные по температуре TH:TL(16bit) то СRC, допустим при 85Сгр. получается "космическое" число явно больше 1 байта.

 

Посмотрите программу для термометра на моём сайте. Там есть подпрограмма для расчёта CRC DS18B20 на асме.
На С ещё проще (gCRCPIC - глобальная переменная, содержащая подсчитанную PIC-ом CRC):


void ds_crc (unsigned char lDATABYTE) // Подсчет CRC (контрольной суммы)
{
unsigned char lCOUNTER;
lCOUNTER = 8;
do {
if ((lDATABYTE^gCRCPIC)&0x01) { gCRCPIC = (gCRCPIC^0x18)>>1; gCRCPIC |= 0x80; }
else gCRCPIC >>= 1;
lDATABYTE >>= 1; }
while (--lCOUNTER);
}

 

picmaniac: ОК, спасибо.

 

Есть два варианта !
1) это использовать полином
2) это использовать таблицу

второй способ быстрее.
если интересно на мыло пишите. Я поищу.

 

Diko: 2) это использовать таблицу
А это как???
Какая же тогда должна быть отведена память под таблицу, Вы в курсе что надо считать 56 бит?
2^56 - не многовато ли?
Даже если информационных битов "всего" 12, всё равно не щедро ли будет для сомнительного выигрыша в скорости?

 

таблица размером 256 байт. (собственно это всё место и занимает).

 

И как показала практика, если почитать документацию то там много чего пишут вот например что :

Application Note 27: Understanding and Using Cyclic Redundancy Checks with Dallas Semiconductor
Touch Memory Product

Вот берёшь этот док и читаешь, там всё написано что да как.

 

прикрипить что-то не удалось, но вот ссылачка на него.
http://pdfserv.maxim-ic.com/en/an/AN27.pdf

 

Diko: но вот ссылачка на него Ну вот все окончательно встало на свои места.
Решение с таблицей вообще супер, надо попробовать, только боюсь реализация таблицы [0...255] байт в PIC16 вызовет проблемы.

 

вообщем-то возможно, этот метод хорош когда есть память и нет желания ломать голову как CRC считать, а когда памяти малова-то, там довольно подробно расписано (с примером на асме) как посчитать другим способом. PicManiac привёл его на С.
Писал я для MSP430F149 там 60кил памяти Поэтому сделал и так и эдак.