RFID. Часть 1. Ридер.

Изучать любую технологию удобнее, когда у тебя есть фирменное оборудование, а не самодельный хлам. Ибо, когда ты не до конца понимаешь, как и что должно работать очень сложно отлаживать самоделки. А готовое работающее устройство очень помогает в освоении новой технологии.

Хммм… к чему это я?..
Orcinus Orca, отправляя мне пару карточек EM-Marine, положил в посылку сломаный, по его мнению, ридер… Ага, как-же, «сломаный»! :)
Ридер оказался живее всех живых *, и теперь у меня целый «RFID Starter's kit»: считыватель и две карточки (свой-чужой).

* Вообще, есть такая тенденция. Мне приносят какой-нибудь девайс со словами "%device% не работает, вот, может тебе на запчасти пригодится..". Перед тем, как разобрать девайс на запчасти (или выкинуть нах, ибо хлам) я пытаюсь его включить. И, о чудо! В подавляющем большинстве случаев он включается. И даже более того — работает! :)

На радостях от того, что ридер работает, первый пост решил написать про него. Из полезной инфы тут можно найти описание протокола wiegand и пример на МикроПаскале по работе с ним. И еще кучу флуда про ридеры вообще и EM-02 в частности.

Первое знакомство.

В коробке лежали две карточки и ридер EM-02.
Ридер оказался тяжелее, чем казалось на первый взгляд. Вскоре выяснилось — почему: внутри все было залито эпоксидкой.
Все видели букашку, застывшую в янтаре? Вот и он выглядел примерно так:


Крупнее.

Сзади торчал огрызок восьмижильного кабеля.
Из скудной документации на ридер я выяснил распиновку:
Черный - земля*
Красный - питание
Оранжевый - Линия 1-wire
Зеленый - Управление зеленым светодиодом (прижать к земле, чтобы зежечь светодиод)
Синий - Управление красным светодиодом (логика такая-же)
Коричневый - Управление пищалкой (на редкость громкий и противный звук, даже через пластиковый корпус)
Белый - D0 (Wiegand)
Желтый - D1 (Wiegand)


Тут всплывает не то, что-бы недостаток, но отсутствие удобной фичи. Незнаю, есть-ли она у других ридеров, но если нет, то её стоило-бы придумать :). Это выход +5В с преобразователя. Дело в том, что ридер питается от 12В и в нем стоит преобразователь на 5В (некое подобие 7805, а может и она). И было-бы круто сделать выход с этого преобразователя для питания, к примеру, простенького контроллера. Чтобы не плодить стабилизаторы. В конце-концов, даже на FT232 такая штука есть :).

* Кстати, из правила «красный-питание, черный-земля», оказывается, есть исключения. К примеру, недавно разбирал ps\2 клавиатуру — в ней на питание шли желтый и коричневый, а для обмена данными — красный и черный. Вот так.

После включения ридер непрерывно «фонит» в окружающую среду, пытаясь обнаружить карточку (к слову, дальнось у него около 10 см). Как только он прочитает её код — моргает зеленым светодиодом и коротко пикает. В этот момент по протоколу Wiegand выдается код карточки. Причем на моем ридере Wiegand может работать в двух форматах — 26 и 40 бит. Wiegand-40 не содержит данных о четности, поэтому проще в обращении, чем wiegand-26.

По ходу дела выясняется еще один недостаток этого ридера — отсутствие режима энергосбережения. То-есть ему нельзя сказать «заткнись, и не трать электричество». У других ридеров такой режим есть. Хотя, можно просто отрубать питание ридеру, когда требуется экономить энергию.
И тут-же, недостаток №3: ридер нельзя отучить от пищания и мигания светодиодом при поднесении карточки. Т.е. если мы, например, хотим сделать незаментый замок, который должен молчать при поднесении чужой карточки, то ридер придется покалечить :)

Помимо недостатков у ридера есть удобнейшая фича — порт 1-wire. Он полностью прикидывается таблеткой iButton (aka TouchMemory, aka DS1990A). Пока карточка находится в зоне считывания, он отвечает на сигнал RESET и выдает код карточки по команде 0x33 (READ ROM).

