Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

CRC8 OF DALLAS

Вс ноя 18, 2012 10:18:30

Доброго ремени суток!
никогда ранее не работал с контрольными суммами.а тут вот пришлось.порылся в инете.сидел долго,научился считать на бумажке 8битный срс со сдвигом вправо)))) имею опыт работы с микролан,но ранее считать КС не было необходимости.решил проверить полученные данные на практике.нашел спецификацию ibutton,где указан конкретный пример расчета FC+ID.но разобраться КАК они там что считают,не могу.короче,возникают следующие вопросы:
1.почему указанный полином в даташите и спецификации 100000111.а во всех примерах используется 0х8С(10001100)?
2.если данные передаются LSBпервым,то каким образом осущетвляется расчет CRC8 DALLAS??? пример из документа что-то как-то не лезет ни под одно правило,которое я нашел.

если есть у Вас опыт расчета CRC8 DALLAS,подскажите,плиз,как это делается правильно????.не примеры си или асма,а как говорится на пальцах)))мне хочется понять логику,а код я и сам в состоянии написать,понимая суть процесса.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 11:13:17

Не совсем прямой ответ, но все же... Я в своих проектах сторонник табличного вычисления CRC, если памяти ROM хватает, зато вычисление быстрое. Только использую CRC16 , CRC8 -- отстой, IMHO, не слишком надежен.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 11:13:33

Fnnfго что вы наплодите сто тем - лучше не будет. Если на ваш позавчирашний пост не ответили, подумайте, может вы написали не достаточно внятно или вообще муйню? С другой стороны можете взять мобильник и попросить танка загрузить вам знания. Из этой реальности вам загрузить знания не удастся.

anton234ff писал(а):1.почему указанный полином в даташите и спецификации 100000111.
А где вы в спецификации нашли такие цифры???????????
anton234ff писал(а):а во всех примерах используется 0х8С(10001100)?
Вообще-то не 8с. а X^8_X^5+X^4+X^0.

Схема приведённая в даташите реально отражает процесс вычисления CRC.
Вот например на VHDL вполне работоспособный код - у меня в термометре работает. datain - бит из потока данных идущий с ds18x20 именно в порядке с младшего бита.
Код:
crc <= (crc(0) xor datain) & crc (7 downto 5) & (crc(4) xor crc(0) xor datain) & (crc(3) xor crc(0) xor datain) & crc(2 downto 1);


Что вам еще не понятно?

Вот когда-то сделал екселевскую табличку для расчета CRC - заполнять зеленые поля.
https://docs.google.com/spreadsheet/ccc ... jlSN09UYlE
(Убедительная просьба не портить формулы, а лучше сделайте себе копию и с ней играйтесь)

Мммммммм. может еще можно поиском попользоваться...

А, кажется понял. Вы, наверное не в курсе, что существуют разные полиномы для расчета CRC!
Последний раз редактировалось uldemir Вс ноя 18, 2012 21:24:35, всего редактировалось 1 раз.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 11:42:22

ваш сарказм,дорогой товарищ,мягко говоря,неуместен.есть сферы,в которых и я могу поумничать.
x^8+x^5+x^4+1 это 100110001.открываем апп27 на странице номер 5 и видим 10001100.КАКОГО СПРАШИВАЕТСЯ??????далее открываем блокнот,скаченный где-то во всемирной помойке и видим то же самое 0х8с.
Вложения
crc.txt
(1.51 KiB) Скачиваний: 665
app27.pdf
(67.03 KiB) Скачиваний: 956

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 11:57:57

вы не ответили на первый вопрос:
anton234ff писал(а):1.почему указанный полином в даташите и спецификации 100000111
Покажите подробно где вы его увидели.
Откуда берется 8Ch (он же 18h) я знаю. Но! это "примеры си или асма" которого вы просили избегать. Потому я его и избегаю.
Так что сначала покажите строчку указанную в первом вопросе. А то пока не понятно, в чем проблема-то.

p.s. впрочем, как говорил раньше, сделать так чтобы вы поняли логику я не могу. Могу только порекомендовать самостоятельно почитать умную книжку: http://rsdn.ru/article/files/classes/Se ... cguide.pdf

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 12:12:35

