Перейти к содержанию
    

Здравствуйте!

Начал работу со считывателем 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

Что я делаю не так, подтолкните

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что я делаю не так, подтолкните
Начальное значение должно быть 0, а не 0xFF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начальное значение должно быть 0, а не 0xFF.

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

 

Заменил на 0х00, получил 0хF5.

Подсчитайте, пожалуйста по точно рабочему алгоритму. Может не правильно считано

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заменил на 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, правда на ассемблере...

если конечно кому-то нужно

crc8sn.rar

Изменено пользователем UniSoft
Нарушение п.3.4 Правил форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот спасибо! Получилось с Вашей функцией подсчета. И вызов функции у меня был не правильным, что-то я заработался

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...