Надо отметить, что на всех интерфейсах есть нужная обвязка. Подтяжка 4.7k на 1-wire и по 10к на D1 и D0 для Wiegand.

На мой взгляд, использовать wiegand удобнее, чем 1-wire. Через Виганд ридер сам выдаст код, как только карточка войдет в зону считывания, а 1-wire нужно постоянно опрашивать. С другой стороны, при помощи 1-wire можно следить за тем, чтобы карточка находилась около ридера.

Тест-драйв.

Еще до того, как я начал разбираться с протоколами, провел «тест на дальность». Смотрел, с какоко расстояния (приблизительно) считыватель чует карточку. При этом я мешал сигналу разнобразными препядствиями. Вот, что из этого получилось:
(Условия теста: Питание = 12.5V, источников ЭМ помех по близости нету, крышка ридера снята)
Без препядствий — 9 см.*
Между ридером и карточкой лежит книжка (толщиной примерно 3см) — тоже около 9см.
Между ридером и карточкой стальная крышка от коробочки (размером как сам ридер) — вообще не ловит карточку. Даже вплотную.
Та-же байда, но уже позади ридера (как-будто ридер закреплен на металлической поверхности) — 5-7 см.
Всякие мелкие железные предметы, которые не могут полностью накрыть ридер (взял, что под руку попадется — ножницы) — 9 — 10 см.
Провод 220 Вольт, от розетки к БП ридера (между ридером и картой) — тоже никак не повлиял на дальность: 9-10 см.


* Если спозиционировать катрочку точно над ридером — можно добиться дальности аж в 15 см!
При разработке какого-нибудь замка на бесконтактных картах или другой подобной приблуды, может возникнуть желание спрятать ридер от посторонних глаз. Например, в дверь или стену. Вот для таких случаев я и провел свой тест на дальность. Из него можно сделать один вывод: железкой ридер не накрывать! Все остальное можно, в пределах разумного :)

Йа таблетко!

После проверки на дальность я пристал к ридеру по 1-wire. Для этого использовал свой отладчик/сниффер. Кстати, наличие в доме подобного устройства очень мотивирует совершать эксперименты и другие глупые вещи :) Ведь не нужно каждый раз писать программу, чтобы пообщаться с новым девайсом: весь функционал для работы с i2c и 1-wire уже реализован, осталось его только заюзать.
Заработало все с первого раза. Ридер выдал мне код карточки:
RESET + PRESENSE
Передан байт 0x33
Прочитан байт 0x01
Прочитан байт 0xF0
Прочитан байт 0xFB
Прочитан байт 0xF1
Прочитан байт 0x00
Прочитан байт 0x2E
Прочитан байт 0x00
Прочитан байт 0x7A


Собственно, перед вами копипаста отчета отладчика. «RESET + PRESENSE» значит, что мы дернули линию (RESET), на что ридер ответил тем-же (PRESENSE). Дальше мы передали команду на чтение (0x33) и прочитали 8 байт: Family code, 48 бит кода, и CRC. Так-как считыватель полностью косит под таблетку iButton, family code у него тоже «таблеточный» и CRC считается так-же.

Кроме команды 0x33, ридер живо реагирует на команду 0x0F (тоже самое, что и 0x33 — READ ROM). Еще хотел посмотреть как он дружит с процедурой Search ROM, но передумал ввиду того, что сам эту процедуру не очень понимаю. Да и не нужна она :)

Простой протокол со странным названием. *

Наигравшись с 1-wire, решил заюзать Wiegand. Во первых, потому, что он есть, а во-вторых не у каждого ридера может быть выход на 1-wire. А wiegand это стандарт для ридеров, со времен магнитных карт.
Хорошее описание протокола можно стащить отсюда. Далее следует вольный пересказ сего документа.

