RFID2 или USB HID RFID reader
Проект RFID считывателя “RFID 125Khz card reader – без спец микросхем (atmega8)” для RS232 давно закончен. Однако рано еще ставить точку в деле освоения RFID карт. К моему удивлению проект вызвал значительный интерес среди радиолюбителей, особенно учитывая тот факт что данная технология сравнительно недавно появилась в нашем регионе и сами промышленные устройства пока не получили широкого распространения за исключением пожалуй домофонов.
Может быть, именно домофоны стали объектом наиболее пристального внимания, точнее сами белки VISIT. Как бы там ни было схемотехника устройств достаточно проста, данные карты не имеют навороченных алгоритмов шифрования и антиколлизионных алгоритмов как в более высокочастотных Mifare картах 13,56Mhz, плюс отличная оригинальная документация EM Marine (собственно разработчик данного протокола). Преимущества карт 125Кгц очевидны – низкая стоимость карт, простота считывающих устройств. Однако касательно интерфейса с ПК можно отметить, что любимый всеми СОМ порт (RS232) уходит понемногу в прошлое, на ноутбуках его все чаще нет, приходится пользоваться разнообразными переходниками USB-RS232 которые дают столь желанный виртуальный СОМ порт. Все бы было хорошо, но стоят эти переходники достаточно прилично, а для любительской конструкции зачастую дороже самого устройства. Покупать на заказ микросхемы и ваять такие переходники тоже невыгодно, ведь купить китайский переходник дешевле, чем заказывать детали на него. Вот и возник вопрос как бы вместить в самом устройстве USB интерфейс и считыватель карт, причем желательно ограничится одним контроллером. А считыватель у нас на AVR mega8-16. На борту встроенных портов USB нет. Ну что же, высокоскоростной USB 2.0 Full speed 480мб/с конечно нам не суждено сделать, а низкоскоростное HID устройство можно. Это кроме всего прочего позволит осуществлять “горячее” подключение нашего считывателя к ПК. Чтобы рассеять немного туман вокруг загадочных “HID” устройств привожу техническую информацию на данный класс. Оказывается мы давно с ними знакомы - да это usb мыши, клавиатуры, джойстики. Кроме того дополнительный драйвер для устройства не потребуется, иcпользуется стандартный HID драйвер в Windows.
Общие сведения о HID-устройствах
HID-устройства (Human Interface Device) это устройства взаимодействия компьютера и человека, такие как:
- клавиатуры, мыши, джойстики и другие указатели;
- игровые рулевое управление и педали;
- кнопки, переключатели, регуляторы;
- различные датчики и считыватели;
- и т. п.
Принципиально на основе HID-технологии можно организовать взаимодействие с любым устройством, даже если оно не является в строгом смысле интерфейсным устройством человека и компьютера. Это позволяет отказаться от трудоемкой разаботки уникального драйвера устройства и сэкономить время на разработку нового USB-устройства. На стороне хоста обменом с устройством будет руководить стандартный HID-драйвер, включенный в поставку операционной системы. Нужно лишь выполнить со стороны устройства минимальные требования USB-HID протокола.
Стоит отметить что, многие USB-приборы, с первого взгляда не попадающие под определение устройств взаимодействия с человеком, логичнее все же реализовать как HID-устройства. Такое явление часто встречается в области производственного оборудования, которая последнее время переживает массовое внедрение USB-технологий. К примеру рассмотрим лабораторный источник питания с возможностью задания параметров его выходных сигналов с компьютера с помощью USB-интерфейса. Непосредственно источник питания без сомнений не является средством взаимодействия с человеком. Однако, в данном случае функции, реализуемые посредством USB-подключения, дублируют клавиатуру, регуляторы и индикаторы, установленные на самом приборе. А эти органы управления как раз попадают под определение HID. Соответственно блок питания с такими USB-функциями логичнее всего организовать как HID-устройство.
В рассмотренном примере для нормальной работы достаточно будет небольшой скорости передачи данных, в других же случаях приборы могут быть весьма требовательны к скорости обмена. Низкая скорость передачи является главным ограничением HID-варианта построения устройства. Максимально возможная скорость передачи данных при такой организации обмена составляет 64 Кбит/сек. Такой показатель в сравнении с 12 Мбит/сек полной скорости USB-шины выглядит жирным минусом HID-технологии в вопросе выбора конкретной USB-реализации. Однако, для многих задач коммуникации указанной скорости вполне хватает и HID-архитектура как специализированный инструмент занимает достойное место среди способов организации обмена данными.
Требования к HID-устройствам
При разработке HID-устройства необходимо обеспечить следующие требования, налагаемые спецификацией:
- полноскоростное HID-устройство может передавать 64000 байт каждую секунду: по 64 байта каждые 1 мс; низкоскоростное HID-устройство имеет возможность передать вплоть до 800 байт в секунду: по 8 байт каждые 10 мс.
- HID-устройство может назначить частоту своего опроса для определения того, есть ли у него свежие данные для передачи.
- Обмен данными с HID-устройством осуществляется посредством специальной структуры, называемой репортом (Report). Каждый определенный репорт может содержать до 65535 байт данных. Структура репорта имеет весьма гибкую организацию, позволяющую описать любой формат передачи данных. Для того чтобы конкретный формат репорта стал известен хосту микроконтроллер должен содержать специальное описание – дескриптор репорта. Микроконтроллер возвращает хосту дескриптор репорта в ответ на требование GET_DESCRIPTOR с кодом 0x2200 в поле wValue. Обработку стандартных требований USB мы обсуждали в статье, посвященной идентификации и конфигурированию USB-устройств.
Устройство может содержать несколько репортов и обязано содержать столько же дескрипторов репортов.
- Все HID-устройства также должны содержать дополнительные описания, специфичные для устройсв этого класса – так называемые HID-дескрипторы. Такие описания микроконтроллер возвращает хосту в составе набора дескрипторов в ответ на требование GET_DESCRIPTOR с кодом 0x02 в старшем байте поля wValue, т.е. при запросе хостом дескриптора конфигурации.
- HID-устройства должны поддерживать специальное требование GET_REPORT и могут поддерживать дополнительное требование SET_REPORT, которые позволяют обмениваться данными посредством канала контрольной точки.
- HID-устройства должны иметь конечную точку типа Interrupt IN и могут иметь конечную точку типа Interrupt OUT. С помощью них устройство может выдавать данные хосту и получать их от него. Типы и направления передач мы рассматривали в статье, посвященной основам организации USB-шины.
- К загрузочным HID-устройствам предъявляются дополнительные требования
Как уже упоминалось ранее, весь обмен данными с HID-устройствами осуществляется при помощи репортов. Они бывают трех типов:
- INPUT- и OUTPUT-репорты используются для периодических передачи и приема данных. Примером может служить периодическая информация о перемещении мыши.
- FEATURE-репорты обычно используются для установки различных свойств и параметров, а также передачи других данных в тех случаях, когда предположить периодичность появляния таких данных сложно. FEATURE-репорты бывают как направления IN, так и направления OUT. Такие репорты передаются и принимаются только по каналу нулевой конечной точки.
Итак, скорость для нашего ридера некритична, данные пакетируются и передаются через 10мс. HID устройство имеет 2 репорта для обмена с ПК по 8 байт.. Программа, на ПК опрашивает HID устройство и если считыватель получил пакет, то передает его ПК. Программа на ПК получает данные и сбрасывает контрольный байт на HID устройстве, который показывает, что была считана карта. Через 500мс он возобновляет опросы устройства. Если контроллер HID правильно считывает карту, то он заполняет буфер данных и устанавливает контрольный байт. Программа написана на С++ Builder, после успешного чтения карты установлен таймаут 500 мс. Наверное, также стоит сделать еще сервер, чтобы сторонние программы могли получать эти данные и неплохо установить выбор таймаута считывания (например, для прохода турникета и пр.). Программа работает отлично, поставил звуковой сигнал cсчитывания карты (файл wav)
Схема устройства приведена ниже:
Рис1. Схема устройства.
Аналоговая часть RFID особенностей не имеет по сравнению с предыдущей версией. Единственное существенное - убран инвертор на выходе, а усилитель включен в инверсном включении. Функционально аналоговая часть включает “драйвер линии” для накачки контура, пиковый детектор, фильтр, усилитель, компаратор. Тактовая частота контролера 16Мгц. Микросхема 74hc4060 это кмоп генератор несущей для считывателя 125Кгц. Настоятельно рекомендую при сборке в первую очередь убедиться что данный генератор работает. Кварц на генераторе 8Мгц. По поводу подключения к USB очень рекомендую ставить стабилитроны, как показано, и сопротивления подтяжки линий d+ d- тех же номиналов. Без них устройство правильно не определится в системе. Резистор 2,2К в подтяжке можно попробовать заменить на 1,5К. Без стабилитронов можно обойтись если питать устройство 3,3-3,6В – стабилизатор от 5в. Кому интересно может экспериментировать. В данном случае питание 5в. Дальность уверенного распознавания карты при хорошо настроенном контуре 8-10см, брелка визит ~5см.
В архиве выложена прошивка для mrga8-16 (я ставил TQFP mega8a). Фьюзы прошивать для кварца 16 mhz: Также в архиве есть программа для ПК (пока проверена только в XP sp2/sp3), на Win7 тоже должна работать. Файл wav –это сигнализатор считывания карты. Данные отображаюстя в hex коде, все 5 байт чистого содержимого. Кто хочет проверить код, выбитый на карте – берете калькулятор на ПК и переводите в десятичные числа. На карте что была считана написано 225.38915 что как видим соответствует E1.9803/ Очевидно что это последние 3 байта. Два первых считаются кодом серии карт и их не печатают (но это не значит, что на карте их нет.).
Итак теперь будем бороться с манчестер кодированием карт mifare ultralight 13.56mhz - это тоже интересно…. Вопросы и замечания можно оставить в коментариях или отправлять на kostua123@mail.ru (by Rubanov K.)
Рис 2 Фьюзы прошивки
Рис 3 Пример работы программы
Отправитель | Нити |
---|
Ответы | Отправитель | Отправлено |
---|---|---|
RFID2 или USB HID RFID reader | klslab | 09.12.2012 11:40 |
RFID2 или USB HID RFID reader | kostua | 12.12.2012 23:35 |
RFID2 или USB HID RFID reader | iplogger | 15.12.2012 18:29 |
RFID2 или USB HID RFID reader | MACTEP | 15.12.2012 19:09 |
RFID2 или USB HID RFID reader | iplogger | 15.12.2012 19:26 |
RFID2 или USB HID RFID reader | MACTEP | 15.12.2012 20:23 |
RFID2 или USB HID RFID reader | kostua | 15.12.2012 23:42 |
RFID2 или USB HID RFID reader | iplogger | 16.12.2012 17:53 |
RFID2 или USB HID RFID reader | kostua | 16.12.2012 18:47 |
RFID2 или USB HID RFID reader | kostua | 16.12.2012 19:00 |
RFID2 или USB HID RFID reader | iplogger | 16.12.2012 19:58 |
RFID2 или USB HID RFID reader | kostua | 16.12.2012 22:35 |
RFID2 или USB HID RFID reader | DOG1958 | 02.11.2015 8:17 |