Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CRC-8
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
kolisnichenko_r
Здравствуйте!
Начал работу со считывателем PR-01(по работе один один с DS1990A). Есть карточка. Считываю данные, номер совпадает с номером на карточке. Считаю CRC - не совпадает.
Вот функция:
Код
unsigned char Crc8(unsigned char *pcBlock, unsigned char len)
{   unsigned char crc=0xFF;
    unsigned char i;
    while (len--)
    {crc^=*pcBlock++;
     for(i=0;i<8;i++)
     crc=crc&0x80?(crc<<1)^0x31:crc<<1;
    }
    return crc;
}
Вот что я считал с карточки:
[code] mas[0]=0x01;
  mas[1]=0xdf;
  mas[2]=0xd8;
  mas[3]=0x58;
  mas[4]=0x00;
  mas[5]=0x00;
  mas[6]=0x00;
  mas[7]=0x79;//CRC

Использую функцию так:
Код
CRC8=Crc8(mas[0],7);

В результате CRC8=0х95
Что я делаю не так, подтолкните
Сергей Борщ
Цитата(kolisnichenko_r @ Feb 19 2010, 16:03) *
Что я делаю не так, подтолкните
Начальное значение должно быть 0, а не 0xFF.
kolisnichenko_r
Цитата(Сергей Борщ @ Feb 19 2010, 18:19) *
Начальное значение должно быть 0, а не 0xFF.

Спасибо! Сейчас проверю

Заменил на 0х00, получил 0хF5.
Подсчитайте, пожалуйста по точно рабочему алгоритму. Может не правильно считано
UniSoft
Цитата(kolisnichenko_r @ Feb 19 2010, 22:03) *
Заменил на 0х00, получил 0хF5.
Подсчитайте, пожалуйста по точно рабочему алгоритму. Может не правильно считано

Считано правильно,
А процедура подсчета у меня так реализована... (хотя фактически это тоже самое, только сдвиг в другую сторону, и соответственно полином перевернут)
Код
unsigned char Crc8(unsigned char *pcBlock, unsigned char len) {
    unsigned char crc=0;
    unsigned char i;

    while (len--) {
        crc^=*pcBlock++;
        for(i=0;i<8;i++)
            crc=crc&1?(crc>>1)^0x8C:crc>>1;
    }
    return crc;
}


и еще, может вызов неверный,
CRC8=Crc8(mas[0],7);
разве не так нужно?
CRC8=Crc8(&mas[0],7); или так: CRC8=Crc8(mas,7);

вкладываю мою программку калькулятор, сам писал для PC, правда на ассемблере...
если конечно кому-то нужно
kolisnichenko_r
Вот спасибо! Получилось с Вашей функцией подсчета. И вызов функции у меня был не правильным, что-то я заработался
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.