Протокол прост, как каменный топор. Две линии: D1 и D0. Активный уровень — низкий. Данные передаются кототкими импульсами (20-200 мкс). Паузы между импульсами примерно 2мс. Импульс на линии D0 значит, что передался 0. Импульс на D1 — передалась единичка.

Завершение передачи детектится по таймауту. Обычно это 250-500 мс. Т.е. если пол секунды не было ни одного импульса — считаем, что все приняли.

Временные характеристики протокола довольно сильно варьируются в зависимости от того, что ударило в голову изготовителю ридера.
Так-же, возможно, на некоторых ридерах не будет интегрированого обвеса (pull-up резисторы) для интерфейсов.

Вот так передача данных выглядит на схеме, выдраной из документации на Wiegand (которая еще более скудна, чем документация на ридер):



Все, пересказ кончился. Быстро, да? :)

* Название протокола Wiegand (произносится «Виганд») видимо произошло от «Карты Виганда» (Wiegand Card). Это пластиковая карта, в которую в хаотичном порядке впресованы кусочки магнитного материала. Они создают уникальный код карты. Работа такой карты основана на эффекте Виганда (Wiegand effect), который был открыт американским инженером Джоном Вигандом. Вот такие плюшки. Семь «вигандов» на три предложения :)

Разведка боем.


Для тех, у кого завалялся подобный ридер, я заготовил немного материалов для размышления и изучения.
Во-первых это программа на МикроПаскале, которая принимает данные от считывателя по протоколу Wiegand и выдает в комп по UART.
Формат на выходе таков:
0x38 — просто сигнал о том, что дальше пойдут данные.
Количество данных, принятых от ридера (в битах).
Массив из 6 байт — код карточки. Это данные с ридера в сыром виде. Т.е. биты четности присутствуют. Старший бит кода (тот, который ридер выдал первым) соответствует старшему биту последнего байта массива.

Исходник состоит из 2х файлов. В первом (weigand_tst *) сам код программы, а во втором (weigand_unit) — процедуры для работы с wiegand.
Точнее, процедура там одна: wd_interrupt. В программе она вызывается из обработчика PCINT, когда изменяется уровень на линии D0 или D1 (это не названия пинов МК, а линии wiegand). В принципе, если МК нечем заняться, можно вызывать эту функцию по таймеру.
Еще нужно организовать тайм-аут. Для этого нужен таймер (не важно-программный или аппаратный), с периодом = 0.5 сек. Или около того.
У меня в программе используется TIMER\COUNTER 1 с предделителем = 1024. (надо заметить, что частота МК в моем случае = 18 МГц).
В процедуре wd_interrupt таймер сбрасывается:
//Сбрасываем timeout счетчик...
   TCNT0 := 0;
   TCCR0B := 5; // 1024

А при его переполнении можно считать, что данные готовы к употреблению. У меня в прерывании TIMER1_OVF устанавливается флаг, по которому программа в основном цикле узнаёт, что пора отправлять данные в комп.
Это во-первых. А во-вторых была программка на делфи, которая принимала данные и выводила на экран код карточки, протокол (Wiegand-26 или 40) и т.д. «Была» потому-что я её случайно вынес :( Но и терминалки хватает.

* Да, weigand. Это я дико ошибся, когда обзывал проект. А переименовать обратно его как-то лениво :)

Продолжение следует...


Правда, я еще не знаю, про что будет вторая часть.
Сейчас потихоньку собираю свой ридер. Если ничего ужасного не произойдет, второй пост будет про постройку ридера своими руками.
А может, какое-нибудь устройство на базе этого считывателя.
Потом попробую сделать эмулятор карточки.
В общем, изучение RFID будет интересным :)

P.S. Еще раз спасибо Orcinus Orca за карточки и считыватель!

P.P.S. Если кому-то пост показался странным, может я называл вполне тривиальные функции «фичами» и т.п — в этом нет ничего удивительного :) Я, по сути дела, впервые вижу RFID считыватель :)

  • +4
  • 11 марта 2011, 03:51
  • dcoder

Комментарии (32)

