Програма мікроконтролера написана в середовищі 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.

Універсальний RFID ключ

Завантажити:

Вихідний код програми мікроконтролера