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 Пример работы программы
У данного устройства широкие возможности для развития: защелки, турникеты, селективный доступ и т.д. Многообещающе выглядит организация доступа к компьютеру и некоторым программам.
тут временные интервалы очень важны
прошивка с внутренним генератором
Reading an EM4100 RFID Transponder
EM4100 compatible RFID transponders carry 64 bits of Read Only memory. This means that information can be read from the Tag but no data can be changed, or new data written to the card once the card has been programmed with the initial data. The format of the data is as shown here.
1 1 1 1 1 1 1 1 1
9 bit header bits, all 1's
Each group of 4 bits
is followed by an Even
parity bit
D00 D01 D02 D03 P0 8 bit version number
D04 D05 D06 D07 P1 or customer ID
D08 D09 D10 D11 P2
D12 D13 D14 D15 P3
D16 D17 D18 D19 P4 32 Data Bits
D20 D21 D22 D23 P5
D24 D25 D26 D27 P6
D28 D29 D30 D31 P7
D32 D33 D34 D35 P8
D36 D37 D38 D39 P9
PC0 PC1 PC2 PC3 S0 1 stop bit (0)
4 column Parity bits
======================================================
Пример:
Shown here is an example string for a proximity card that has the data $06 (version number), and $001259E3 as a data string.
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 0 0
for tag 0 6 0 0 1 2 5 9 E 3
========================================================
Manchester Encoding Scheme
With Manchester Encoding a Tag will produce a level transition in the middle of the bit period. A low to high transition represents a logic 1 state, while a high to low transition represents a logic 0 state............................
Говорить о расчете схемы долго....тут отдельная статья, есть хорошие анноуты em marine и microchip там описываются типовые схемные решения, вплоть до типов и расчетов моточных и печатных катушек разной геометрии...Здесь представлено наиболее простое схемное решение...
Зачем 2 емкости С3,С4? Таким образом подбираете нужный номинал?
Какая роль R2 в пик. детекторе?
И если не сложно, намекните еще на пару апноутов на аналоговую часть, кроме "MicroChip System Design Guide".
Заранее большое спасибо за ответ.
R2 - просто токовый ограничитель
поиск на youtube: rfid iplogger
1) как насчет чувствительности...моя схема при хорошо настроенном контуре 10-12 см отлично работает (для сведения к вашей нужно вплотную брелок прикладывать 2-3 см)
2) неплохо бы и активный пиковый детектор с операционником сделать (чтобы чувствительность повысить схемы)
3) при этой святой простоте вы угрохали целую мегу16 плюс вы не экономите ресурсы проца, тем что можно внешними элементами просто сделать, я понимаю если бы вкупе с этим тини13 поставили.
Кстати по поводу тини13 я уже сделал и под нее прошивку...
Кстати любители простоты вот более красивое решения для вас от меня
1. Насчет чувствительности Ваши доводы безосновательны, поскольку Вами мое устройство не проверялось.
2. Повышать чувствительность схемы нет необходимости, так как 4-5 см для распознавания метки вполне достаточно и необходимость большего расстояния для считывания сомнительно.
3. При всей моей святой простоте я не угрохал "мегу16". Это всего-лишь заготовка для моего будущего проекта эмулятор-дубликатора контактных и RFID ключей. Из ее ресурсов используется всего четверть памяти, учитывая что выполняются не только задачи чтения, но и дубликатора и эмулятора RFID меток (про бутлоадер я молчу).
"Более красивое решения для вас от меня" принадлежит не Вам, а талантливому итальянцу по имени Ficara Emilio Pietro Giovanni. Его транзистор на схеме я ставить не стал, поскольку незачем...
"Более красивое решения для вас от меня" принадлежит не Вам, а талантливому итальянцу по имени Ficara Emilio Pietro Giovanni. Его транзистор на схеме я ставить не стал, поскольку незачем...
//.=========================================
не о том разговор кто проектировал это решение (кстати товарищ, вы не заметили что я в статье никаких схем и прочего из разработок этого Ficara не использовал? ), но думаю большинство поддержат что решение более красивое и правильное из "простых". Потому как считаю это решение не самым лучшим (знаете типа минимум) но ДОПУСТИМЫМ как простое.
//=============================================
Насчет чувствительности Ваши доводы безосновательны, поскольку Вами мое устройство не проверялось.
//==============================================
вот это вы зря, я над этой темой работаю гораздо больше вашего (несколько лет) и были проверены десятки конструкций и схемных решений. Мои решения около года работают в реальных промышленных условиях. Простые решения не пригодны для профессиональных ридеров и имеют чисто "'эстетическую ценность". Насчет чувствительности вы это зря сказали . Как вы думаете, если редер расположен за стенкой 10см а карта приложена с обратной стороны (ну не поставите вы ридер снаружи двери иначе зачем он вообще нужен?) как человек откроет такую дверь? То есть вы ограничиваете круг применения этих устройств.
Поэтому предлагаю ориентироваться на параметры промышленных устройств данного класса и разрабатывать соответствующие устройства, а не те которые "ну работает же". Напомнить вам эти параметры или сами даташиты скачаете? .
Вот вам небольшое лирическое отступление по поводу "простоты" что касается детектора:
"В простейшем случае для этой цели можно использовать диод и конденсатор. Наибольшее значение входного колебания заряжает конденсатор, который сохраняет заряд до тех пор, пока диод смещен в обратном направлении.
Этот метод имеет серьезные недостатки. Входной импеданс является переменной величиной, и в момент пиков входного колебания он очень мал. Кроме того, из-за падения напряжения на диоде эта схема нечувствительна к пикам, меньшим 0,6 В, а для больших пиков она дает ошибку (на величину падения напряжения на диоде). Более того, падение напряжения на диоде зависит от температуры и протекающего через диод тока, а это значит, что погрешность схемы зависит от температуры окружающей среды и скорости изменения выходного напряжения; напомним, что I = C(dU/dt)....и тд. и тп.
...так что по поводу лучших простых решений думаю всем понятно, хотя что и как собирать это личное дело, разумеется если для себя
И у Вас стоит точно такой-же детектор. Видимо, температурно-компенсированный. Только добавлен каскад фильтрации и усиления сигнала.
Я тоже, товарищ, ничьих разработок не использовал.
Ридер снаружи ставить нет абсолютно никакой необходимости. Поставьте катушку. Кстати, ни разу не видел считывателя "за стеной".
Мое устройство "не работает же". Оно просто работает.
Ориентироваться на промышленные устройства можно, но радиолюбителям нужны простые, работающие конструкции с минимумом компонентов.
По поводу детектора вы правильно заметили что у меня стоит простой пассивный детектор...но я уже имел опыт конструкции с активным детектором и результаты положительные, поэтому обратил ваше внимание и другим советую двигаться в направлении улучшения параметров схемы а не выкидывать "лишнее"... тоже касается фильтров и усилителей.
//Кстати, ни разу не видел считывателя "за стеной".
вернее сказать за дверью или в двери.. не всегда это проходная, где рядом стоит охранник...сами понимаете что будет с вашей катушкой и ридером на двери неохраняемого помещения, т.е. кое-какая антивандальная защита. Это что касается промышленных устройств. Да и знаете приятней и на внешнем устройстве когда карта уверенно срабатывает уже на расстоянии от панели а не возить по поверхности и ждать когда она "попадется"
Доброе утро! Подскажите пожалуйста в выложенной Вами схеме RFID USB как подключено в вывода МК все осальное бузер, выход на ключ замка , как программируется время открытия замка и т д. С уважением, Виталий