RSS свернуть / развернуть
интересно. сколько такой ридер стоит? расковырять и составить схему не пробовал? хотелось бы сделать подобное на доступной базе.
0
Полезная статья.

RFID считыватели стоят от 800 рублей и более. Средняя цена обычно 1500-2500 рублей. Во всяком случае у нас на Урале.

По выход 5В На самом деле он будет лишний. При монтаже даже существующие провода подключаются не всегда все. И дополнительный провод да еще с питанием будет только мешать. А контроллеры по управлению доступом сами питаются от 12 вольт. Потому и питание считывателя такое, т.к. оно подается с контроллера а не наоборот. :)
0
Самодельные считыватели делают. Воде на радиодеде мне поподались…
0
Интересная схема вот тут есть: www.vapes.narod.ru/info6.html

Я сейчас из неё аналоговую часть делаю.
0
Я делал ридер… на U2270B+atmega8+драйвер rs485(опционально)+антенна самодельная…
u2270b — 20грн. стоит.
Так что посчитайте сами…
0
Полезности ровно ноль. Не о чем. Типа купил Электробигуди и пробуем ее помазать вазелином, сунуть под язык и т.д. а по ходу выясняем из инструкции, что она еще волосы завивать помогает.
-1
такой ридер стоит 600р контора айронлоогик. обычно они залиты герметиком, а не эпоксидкой. Герметик иногда монтажники выдёргивают обрывая катушку.
Делать свой такой смысла мало.
У той же конторы есть много интересных штук под считыватели. Карточки-браслеты, карточки-боты и таблички.
так что можно придумывать много интересного.
А мифаер так ещё и перезаписываемые. у нас на таких общественный транспорт вместо билетов работает.
0
Познавательно, мне понравилось.
0
  • avatar
  • Rom
  • 11 марта 2011, 06:37
Еще про режим засыпания. Если честно, мне не попадальсь считыватели имеющие режим сна. Отчасти потому, что они предназначены для систем контроля доступа предприятий. Если считыватель будет спать — значит он не будет излучать поле. Значит он не унает что к нему поднесена карточка. Значитэто создаст ненужные проблемы и пробки в дверях/турникетах/шлагбаумах. А в масштабах даже квартиры его потребление достаточно мало. Не от батареек же его запускать. А стандартный аккумулятор на 7 Ач 12В держит контроллер с замком и 2мя считывателями порядка 12-24 часов.
0
Ридер любые карты может считывать?
0
Смотря какой ридер. Карточки различаются по частотам (а внутри частотного диапазона может быть несколько форматов). Есть ридеры универсальные — даже с несколькими диапазонами частот.

Мой умеет читать только EM-Marine (125кГц).
0
Как можно узнать рабочую частоту карты?
0
Самые распространенные карты доступа работают на 125 кГц. Протоколы 2х типов: EM-Marine и HID. EM-Marine чуть более распространен, потому как оборудование на него чуть дешевле. Между собой эти протоколы несовместимы, но бывают универсальные считыватели, которые понимают оба. (В данном случае имеются в виду протоколы обмена между считывателем и картой).
0
Скажите, а 125кГц — это частота импульсов? А частота несущей?
0
125кГц это как-раз частота несущей,
а импульсы идут, ЕМНИП, с частотой 2кГц.

Но я точно не помню, ибо пока в связь ридера с карточкой не углублялся.
0
несущей.
0
этот умеет EM-Marine и HID читать.
0
Хорошая статья. Только если она конкурсная,(а она конкурсная) надо ставить баннер Мастерама в конце.
0
Уже :)
0
Спасибо за статью, особенно за описание протокола wiegand!
0
Недавно разбирался тоже с ридером.
Фотку выкладывал на форуме, полное описание мучений и код у себя на сайте.

Время на практике отличается очень сильно от норм.
Подтяжки виганд выходов нет на 90% недорогих ридеров.
Отсутствие битов четности не упрощает протокол — разницы нет совершенно, большинство СКУД просто игнорируют эти биты и воспринимают неверно считанную карту как чужую. Биты нужны только на зашумленной линии, а в обынчных условиях проблем обычно нет.
0
  • avatar
  • ZPS
  • 12 марта 2011, 00:42
