Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы... |
07.03.2007, 19:42
|
#1
|
Частый гость
Регистрация: 18.12.2006
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите найт алгоритм вычисления CRC для iButton...
Коллеги, ищу алгоритм расчета CRC для контроля правильности считывания кода iButton.
Хотелось бы найти человеческое описание алгоритма вычисления кода, а не его реализицию на языках программирования.
Может быть поможете?
С уважением,
Игорь
ps
На сайте Л. Ридико есть реализация на ассемблере - не совсем то, что нужно.
|
|
|
|
15.03.2007, 22:54
|
#2
|
Прописка
Регистрация: 01.11.2006
Сообщений: 199
Сказал спасибо: 0
Сказали Спасибо 15 раз(а) в 13 сообщении(ях)
|
Re: Помогите найт алгоритм вычисления CRC для iButton...
Может это Вам подойдет
Прикрепленный файл: 521316.rar
|
|
|
|
15.03.2007, 23:28
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 07.03.2005
Сообщений: 1,056
Сказал спасибо: 1
Сказали Спасибо 250 раз(а) в 174 сообщении(ях)
|
Сходите на сайт ЭлИн, они там не так давно форум открыли по 1-Wire, может быть что-то посоветуют.
http://www.elin.ru/1-Wire/discution.htm
|
|
|
|
29.03.2007, 15:12
|
#4
|
Временная регистрация
Регистрация: 17.05.2006
Сообщений: 72
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Человеческого описания для CRC алгоритма нет. Есть пространные рассуждения о делении полиномов и попытки объяснить, как реализовать подсчёт CRC "на лету", по мере получения информации. Все реализации этого алгоритма на различных языках обычно приводяться для конкретного полинома и оптимизированы под конкретную задачу. Поэтому надо брать алгоритм, приведённый в документации на устройство (например, iButton) и переносить его на свою платформу. Как я собственно и сделал.
Код:
|
/*
Функция подсчёта CRC для полинома {10011001} (протокол iButton)
*/
unsigned char CRC_calc(unsigned char *data)
{
unsigned char CRC, A, C, ACC, byte, bit, zero;
CRC=0;
zero=0;
for (byte=0; byte ‹ (NUM_iB_DATA-1); byte++)
{
zero|=data[byte];
A=data[byte];
ACC=A;
for (bit=0; bit ‹ 8; bit++)
{
A^=CRC; // XRL A,CRC
if (C==0) { if ((A&0x01) == 0) C=0; else C=1; // RRC A
A››=1;
}
else { if ((A&0x01) == 0) C=0; else C=1;
A››=1; A|=0x80;
}
A=CRC; // MOV A,CRC
if (C != 0) // JNC ZERO
A^=0x18; // XRL A,#18H
if (C==0) { if ((A&0x01) == 0) C=0; else C=1; // ZERO: RRC A
A››=1;
}
else { if ((A&0x01) == 0) C=0; else C=1;
A››=1; A|=0x80;
}
CRC=A; // MOV CRC,A
ACC››=1; // RR ACC
A=ACC;
}
}
if (CRC == data[NUM_iB_DATA-1] && zero != 0)
return TRUE;
else
return FALSE;
} |
__________________
"Имею честь иметь Вашу честь в своём доме..."
|
|
|
|
06.08.2007, 23:40
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Что же так сложно ?
Код:
|
unsigned char calc_crc (unsigned char *mas)
{
unsigned char i,data,crc,fb,st_byt;
st_byt=0;
crc=0;
do{
data=mas[st_byt];
for (i=0;i‹8;i++)// счетчик битов в байте
{
fb =crc ^ data;
fb&=1;
crc ››= 1;
data ›› =1;
if (fb == 1)crc^=0x8c;// полином, мля
}
st_byt++;
}while (st_byt != 8);// счетчик байтов в массиве
return crc;
} |
|
|
|
|
17.09.2007, 12:38
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,495
Сказал спасибо: 695
Сказали Спасибо 4,305 раз(а) в 1,970 сообщении(ях)
|
|
|
|
|
05.10.2007, 16:06
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Не все же с васиком работают.. я бы даже сказал - немногие.. Без обид... Я просто постарался написать код, который прошел бы и для пиков, и для авр (иар и хайтек - проверено). Ну извините, если что-то не то...
|
|
|
|
17.11.2007, 06:00
|
#8
|
Временная регистрация
Регистрация: 10.05.2005
Сообщений: 77
Сказал спасибо: 12
Сказали Спасибо 1 раз в 1 сообщении
|
На сайте производителя iButton в одном из даташитов или аппнотов есть этот алгоритм и сишная реализация.
(В каком не вспомню даже под пыткой)
|
|
|
|
05.04.2008, 17:58
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от urry
|
Что же так сложно ?
Код:
|
unsigned char calc_crc (unsigned char *mas)
{
unsigned char i,data,crc,fb,st_byt;
st_byt=0;
crc=0;
do{
data=mas[st_byt];
for (i=0;i‹8;i++)// счетчик битов в байте
{
fb =crc ^ data;
fb&=1;
crc ››= 1;
data ›› =1;
if (fb == 1)crc^=0x8c;// полином, мля
}
st_byt++;
}while (st_byt != 8);// счетчик байтов в массиве
return crc;
} |
|
А почему используеш полином 0х8с? в датчике DS18B20 при расчете CRC тож такой же применяется?
И почему начинаеш с mas[0]? ведь это деление по CRC алгоритму.Просто не доходит до меня как работает алгоритм: получается мы сначало отнимаем fb =crc ^ data; ,потом если от этого остатка осталась единица,то добавляем в crc(получается это частное),но ведь потом этим частным опять отнимаем и слаживаем
(я понял что сложение и отнимание разницы нет в полиномной арифметике)
-- Прилагается рисунок: --
|
|
|
|
02.07.2009, 12:38
|
#10
|
Прохожий
Регистрация: 02.07.2009
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Мучаюсь уже неделю, не могу расчитать CRC в ехе. Стандартный алгоритм не подходит, а как расчитать не знаю. Кто поможет взломать алгоритм и расчитать CRC?
ехе. прилагаю...
Прикрепленный файл: 3624127.rar
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
вычисление CRC
|
qaz12345qaz12345 |
Микроконтроллеры, АЦП, память и т.д |
32 |
23.08.2010 23:55 |
DS1990 и crc
|
sergio-nsk |
Микроконтроллеры, АЦП, память и т.д |
13 |
12.02.2009 11:09 |
risc вычисления на PC
|
aaleksander |
Микроконтроллеры, АЦП, память и т.д |
1 |
09.04.2007 18:24 |
Алгоритм билдер для ПИК контроллеров.
|
Gladkih |
Микроконтроллеры, АЦП, память и т.д |
9 |
24.02.2007 18:41 |
Помогите транслировать алгоритм
|
vdlab |
Микроконтроллеры, АЦП, память и т.д |
6 |
22.11.2006 19:12 |
Часовой пояс GMT +4, время: 21:04.
|
|