реклама на сайте
подробности

 
 
> Алгоритм CRC16
athlon64
сообщение Apr 10 2010, 07:39
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Устройство на sam7x должно обмениваться по uart пакетами длинной 76 байт + 2 байта CRC16 с программой на компьютере.
Исходника программы компа нет, но есть исходник (в icc) предыдущей версии рабочего устройства (правильно рассчитываеющего CRC и успешно обменивающегося с программой), из которого был взят фрагмент рассчёта CRC. По какой то причине CRC рассчитывается неверно.

Фрагмент для IAR:
Код
// пакет лежит в uart1_buffer
// len - длина пакета, по которому считается CRC (76 байт)
void CRC16(unsigned int len)
{   unsigned char i;
    unsigned int k;
    unsigned int CRC;

    CRC=k=0;
    while(k<len){
        CRC=CRC^((unsigned int)uart1_buffer[k++]<<8);
        i=8;
        do{
            if(CRC & 0x8000) CRC=(CRC<<1)^0x1021;
            else CRC=CRC<<1;
        } while(--i);
    }
// дописываем в конец буфера CRC16
    uart1_buffer[76]=CRC & 0xff;
    uart1_buffer[77]=(CRC>>8) & 0xff;
}


Для пакета
Код
0A 90 00 00 00 00 00 00 00 00 4F 33 40 40 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

CRC16 должна быть равна A1 01, а рассчитывается 0B D1, перепробовал ещё кучу стандартных алгоритмов, все рассчитывают новые CRC, но ни одна не посчитала A1 01. Голову сломал на этом затыке. Буду благодарен за любые мысли по проблеме


--------------------
Руслан
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
athlon64
сообщение Apr 10 2010, 09:01
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(AHTOXA @ Apr 10 2010, 14:24) *
Видимо то устройство, что работало, было 16-битное? smile.gif
Попробуйте заменить unsigned int на unsigned short.

Устройство было на меге2561 smile.gif

Цитата(baralgin @ Apr 10 2010, 14:40) *
Если перед расчётом CRC проинициализировать 0x6DA5 (вместо 0), то получится как-раз "A1 01" . Просто брутфорс smile.gif . Исходник один в один скопировали?

да, брал исходник как есть

Всё разобрался, рядом с этой функцией лежала такая же с постфиксом New в имени smile.gif, в которой алгоритм гораздо проще, опробовал - считает правильно:
Код
void SumCRCNew(unsigned int len)
{   unsigned char i;
    unsigned int CRC;

    CRC=0;
    for(i=0;i<76;i++) CRC+=uart1_buffer[i];
    uart1_buffer[76]=CRC & 0xff;
    uart1_buffer[77]=(CRC>>8) & 0xff;
}

Видимо для обмена по uart прошлым разработчикам пришлось упростить контроль целостности пакета, а я эту функцию проморгал smile.gif
Всем отписавшимся огромное спасибо smile.gif


--------------------
Руслан
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 10 2010, 12:07
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



athlon64
Видимо, это стандартный CRC16 для обмена по стыку IRDA. В Linux есть исходники расчёта CRC на С.Считается табличным методом.
Замена на сложение принципиально ухудшает обнаруживающую ошибки способность.
Go to the top of the page
 
+Quote Post
vallav
сообщение Apr 13 2010, 15:40
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(ASN @ Apr 10 2010, 16:22) *
athlon64
Видимо, это стандартный CRC16 для обмена по стыку IRDA. В Linux есть исходники расчёта CRC на С.Считается табличным методом.
Замена на сложение принципиально ухудшает обнаруживающую ошибки способность.


Всегда интересовало - почему "Замена на сложение принципиально ухудшает обнаруживающую ошибки способность"?
Одиночные ошибки - одинаково. Обнаруживаются всегда.
Двойные - от статистики зависит. Если они часто в одном разряде, CRC лучше, если они независимы, сложение лучше.
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 13 2010, 16:28
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



vallav
Теорию не помню.
По опыту. Работаем в очень сложной помеховой обстановке. Сложение ошибок не обнаруживало, CRC - обнаруживало.
Go to the top of the page
 
+Quote Post
vallav
сообщение Apr 13 2010, 17:01
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(ASN @ Apr 13 2010, 20:43) *
vallav
Теорию не помню.
По опыту. Работаем в очень сложной помеховой обстановке. Сложение ошибок не обнаруживало, CRC - обнаруживало.


Не очень понятно. Может - сложение иногда многкратных ошибок не обнаруживало ( пропускало пакет с ошибками ).
CRC пропускало пакет с ошибками в несколько раз реже.
Такое может быть, если многократные ошибки сильно и специфически коррелированы.

А вот чтобы - сложение всех ошибок не обнаруживало а CRC все ошибки обнаруживало - такое вряд ли.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 13 2010, 19:08
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(vallav @ Apr 13 2010, 21:16) *
Не очень понятно...

crcguide.pdf


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
vallav
сообщение Apr 14 2010, 10:13
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(demiurg_spb @ Apr 13 2010, 23:23) *



