Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.09.2011, 22:09
|
|
Частый гость
Регистрация: 08.03.2009
Сообщений: 28
Сказал спасибо: 96
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Замок на iButton DS1990
как всегда скопипастил
Код:
|
char crc8 ( char *data_in, int number_of_bytes_to_read )
{
char crc;
int loop_count;
char bit_counter, data, feedback_bit;
crc = CRC8INIT;
for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
{
data = data_in[loop_count];
bit_counter = 8;
do {
feedback_bit = (crc ^ data) & 0x01;
if ( feedback_bit == 0x01 ) {
crc = crc ^ CRC8POLY;
}
crc = (crc ›› 1) & 0x7F;
if ( feedback_bit == 0x01 ) {
crc = crc | 0x80;
}
data = data ›› 1;
bit_counter--;
} while (bit_counter › 0);
}
return crc;
} |
так сойдет ?
|
|
|
Сказали "Спасибо" GremLine
|
|
|
25.09.2011, 22:15
|
|
Гражданин KAZUS.RU
Регистрация: 22.04.2007
Адрес: Минск
Сообщений: 565
Сказал спасибо: 53
Сказали Спасибо 104 раз(а) в 81 сообщении(ях)
|
Re: Замок на iButton DS1990
Сообщение от Easyrider83
|
Да знаю я этот полином. Я его понять не могу. Что такое х8? Формулу можно? Или готовую процедуру, что проще на мой взгляд.
|
На Ассемблере подойдёт?
|
|
|
|
25.09.2011, 22:15
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Замок на iButton DS1990
Сообщение от GremLine
|
так сойдет ?
|
Что-то громоздко, как-то. На вики есть функция расчета crc8. Только переворачивать байты данных надо и конечный результат.
Код:
|
BYTE ReverseByte(BYTE value)
{
value = ((value & 0xAA) ›› 1) | ((value & 0x55) ‹‹ 1);
value = ((value & 0xCC) ›› 2) | ((value & 0x33) ‹‹ 2);
value = ((value & 0xF0) ›› 4) | ((value & 0x0F) ‹‹ 4);
return value;
}
BYTE Crc8Dallas(BYTE len, BYTE *pData)
{
BYTE crc = 0;
BYTE i;
while (len--)
{
crc ^= ReverseByte(*pData++);
for (i = 0; i ‹ 8; i++)
crc = crc & 0x80 ? (crc ‹‹ 1) ^ 0x31 : crc ‹‹ 1;
}
return ReverseByte(crc);
} |
Последний раз редактировалось realid; 25.09.2011 в 22:36.
|
|
|
|
25.09.2011, 22:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Замок на iButton DS1990
а что тут непонятного, полином СRС poly = x8 + x5 + x4 + 1=0x31=110001, т.е. на каждом шаге цикла полином и наше число будет подвергаться XOR, при условии, что старший бит числа не равен нулю, далее сдвигаться, вставляется новый бит и так до конца. В даташите есть блок схема алгоритма, там и надо смотреть.
|
|
|
|
25.09.2011, 22:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Замок на iButton DS1990
Вот код из википедии:
Цитата:
|
unsigned char Crc8(unsigned char *pcBlock, unsigned int len)
{
unsigned char crc = 0xFF;
unsigned int i;
while (len--)
{
crc ^= *pcBlock++;
for (i = 0; i ‹ 8; i++)
crc = crc & 0x80 ? (crc ‹‹ 1) ^ 0x31 : crc ‹‹ 1;
}
return crc;
}
|
|
|
|
|
25.09.2011, 22:28
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Замок на iButton DS1990
Сообщение от nonamedov
|
Вот код из википедии:
|
Для далласа без изменения он не пойдет. Это просто CRC8. Надо переворачивать входные байты данных и конечный результат. См. выше. Или перевернуть полином и поменять направление сдвига:
Код:
|
BYTE Crc8Dallas(BYTE len, BYTE *pData)
{
BYTE crc = 0;
BYTE i;
BYTE temp;
while (len--)
{
crc ^= *pData++;
for (i = 0; i ‹ 8; i++)
crc = crc & 0x01 ? (crc ›› 1) ^ 0x8C : crc ›› 1;
}
return crc;
} |
Последний раз редактировалось realid; 25.09.2011 в 22:42.
Причина: извините
|
|
|
|
25.09.2011, 22:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Замок на iButton DS1990
А почему у Вас реверсирование не сделано в самом цикле?
|
|
|
|
25.09.2011, 22:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Замок на iButton DS1990
realid, а нельзя ли соблюдать хоть какую-то хронологию? Зачем экономить на постах, читать ведь не удобно.
|
|
|
|
25.09.2011, 22:49
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Замок на iButton DS1990
Сообщение от nonamedov
|
realid, а нельзя ли соблюдать хоть какую-то хронологию? Зачем экономить на постах, читать ведь не удобно.
|
Прошу прощения
|
|
|
|
25.09.2011, 22:57
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Замок на iButton DS1990
Сообщение от nonamedov
|
А почему у Вас реверсирование не сделано в самом цикле?
|
Согласитесь что 0x31 нагляднее чем 0x8C, хотя это просто перевернутый 0x31
Просто на вики двигают старшим битом вперед, а для далласа надо младшим.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:24.
|
|