по поводу указанного числа-наверное уже по запарке его вбил,хотя имел в виду то,что указал сегодня чуть ранее.
по поводу си и асма-я имел ввиду не ссылки типа "вот мой код написанный сто лет назад,гарантированно работает,ставь и не парься".мне нужно ПОНЯТЬ,а написать на си,да и на асме кстати тоже смогу сам.
так почему же все таки 0х8с?можно узнать?и как это число получается из указанного полинома в даташите?

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 12:34:59

эту книжку я читал.как вообще считается контрольная сумма я вкурил.если указанная степень полинома равна 8,количество дополняющих нулей соответственно 8,и срс 8 бит.но 0х8с это никак не восьмая степень.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 12:38:41

18 - это маска по которой надо инвертировать биты, вроде, после сдвига. 8С - до сдвига, но так как старший бит уходит... то, похоже оптимальнее 18.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 12:47:48

направление сдвига.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 12:59:58

А ну да, в википедии он назван как реверсивный.

01234567 8
10001100 1 = 31

8 76543210
1 00110001 = 8C

откуда 18?

А 18 это 8С до сдвига вправо.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 13:16:28

так,давайте подведем промежуточный итог.по алгоритму CRC-8 DALLAS контрольная сумма будет вычисляться все таки таким образом???

0000111100000000 | 100110001
000000000
----------
111100000
100110001
----------
011010001
000000000
----------
110100010
100110001
----------
100100110
100110001
----------
000101110

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 13:36:39

вы бы отступы сделали. а то не вижу логики.

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 13:56:30

да,я их делал.при отправке сообщения что-то с форматированием произошло)))
0000111100000000 | 100110001
000000000
----------
-----111100000
-----100110001
----------
----- 011010001
------000000000
----------
-------110100010
-------100110001
----------
--------100100110
--------100110001
----------
--------000101110


по моим представлениям примерно так

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 14:13:29

вот проверенный код:
Код:
// CRC8 Dallas (021cb801000000a2=0x00)
#define CRC8_DS_INIT 0x00
U8 crc8_ds_upd(U8 data, U8 crc_prev) {
    data ^= crc_prev;
    crc_prev = 0;
    if(data & 0x01) crc_prev = 0x5e;
    if(data & 0x02) crc_prev ^= 0xbc;
    if(data & 0x04) crc_prev ^= 0x61;
    if(data & 0x08) crc_prev ^= 0xc2;
    if(data & 0x10) crc_prev ^= 0x9d;
    if(data & 0x20) crc_prev ^= 0x23;
    if(data & 0x40) crc_prev ^= 0x46;
    if(data & 0x80) crc_prev ^= 0x8c;
    return crc_prev;
}

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 14:35:13

У меня получилось так-же.
Код:
0000111100000000 | 100110001
000000000.......
----------
----111100000...
----100110001
----------
-----110100010..
-----100110001
----------
------100100110.
------100110001
----------
-------000101110
-------000000000
----------
--------00101110

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 14:52:26

anton234ff писал(а):если есть у Вас опыт расчета CRC8 DALLAS,подскажите,плиз, как говорится на пальцах)))мне хочется понять логику процесса.
Вот тут в свое время GUDD-HEAD на пальцах объяснял мне..... И я все понял..... Потом написал свои процедуры и на асме и на С.....

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 14:57:18

угу.есть калькулятор для расчета срс SCB-CALC.в поле результата третья ячейка выдает значение в формате СРС8.сколько ни бился с ручным расчетом,ни разу мои результаты не совпали с ответом данного калькулятора.даже в нашем случае на 00001111 ответ выдает 11101011. (((((((

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 15:29:42

не знаю. с моим калькулятором сходится. для 00001111 CRC 74 (00101110)
вот попробовал для 01010101 посчитать получилось D1 (10001011)

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 15:33:12

а как он называется?хочу найти и скачать

Re: CRC8 OF DALLAS

Вс ноя 18, 2012 16:04:27

в моём первом сообщении этой темы после слов: "Вот когда-то сделал екселевскую табличку для расчета CRC - заполнять зеленые поля." Ексель не нужен - оно работает под гугловским спредшитом. Ну и конечно считает только далласовский полином. Сделал когда сам разбирался с этими CRC.
Ответить