Не надо изобретать велосипед, всё давно придумано до нас

dlinyj.livejournal.com/426509.html Было на AT90S1200, я перенёс код на тини2313

И готовое устройство dlinyj.livejournal.com/426863.html
0
Изобретать велосипед интересно. Хотя-бы по этому его стоит изобретать. Во-вторых, это лучший способ узнать — как велосипед устроен.

А одно из готововых устройств я всегда успею повторить, если очень приспичит.
0
А что здесь изобретено? Если-бы автор разработал свой ридер (хоть он и не первый на планете) и описал подробно что-и как-заботает — это ДА, молодец. А так — это бесценная статья, ценность = 0. Садись, 2.
Если уметь пользоваться поисковиком, то можно найти около десятка схем, у микрочипа есть аппнот с печатной катушкой, а не намотонной на руку проволокой.
0
Ребята, подскажите вот по такому вопросу.
Есть объект(почтамт)
нужно реализовать полную замену штрих кодов rfid считывателями и метками.
чтобы был бюджетный вариант, скажем так дешево и сердито.
чтобы можно было еще отслеживать посылки, письма..
т.е. какие по вашему мнению более подходящие для этого считыватели и метки?
0
0
1. Один из самых дешевых считывателей — Matrix-II. Правда, у него есть особенность — передает код только 1 раз при считывании. Пока не уберешь карту из зоны действия и не приложишь обратно — не будет снова передавать данные. Т.е. ловить данные надо четко.

2. Считыватели обычно питаются от шины контроллера, а не наоборот. Отсюда и отсутствие 5В выхода. Да и на контроллерах 5В не выходит. Обычно шины питания сделаны так: БП 12-15В -> контроллер -> считыватель. Все просто — контроллер со считывателем часто от БП достаточно удалены, и 5В питания может и не дойти…
0
  • avatar
  • hexus
  • 16 декабря 2012, 13:20
ага… я читал про матрикс 2, но есть одно но… помещение вроде складского и таких считывателей нужно будет поставить уйму...
а не подскажете, можно ли использовать активный считыватель на пассивные метки допустим, в целях экономии? и какие?
0
Ну, так-то по матриксам было сообщение не на конкретный вопрос, но…

Матрикс, наверное, вам вряд ли подойдет. Вам нужен считыватель USB, который можно привязать к какому-нить своему софту или 1c (как правило, они в виртуальный ком-порт выкидывают значения меток в некотором формате).
0
как правило они как виртуальная клавиатура.
В ком порт выкидывают половина обычных считывателей.

Обычно у них дистанция считывания до 10см. те или к компу контрольный считыватель по USB или к контроллерам и потом в сервер обработки статистики — автоматическое отслеживание того где пронесли метку. в твоём случае есть смысл закрепить считыватель на кронштейне чтобы его руками не трогали.
сайт выше писал — выбирайте там много всего и есть СДК. делайте систему пишите потом что получилось.
0
Выложите код пожалуйста
0
Тут всплывает не то, что-бы недостаток, но отсутствие удобной фичи. Незнаю, есть-ли она у других ридеров, но если нет, то её стоило-бы придумать :). Это выход +5В с преобразователя. Дело в том, что ридер питается от 12В и в нем стоит преобразователь на 5В (некое подобие 7805, а может и она). И было-бы круто сделать выход с этого преобразователя для питания, к примеру, простенького контроллера. Чтобы не плодить стабилизаторы. В конце-концов, даже на FT232 такая штука есть :)
Не пробовали задаться вопросом «А зачем?» Это всё накачивает себестоимость. А наличие 1-Wire указывает на то, что датчик может работать где-то на весьма удаленном от контроллера объекте. Где эти самые +5 В наружу были бы балластом.

ps.Да и не факт, что у гипотетического контроллера именно +5В питание будет.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.