Arduino – RFID MIFARE ISO/IEC14443 (на примере щита на базе NFC PN532).

Тема изучения и возможностей применения бесконтактных смарт-карт интересовала меня давно. Интерес был, в том числе, глянуть на содержимое транспортных карт, оценить возможность применения использованных карт «в своих целях» (разработках), а также хранения своих данных на транспортных картах без нарушения их функционала … да мало ли для чего еще. Поэтому, после некоторых поисков по сети, было определено, что подобные карты работают на частоте 13.54MHz, а протокол их работы описан в ISO/IEC14443. Нужен был интерфейс для работы с подобными картами («программатор» или «карт-ридер» - называй как хочешь). Попытаться собрать подобное на базе какого-нибудь контроллера? Инфы по данному направлению мало (как выяснил позже – многие документы конфиденциальные – выдаются лишь юридическим лицам под подписку) – однако существуют готовые микросхемы, реализующие беспроводной интерфейс, но в России они тогда не продавались, а за бугром лишь партиями (с ебэем тогда иметь дело возможности не было). Первая возможность прикоснуться к практическому изучению бесконтактных смарт-карт (БСК) появилась у меня в 2007 (или 2008 – не помню точно) году. Тогда я принял решения купить «программатор» Российского производителя (да собственно вариантов было и немного), обошелся он мне тогда вроде в 4000руб. (даже сейчас это не малые деньги - а тогда …) – но охота пуще неволи. Программатор этот - MiReader-50, в комплекте к нему был диск с различной документацией и исподниками (кустарного в целом характера) – в общем-то, по большому счету, он и не предназначался для розничной продажи как интерфейс (мне было сделано исключение). Довольный как удав сел я тогда за исследование и программирование…
Тут небольшое лирическое отступление …

MiReader-50.

Изучив прилагаемые примеры, написав немного своего кода – проникся и разобрался в архитектуре и принципах работы БСК. Правда до своего проекта так дело и не дошло. В общем то по этой причине и публикаций до сир пор про сей программатор не было. Огорчала также нестабильная работа программатора с некоторыми картами, например с «метрошными» ультралайтами. Причем логика «нестабильности» мне не ясна до сих пор. Понятно, что в зависимости от мощности (конфигурации антенны) интерфейс может стабильно работать с картами на большем или меньшем расстоянии (чем мощнее – тем больше радиус действия). Тут же получается, что на расстоянии в пару сантиметров от антенны карточка читается, в вплотную нет! Положительного результата удавалось добиться, расположив карту поперек или на угол (т.е. минимизируя площадь расположения над поверхностью антенны) – странно. В общем, ограничившись парой самописных демок забросил я этот MiReader-50. Хотя не однократно были мысли позаниматься им еще, да руки не доходили. А тут в свете ардуин и микроконтроллеров, достал MiReader-50 в очередной раз – и взглянул на него и его архитектуру уже чуть более «продвинутым» взглядом.

И так: MiReader-50 в некоторой степени можно назвать «ардуино-подобной» системой: построен на базе контроллера ATmega64; подключается к компу через преобразователь (USB<->COM) FT232; радиочастотная часть (читай щит – в терминах ардуины) построена на микросхеме FM1702NL (клон филипсовской MF RC530). А вот антенна действительно выполнена в конструктиве «щита», ввиду чего была еще сразу мысль ее заменить - дабы улучшить работу ридера (вот только на что? – экспериментировать? – в общем, руки не дошли).

На плате имеется 10-ти контактный разъем ISP для меги (код защищен от считывания). Также присутствует преобразователь уровней (TTL<->RS232 – для варианта подключения на COM-порт) - перемычками можно выбрать к какому интерфейсу подключаем ридер - USB или COM-порт (требуется распаять). Из особенностей еще могу отметить, что радиочастотная микросхема (FM1702) достаточно сильно греется (настораживает, однако, но работает).

Так как в описании данного ридера есть информация как с ним общаться через COM-порт, была мысль подключить его к ардуине (правда зачем? – если с ним и так можно работать например из программы на Delphi) – разве что для мобильности финального приложения. Как подключить? Ридер уже имеет COM-порт – поэтому вроде вопрос должен быть снят. Но, во-первых корпус ридера не предусматривает изящного вывода лишних проводов и разъемов из него (городить кустарщину не хотелось), во-вторых – занимать единственный COM-порт ардуины и терять возможность консольной отладки скетча – тоже не есть гуд. С появлением USBHost-щита появилась возможность (вроде как) подключить его через USB-преобразователь – правда скетч для работы с ридером обрастал бы кодом работы с микросхемой хоста и конвертора … Но до этого руки тоже не дошли. А я решился купить специализированный RFID-щит, о котором я уже как-то упоминал.

NFC Shield.

Чем заинтересовал меня именно этот щит. Конечно, удобно иметь нужный тебе для экспериментов функционал полностью расположенный на щите (как в данном случае), чем городить огород (эскизы которого я набросал чуть выше).

Однако в значительно большей степени меня заинтересовала возможность подержать в руках и потестировать именно ту радиочастотную микросхему, на которой собран данный RFID-щит – NFC PN532. Согласно документации эта микросхема может работать в двух направлениях. Т.е. не только как интерфейс для взаимодействия с RFID-картой, но и эмулировать карту – а это уже более интересный спектр для исследований.

Тема открыта. Надеюсь, найдется время на ее продолжение.
А пока (еще раз) некоторые ссылки:

  • NFC Shield - Здесь был приобретен описанный RFID-щит, там же есть описание и примеры исходников;
  • Пример - чтение содержимого карточек ультралайт (чуть модифицированный "readAll");
  • Документация по чипам PN532; FM1702 и MFRC5x0.

MiGeRA (март 2012)

Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » Arduino - RFID (MIFARE)