Вы к чему эту ссылку привели?
Там есть - как считать CRC, но там нет - чем CRC лучше простой суммы с той же разрядностью.
Кроме одного случая - в случае, когда двойные ошибки в одном разряде, CRC лучше.
А разве с этим кто либо спорил?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- athlon64   Алгоритм CRC16   Apr 10 2010, 07:39
- - AHTOXA   Видимо то устройство, что работало, было 16-битное...   Apr 10 2010, 08:09
- - demiurg_spb   Код//=============================================...   Apr 10 2010, 08:13
|- - defunct   Цитата(demiurg_spb @ Apr 10 2010, 11:28) ...   Apr 10 2010, 23:07
|- - demiurg_spb   Цитата(defunct @ Apr 11 2010, 03:22) И эт...   Apr 13 2010, 06:47
|- - defunct   Цитата(demiurg_spb @ Apr 13 2010, 10:02) ...   Apr 13 2010, 19:16
|- - demiurg_spb   Цитата(defunct @ Apr 13 2010, 23:31) Не п...   Apr 13 2010, 19:28
|- - defunct   Цитата(demiurg_spb @ Apr 13 2010, 22:43) ...   Apr 13 2010, 22:04
- - baralgin   Если перед расчётом CRC проинициализировать 0x6DA5...   Apr 10 2010, 08:25
- - zltigo   Цитата(AHTOXA @ Apr 10 2010, 10:24) Видим...   Apr 10 2010, 08:59
|- - demiurg_spb   zltigo, нет предела совершенству, можно и так: Код...   Apr 10 2010, 09:37
|- - zltigo   Цитата(demiurg_spb @ Apr 10 2010, 11:52) ...   Apr 10 2010, 12:17
|- - demiurg_spb   Цитата(vallav @ Apr 14 2010, 14:28) Там е...   Apr 14 2010, 19:05
|- - vallav   Цитата(demiurg_spb @ Apr 14 2010, 23:20) ...   Apr 15 2010, 05:10
||- - Палыч   Цитата(vallav @ Apr 15 2010, 08:25) Всего...   Apr 15 2010, 06:11
||- - vallav   Цитата(Палыч @ Apr 15 2010, 10:26) Забыли...   Apr 15 2010, 06:22
||- - Палыч   Цитата(vallav @ Apr 15 2010, 09:37) Повто...   Apr 15 2010, 06:57
||- - vallav   Цитата(Палыч @ Apr 15 2010, 11:12) Интуит...   Apr 15 2010, 07:19
||- - Палыч   Цитата(vallav @ Apr 15 2010, 10:34) Или В...   Apr 15 2010, 08:04
||- - vallav   Цитата(Палыч @ Apr 15 2010, 12:19) Извини...   Apr 15 2010, 09:34
||- - Палыч   Цитата(vallav @ Apr 15 2010, 12:49) Вы со...   Apr 15 2010, 10:00
||- - ASN   vallav А вот с тем, что посчитать 16 битную сумму ...   Apr 15 2010, 10:07
|||- - Палыч   Цитата(ASN @ Apr 15 2010, 13:22) А вот с ...   Apr 15 2010, 10:31
||||- - ASN   Палыч Пример на аппаратной логике расчёта обсуждае...   Apr 15 2010, 11:33
|||- - vallav   Цитата(ASN @ Apr 15 2010, 14:22) vallav А...   Apr 15 2010, 11:26
||- - VslavX   Цитата(vallav @ Apr 15 2010, 12:49) С чег...   Apr 15 2010, 13:34
||- - Палыч   Цитата(VslavX @ Apr 15 2010, 16:49) для п...   Apr 15 2010, 14:06
|||- - VslavX   Цитата(Палыч @ Apr 15 2010, 17:21) Имхо, ...   Apr 15 2010, 14:56
||- - vallav   Цитата(VslavX @ Apr 15 2010, 17:49) Есть ...   Apr 15 2010, 17:17
||- - ASN   vallav Пример на VHDL приведён как подтверждение т...   Apr 15 2010, 17:39
||- - vallav   Цитата(ASN @ Apr 15 2010, 21:54) vallav П...   Apr 16 2010, 05:20
||- - VslavX   Цитата(vallav @ Apr 16 2010, 08:35) То ес...   Apr 16 2010, 06:02
||- - vallav   Цитата(VslavX @ Apr 16 2010, 10:17) ИМО, ...   Apr 16 2010, 07:35
||- - VslavX   Цитата(vallav @ Apr 16 2010, 10:50) А что...   Apr 16 2010, 08:17
||- - Палыч   Цитата(VslavX @ Apr 16 2010, 11:32) И тут...   Apr 16 2010, 09:02
||- - vallav   Цитата(Палыч @ Apr 16 2010, 13:17) Присое...   Apr 16 2010, 10:25
||- - VslavX   Цитата(vallav @ Apr 16 2010, 13:40) Или В...   Apr 16 2010, 11:16
||- - Палыч   Цитата(vallav @ Apr 16 2010, 13:40) Я раз...   Apr 16 2010, 11:49
|||- - vallav   Цитата(Палыч @ Apr 16 2010, 16:04) Ну, ды...   Apr 16 2010, 15:56
||- - zltigo   Цитата(vallav @ Apr 16 2010, 13:40) И еще...   Apr 16 2010, 16:03
||- - vallav   Цитата(zltigo @ Apr 16 2010, 20:18) Вероя...   Apr 16 2010, 17:19
||- - zltigo   Цитата(vallav @ Apr 16 2010, 20:34) Разве...   Apr 16 2010, 18:49
||- - vallav   Цитата(zltigo @ Apr 16 2010, 23:04) Да Вы...   Apr 17 2010, 13:44
||- - zltigo   Цитата(vallav @ Apr 17 2010, 16:59) И зао...   Apr 17 2010, 14:16
||- - vallav   Цитата(zltigo @ Apr 17 2010, 18:31) Други...   Apr 17 2010, 14:30
||- - mdmitry   Цитата(vallav @ Apr 17 2010, 18:45) Но ес...   Apr 17 2010, 15:05
||- - zltigo   Цитата(vallav @ Apr 17 2010, 17:45) Вы за...   Apr 17 2010, 15:11
||- - demiurg_spb   Цитата(zltigo @ Apr 17 2010, 19:26) Я все...   Apr 17 2010, 20:13
||- - vallav   Цитата(zltigo @ Apr 17 2010, 19:26) Зачем...   Apr 18 2010, 13:17
||- - Палыч   Цитата(vallav @ Apr 18 2010, 16:32) Если ...   Apr 18 2010, 14:22
|||- - vallav   Цитата(Палыч @ Apr 18 2010, 18:37) Это - ...   Apr 18 2010, 14:32
|||- - Палыч   Цитата(vallav @ Apr 18 2010, 17:47) Полаг...   Apr 18 2010, 15:03
|||- - vallav   Цитата(Палыч @ Apr 18 2010, 19:18) Работа...   Apr 19 2010, 04:22
|||- - VslavX   Цитата(vallav @ Apr 19 2010, 07:37) Да, д...   Apr 19 2010, 05:26
|||- - vallav   Вы хоть в курсе - что это такое - CRC и как именно...   Apr 19 2010, 05:52
|||- - VslavX   Цитата(vallav @ Apr 19 2010, 09:07) Вы хо...   Apr 19 2010, 06:21
|||- - vallav   Ну что Вам сказать. Вы настолько в этм всем уверен...   Apr 19 2010, 07:03
|||- - VslavX   Цитата(vallav @ Apr 19 2010, 10:18) Ну чт...   Apr 19 2010, 07:26
||||- - vallav   Цитата(VslavX @ Apr 19 2010, 11:41) Мне т...   Apr 19 2010, 10:35
||||- - VslavX   Цитата(vallav @ Apr 19 2010, 13:50) Так к...   Apr 19 2010, 11:27
||||- - vallav   Цитата(VslavX @ Apr 19 2010, 15:42) Про _...   Apr 19 2010, 12:37
||||- - Палыч   Цитата(vallav @ Apr 19 2010, 15:52) ...Эт...   Apr 19 2010, 14:59
||||- - VslavX   Цитата(vallav @ Apr 19 2010, 15:52) http:...   Apr 19 2010, 17:48
||||- - vallav   Цитата(VslavX @ Apr 19 2010, 22:03) Призн...   Apr 20 2010, 04:56
||||- - vallav   Посчитал. Надеюсь, если и ошибся, то не сильно. По...   Apr 25 2010, 09:33
||||- - ASN   vallav Прямая сумма хуже CRC16 в Вашем случае боле...   Apr 25 2010, 11:31
||||- - vallav   Цитата(ASN @ Apr 25 2010, 15:46) vallav П...   Apr 25 2010, 13:20
|||- - defunct   Цитата(vallav @ Apr 19 2010, 10:18) CRC д...   Apr 19 2010, 14:28
|||- - vallav   Цитата(defunct @ Apr 19 2010, 18:43) Чтоб...   Apr 19 2010, 15:04
|||- - defunct   Цитата(vallav @ Apr 19 2010, 18:19) Дык н...   Apr 19 2010, 16:07
||- - VslavX   Цитата(vallav @ Apr 18 2010, 16:32) Что п...   Apr 18 2010, 20:13
|- - defunct   Цитата(demiurg_spb @ Apr 14 2010, 22:20) ...   Apr 17 2010, 20:47
|- - demiurg_spb   Цитата(defunct @ Apr 18 2010, 01:02) полу...   Apr 18 2010, 10:12
- - mdmitry   О CRC Считая CRC верным можно пытаться восстанови...   Apr 14 2010, 11:34
- - vallav   Цитата(mdmitry @ Apr 14 2010, 15:49) О CR...   Apr 14 2010, 12:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 16:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.0169 секунд с 7
ELECTRONIX ©2004-2016