Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.04.2015, 16:58
|
|
Гражданин KAZUS.RU
Регистрация: 11.07.2010
Адрес: Не Северный Кавказ, а Юг Сибири
Сообщений: 576
Сказал спасибо: 355
Сказали Спасибо 516 раз(а) в 241 сообщении(ях)
|
CRC8 dx1990
Всем привет.
Ребята, какой алгоритм CRC8 ?
Программка по CRC работает также как и вот этот онлайн калькулятор.
http://ghsi.de/CRC/index.php?Polynom...00+7f+b5+5c+01
Никак не могу получить правильный crc. С программированием проблемы нет. Есть ключ ( с 8-ого байта CRC) : С1 00 00 00 7F B5 5C 01
У меня программа работает как онлайн калькулятор: двигаем весь полином по одному биту влево пока самый старший не будет 1, если 1, то и его двигаем влево, затем XOR 0х31. Получается 0х23, а должен С1.
По разному в калькуляторе комбинировал ключ, С1 не получается. Ткните носом, пожалуйста - в трех соснах заблудился.
Вот одна из версий на си ( работает как онлайн калькулятор):
unsigned char r[]= {0x0,0x00,0x00,0x00,0x7f,0xb5,0x5c,0x01};
unsigned char polinom=0x31;
void sdvig() {
int i,buf;
i=1;
r[0]‹‹=1;
while(i‹ {
buf=r[i];
buf&=0x80;
if(buf){r[i-1]|=0x01;}
r[i]‹‹=1;
i++;
}
}
void crc(){
int ii,buf;
ii=0;
while(ii‹63){
buf=r[0];
buf&=0x80;
if(buf){
sdvig();
r[0]^=polinom;
ii++;
printf(".%x.",r[0]);
}
if(!buf){
sdvig();
ii++;
}
printf("\n%x;",r[0]);
}
}
|
|
|
|
26.04.2015, 17:07
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: CRC8 dx1990
Код:
|
unsigned char Crc8Dallas(unsigned char len, unsigned char *pData)
{
unsigned char crc = 0;
unsigned char i;
while (len--)
{
crc ^= *pData++;
for (i = 0; i ‹ 8; i++)
crc = crc & 0x01 ? (crc ›› 1) ^ 0x8C : crc ›› 1;
}
return crc;
} |
|
|
|
|
26.04.2015, 18:54
|
|
Гражданин KAZUS.RU
Регистрация: 11.07.2010
Адрес: Не Северный Кавказ, а Юг Сибири
Сообщений: 576
Сказал спасибо: 355
Сказали Спасибо 516 раз(а) в 241 сообщении(ях)
|
Re: CRC8 dx1990
Сообщение от Easyrider83
|
Код:
|
unsigned char Crc8Dallas(unsigned char len, unsigned char *pData)
{
unsigned char crc = 0;
unsigned char i;
while (len--)
{
crc ^= *pData++;
for (i = 0; i ‹ 8; i++)
crc = crc & 0x01 ? (crc ›› 1) ^ 0x8C : crc ›› 1;
}
return crc;
} |
|
Не могу понять как выстроить байты для пересчета - в какой последовательности их обрабатывать?
|
|
|
|
26.04.2015, 19:03
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: CRC8 dx1990
В последовательной последовательности.
|
|
|
|
26.04.2015, 20:07
|
|
Гражданин KAZUS.RU
Регистрация: 11.07.2010
Адрес: Не Северный Кавказ, а Юг Сибири
Сообщений: 576
Сказал спасибо: 355
Сказали Спасибо 516 раз(а) в 241 сообщении(ях)
|
Re: CRC8 dx1990
Сообщение от Easyrider83
|
В последовательной последовательности.
|
Так пробую по разному: и самым младшим 0х01 вперед, и 0х00, и переворачиваю байты. Не получается.
|
|
|
|
26.04.2015, 20:22
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: CRC8 dx1990
Вы сейчас про какую последовательность? Вашу или мою?
Мою очень легко проверить. Если скормить функции, скажем, 7 случайных байт, получить CRC8, и скормить ей те же 7 байт вместе с CRC, то должен получится ноль.
|
|
|
|
26.04.2015, 20:41
|
|
Гражданин KAZUS.RU
Регистрация: 11.07.2010
Адрес: Не Северный Кавказ, а Юг Сибири
Сообщений: 576
Сказал спасибо: 355
Сказали Спасибо 516 раз(а) в 241 сообщении(ях)
|
Re: CRC8 dx1990
Сообщение от Easyrider83
|
Если скормить функции, скажем, 7 случайных байт, получить CRC8, и скормить ей те же 7 байт вместе с CRC, то должен получится ноль.
|
Да, так и есть. Работает хреновина.
|
|
|
|
29.04.2015, 16:50
|
|
Гражданин KAZUS.RU
Регистрация: 11.07.2010
Адрес: Не Северный Кавказ, а Юг Сибири
Сообщений: 576
Сказал спасибо: 355
Сказали Спасибо 516 раз(а) в 241 сообщении(ях)
|
Re: CRC8 dx1990
Easyrider83, спасибо за пинок в правильном направлении.
|
|
|
|
29.04.2015, 19:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: CRC8 dx1990
Сообщение от nexsys
|
Easyrider83, спасибо за пинок в правильном направлении.
|
Пинок ??!
|
|
|
|
29.04.2015, 20:00
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: CRC8 dx1990
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
CRC16 CRC8
|
Tcom |
Микроконтроллеры, АЦП, память и т.д |
4 |
22.09.2007 15:55 |
Часовой пояс GMT +4, время: 07:19.
|
|