Rfid-це просто
Після декількох років роботи по RFID тематиці і розробки різноманітних зчитувачів для моделей транспондерів популярних стандартів типу Mifare, EMMARINE, TIRIS ... мене часто почав спантеличувати таке питання - буквально в останній рік широку популярність придбали різного роду емулятори під теги популярних протоколів і різноманітні копіювальники ключів / брелків .
З огляду на велику колічеcтво доступних у продажу спец мікросхем популярних протоколів RFID і дешевих рідерів, широкого поширення обладнання типу цифрових осцилографом, сніфера і спектроаналізаторів, дане питання стало для багатьох розробників більш актуальним. Тоді я зважився зробити для одного з проектів протокол для обміну відрізняється від описаних вище стандартів.
Безумовно дана ідея не вирішує глобальних проблем захищеності нової системи і може бути проаналізована іншими розробниками при наявності обладнання, проте суть в тому, що все це не збігається з існуючими стандартами та все залізяки копіювальників не дозволять по-швидкому скопіювати і відтворити подібний алгоритм. Зрозуміло подібна система не підноситься тут не як повне рішення проблем безпеки, а як досвід адаптації RFID під закриту систему. Хорошим плюсом в питанні безпеки серед інших подібних бездротових систем є сама технологія низькочастотних RFID - вона не дозволяє вважати теги на великій відстані. Пасивні теги досить малопотужні і потребують для свого харчування в досить потужному генераторі зчитувача, особливості поширення радіохвиль на даних частотах також обмежують межі роботи даної системи. Реальна дальність зчитування транспондерів рідко перевищує 20см для 125 КГц стандартів типу EmMarine, скажімо стандарту EM4001, для інших протоколів типу Mifare (13,56 МГц) може бути побільше (1,5 метра для iso15693). Можна домогтися більшої відстані зчитування для низькочастотних рідерів якщо збільшити розміри котушки і напруга живлення, відповідно і потужність рідера. Однак такі системи мають громіздкі і як правило їх важко зробити портативними. Як правило, такі системи реалізуються тільки стаціонарно - скажімо для автомобілів.
Отже, тепер власне по архітектурі нашої RFID системи. Для експериментів був обраний контролер atmel atmega8. Для цілей виготовлення транспондера це здається безсумнівним надмірністю. Однак в даному випадку вирішувалася першорядне завдання розробки нового інтерфейсу на готової отладочной хустці c atmega з подальшим портированием даного коду на більш дешеві контролери типу tiny13.
Для транспондера алгоритм роботи був побудований на основі режиму ШІМ генерації за допомогою таймера T1 в режимі CTC з перериванням і скиданням за випадковим збігом з OCR1. Дані для передачі транспондера зчитуються з EEPROM при включенні харчування контролера. Всього транспондер передає 10 байт. Вміст EEPROM транспондера можна бачити на малюнку 1. Перший байт 0xE7 є обов'язковим заголовком пакету, так як його наявність перевіряється в першу чергу при розборі пакету зчитувачем. Перші 8 байт є вмістом пакета транспондера, останні 2 байта містять контрольну суму CRC16 перших восьми байт пакету. Для прикладу в нашому транспондері були записані такі дані - пакет 0xE7,0x05,0xE8,0x93,0x43,0x7F, 0x20,0xFF і відповідно контрольну суму 0xF5 0xA8. Для виготовлення власного унікального транспондера потрібно крім першого байта 0xE7 записати сім наступних байт в EEPROM, після чого розрахувати контрольну суму для перших восьми байт. Після цього записати в EEPROM два байта CRC16 в кінці пакета. Перший байт залишаємо без змін - 0xE7. При включенні транспондера дані цих байт розбиваються по бітам і кодуються відповідною довжиною імпульсу у відповідності зі значенням регістра OCR. Для передачі використовуються 2 частоти 2кГц і 5кГц для передачі логічних "0" і "1". Крім того дані поділяються імпульсами синхронізації - стартові мітки пакетів.
Рис.1 Вміст пакету транспондера.
Рис.2 Дамп передачі транспондера на екрані віртуального осцилографи.
Схему транспондера можна побачити на малюнку 3. Частота задає генератора 8МГц. Харчування контролера +5. Можна використовувати контролер mega8 з маркуванням "L" тоді харчування можна здійснювати від літієвої батарейки 3в (параметри для такого чіпа + 2,7 .... +3,5). Замість цього транзистора можна використовувати будь-який інший малопотужний NPN транзистор. Котушка транспондера була намотана на оправці діаметром 50мм проводом 0,22 мм і налічує 50 витків. На даний момент транспондер зроблений активним - із зовнішнім живленням. На наступному етапі планується зробити пасивний варіант транспондера, що досить просто - зробити розв'язку для харчування від даної котушки, додати діоди моста випрямляча і стабілізатор.
Рис.3 Схема транспондера.
Тепер поговоримо про схему зчитувача для даного транспондера. Схема була адаптована на основі раннє використаного зчитувача для карт EMMARINE. Частина схеми з генератором на 74hc4060 можна на даному етапі сміливо видаляти, так як поки ми використовуємо активну мітку.
Однак ця частина схеми нам знадобиться надалі, коли ми будемо робити пасивну мітку і нам буде потрібно отримати харчування від зчитувача. В іншому схема не має суттєвих відмінностей від схеми зчитувача для EMMARINE: пасивний піковий детектор - фільтр - підсилювач - компаратор. Схема має максимально можливу простоту і дозволяє зчитувати дані транспондера на відстані 10-12см при добре налаштованих контурах.
Можна ще далі спрощувати схему залишивши тільки детектор і фільтр, поставити один транзистор на виході який буде грати роль компаратора, але я не став так робити. На виході ми отримуємо двійковий сигнал прямокутної форми відповідно до кодованими длительностями імпульсів передаються транспондером. Допустимі відхилення номіналів елементів при якому схема працездатна 5-10%. Харчування контролера і операціонніка +5. Частота кварцу задає контролера 12МГц. Вихід компаратора на LM358 підключений до ніжки зовнішнього переривання контролера INT0. У програмі контролера налаштований виклик переривання по наростаючому фронті на ніжці зовнішнього переривання INT0.
У обробнику переривання відбувається перевірка синхронізуючих імпульсів а потім перевірка заголовка пакета і запис вмісту в буфер контролера. Дані лічених пакетів передаються по інтерфейсу RS232 на ПК. Для настройки терміналкі вказуємо наступні параметри: швидкість 57.6Kb / s, 8 біт даних, 1стоп біт, без контролю парності. При прийомі пакету контролер розраховує контрольну суму прийнятих байт і передає дані в терміналку (пакет і CRC). У разі збігу контрольних сум розрахованою контролером і прийнятої в пакеті виводиться сигнал на ніжку PORTB.0 (14) контролера (LED1 на схемі). Можна підключити в цю точку пискавку з вбудованим генератором або світлодіод через опір. При зчитуванні коректного ключа контролер забороняє зовнішні переривання і робить затримку 1с перед наступним зчитуванням.
Передбачено також режим роботи даного зчитувача в якості основи RFID замку. Для цього необхідно в EEPROM контролера зчитувача записати повністю байти дампа транспондера - 10 байт. Дані пишуться в EEPROM зчитувача точно також, як в EEPROM транспондера. В даному випадку при зчитуванні чергового транспондера і збігу його з записаним в EEPROM зчитувача виводиться сигнал на ніжку PORTB.1 (15) контролера (LED2 на схемі). В дану точку можна підключити світлодіод через опір або вихідний ключ (транзистор) на реле виконавчого пристрою. Тепер ми отримали RFID замок під конкретний ключ і звичайний зчитувач в одному флаконі.
Отже, підіб'ємо проміжні підсумки. Виготовлений власний рідер і транспондер під даний зчитувач. Ми захистили своє обладнання від сторонніх пристроїв працюють з популярними протоколами RFID. Наступним кроком буде виготовлення пасивної мітки для нашого зчитувача як роблять відомі виробники промислових транспондерів і портирование коду обладнання на більш дешеві моделі контролерів. В архіві до статті додаю прошивки для транспондера і зчитувача.