Часть 1 - Технология RFID, передача данных, RFID метки (ключи)
Часть 2 - Схема и печатная плата
Программа микроконтроллера написана в среде Arduino. В программе реализуется процесс передачи данных, простое меню управления и выбора режима работы, а также простой способ индикации текущего серийного номера ключа с помощью светодиодов установленных на плате.
Самой трудной задачей при написании программы было вычисление четности и контрольной суммы данных «на лету». Контрольный бит передается в конце каждого полубайта (4 бита) – это проверка четности – означает, что передатчик добавляет 1 к каждому полубайту, если количество единиц в нем нечетное количество. К примеру, возьмем последовательность данных, которая будет передана: 2C 0077 55A2 (HEX). К первому полубайту «2» (0010) будет добавлен контрольный бит равный 1, т.к. система проверки четности определит, что количество единиц нечетное. К следующему полубайту «C» (1100) будет добавлен контрольный бит 0, т.к. количество единиц четное.
BIN
|
HEX
|
00101
|
2
|
11000
|
C
|
00000
|
0
|
00000
|
0
|
01111
|
7
|
01111
|
7
|
01010
|
5
|
01010
|
5
|
10100
|
A
|
00101
|
2
|
Контрольная
сумма 0110 |
Контрольная сумма представляет собой проверку четности в вертикальных столбцах. Таким образом осуществляется горизонтальная и вертикальная проверка каждого переданного бита.
Чтобы данные были корректно приняты считывающим устройством, ключ должен передавать их в реальном времени (многие считывающие устройства требуют нескольких последовательных чтений), а введение подпрограмм и алгоритмов подсчета может вызвать временные задержки, что отразится на правильности данных. Задача была решена при помощи заполнения массива битами, которые должны будут передаваться, когда ключ находится в режиме передачи. Соответственно, расчеты проводятся лишь один раз.
При подаче питания универсальный RFID ключ переходит в режим ожидания нажатия кнопки «Mode» (SW10). Текущий режим индицируется 4 светодиодами, установленными на плате. Каждое нажатие на кнопку переключает режим, подтверждение выбора режима осуществляется кнопкой «Enter» (SW15).
- Режим 1 – перевод ключа в режим пониженного энергопотребления «Sleep». При выборе этого режима микроконтроллер переходит в режим с малым потреблением, кнопка «Reset» (Сброс) выводит микроконтроллер из этого режима.
- Режим 2 – Ввод идентификатора RFID системы. После нажатия кнопки «Enter» наш универсальный ключ ожидает ввода двух цифр в шестнадцатеричном формате. В нашем случае это значение 2C, которое
- используется по умолчанию, поэтому вводить его сразу нет необходимости.
- Режим 3 – Ввод в десятичном формате идентификационного номера карты, которую будет эмулировать наш ключ. После выбора это режима ключ ожидает ввода 8 цифр в десятичном формате, в нашем случае это 07820706 – длинное число которое напечатано на обратной стороне карты (см. часть 1).
- Режим 4 – индикация текущего идентификационного номера карты и идентификатора RFID системы (2C). После подтверждения режима пользователь получает информацию в шестнадцатеричном формате о текущих идентификаторах при помощи 4 светодиодов.
- Режим 5 – Эмуляция ключа. Режим для эмуляции карты с заданными параметрами, все четыре светодиода выключены. Выход из этого режима осуществляется по нажатию кнопки сброса.
Все данные вводятся с помощью клавиатуры. Для работы с клавиатурой использовалась готовая библиотека (в среде Aduino).
После программирования микроконтроллера проводились эксперименты со стандартным считывающим устройством RFID.
Загрузки
Исходный код программы микроконтроллера – скачать