Помогите понять расчет CRC.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Помогите понять расчет CRC.

Сообщение Alexeus »

Принимаю пакет данных с устройства через SPI протокол. Пакет из шести байт, причем пять -это данные, а шестой похоже контрольная сумма. Принимаю, использую пять байт как мне нужно, но не могу проверить пакет на целостность- неизвестно как расчитывается эта контрольная сумма. А иногда бывают сбои- в этот момент проверка КС как раз не помешала бы...

Пакет данных типа:

Код: Выделить всё

 1  2  3  4  5  6   ;байт
29 10 12 4D 00 E8  ;E8- CRC
29 10 12 45 28 C8  ;C8- CRC
Помогите пожалуйста определить, как мне программно высчитать такой же CRC и сравнить его с 6м байтом для определения целостности пакета.
Реклама
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: Помогите понять расчет CRC.

Сообщение Vov123 »

CRC,они ведь разные бывают.http://www.lammertbies.nl/comm/info/crc ... ation.html
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Помогите понять расчет CRC.

Сообщение a_skr »

маловато примеров и очень похожие, но:
29 + 10 + 12 + 4D + 00 + E8 = 180
29 + 10 + 12 + 45 + 28 + C8 = 180
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Помогите понять расчет CRC.

Сообщение coredumped »

Подбирать можно очень долго. Вы скажите, что за устройство, может протокол известен и соответственно алгоритм тоже.
По крайней мере не Intel-овский 2's complement.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Помогите понять расчет CRC.

Сообщение Psych »

Очень похоже вот на этот вариант:

Делается XOR между 5 байтами, далее результат XOR 8E получаем 6 байт. Подходит для обоих случаев. То есть 1 байт^2 байт^3 байт^4 байт^5 байт^8E получим crc
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Помогите понять расчет CRC.

Сообщение urry »

Да, дополнение, потому что обычный поиск полинома ничего не дает - начинал с 0 и фф, результат - чистый и как дополнение до 0 - ничего не находится.

Код: Выделить всё


unsigned char CprofilesDlg::calc_crc (char cPolinom)
{
	unsigned char i,data,crc,fb,st_byt,cRazmer;
	cRazmer=5;//sizeof(cArr);
	st_byt=0;
	crc=0x0;
	cArr[0]=0x29;
	cArr[1]=0x10;
	cArr[2]=0x12;
	cArr[3]=0x4D;
	cArr[4]=0x00;
	do{
		data=cArr[st_byt];
		for (i=0;i<8;i++)// счетчик битов в байте
		{
			fb =crc  ^ data;
			fb&=1;
			crc >>= 1;     
			data >>= 1;
			if (fb == 1)crc^=cPolinom;// полином
		}
		st_byt++;
	}while  (st_byt != cRazmer);// счетчик байтов в массиве
	return crc;
}
//----------------------------------------------------------------------
void CprofilesDlg::FindPolinom(void)
{
	char cEtalon=0xE8;
	for(unsigned char i=0;i<0xFF;i++)
	{
		if(calc_crc (i) == cEtalon)
		{
			TRACE("polinom = %d\n",i);
		}
	}
TRACE("ok\n");
}
Реклама
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Re: Помогите понять расчет CRC.

Сообщение Alexeus »

a_skr, в большинстве случаев действительно 0х80 получается, но есть вариант где не получается.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Помогите понять расчет CRC.

Сообщение a_skr »

Alexeus писал(а):a_skr, в большинстве случаев действительно 0х80 получается, но есть вариант где не получается.
примеры в студию
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Помогите понять расчет CRC.

Сообщение GRAF »

Пакет делится на образующий полином CRC, остаток записывается в виде контрольной суммы.
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Re: Помогите понять расчет CRC.

Сообщение Alexeus »

вот куча пакетов, если все складывать, то получается или 80 или 0 (всё в HEX)

Код: Выделить всё

29	10	12	4d	0	e8		80
29	10	12	45	28	c8		80
29	10	12	45	0	f0		80
29	10	12	3d	28	d0		80
29	10	12	3d	0	f8		80
29	10	12	35	28	d8		80
29	10	12	35	0	80		0
29	10	12	2d	28	e0		80
29	10	12	2d	0	88		0
29	10	12	25	28	e8		80
29	10	12	25	0	90		0
29	10	12	1d	28	f0		80
29	10	12	1d	0	98		0
29	10	12	15	28	f8		80
29	10	12	15	0	a0		0
29	10	12	0d	28	80		0
29	10	12	0d	0	a8		0
29	10	12	5	28	88		0
29	10	12	5	0	b0		0
29	10	0a	4d	28	c8		80
29	10	0a	4d	0	f0		80
29	10	0a	45	28	d0		80
29	10	0a	45	0	f8		80
29	10	0a	3d	28	d8		80
29	10	0a	3d	0	80		0
29	10	0a	35	28	e0		80
29	10	0a	35	0	88		0
29	10	0a	2d	28	e8		80
29	10	0a	2d	0	90		0
----------------------------------------------
29	10	12	4d	0	e8		80
39	10	12	4d	0	d8		80
49	10	12	4d	0	c8		80
69	10	12	4d	0	a8		80
----------------------------------------------
29	10	12	4d	4	e4		80
29	50	12	4d	5	a3		80
29	50	12	4d	1	a7		80
29	70	12	4d	2	86		80
28	74	12	4d	0	85		80
29	74	12	4d	0	84		80
2a	74	12	4d	0	83		80
2b	74	12	4d	0	82		80
2c	74	12	4d	0	81		80
2d	74	12	4d	0	80		80
2e	74	12	4d	0	ff		0
----------------------------------------------

Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Помогите понять расчет CRC.

Сообщение GRAF »

В АВР-овском апноте AVR236 подробно расписано, как контрольная сумма для CRC считается.
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Re: Помогите понять расчет CRC.

Сообщение Alexeus »

Спасибо, посмотрю.

Эти пакеты с NEC`овского микроконтроллера.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»