Начинать разработку копировщика стоит с выяснения, а на что вообще можно скопировать такие метки? Почитав форумы, можно узнать, что наиболее распространёнными болванками для копирования являются T5577, T5557, EM4305.
Теперь нужна схема. Возьмём аналоговую часть такого копировщика у RECTO и подключим её к микроконтроллеру atmega8. Дополним преобразователем уровней для подключения к COM-порту на базе max232 (желающие могут использовать ST232 или ещё что, чтобы подключится по USB, но у меня на компьютере COM-порт есть, как есть и переходник USB-COM, так что у меня такой задачи не стояло).
Получится вот такая схема:
Что она из себя представляет? Сдвоенный эмиттерный повторитель, колебательный контур, детектор и RC-фильтры. За счёт того, что RC-фильтры имеют разные постоянные времени, сравнивая между собой уровни напряжения между каскадами можно выделять изменение сигнала RFID-метки. Данной задачей у нас будет заниматься встроенный в atmega8 компаратор. Генерацию 125 КГц сигнала у нас будет обеспечивать встроенный в atmega8 ШИМ-контроллер.
Комбинация RFID-метка – считыватель образуют трансформатор, где метка является вторичной обмоткой. Передача информации меткой производится путём изменения нагрузки вторичной обмотки. В результате в катушке считывателя (первичной обмотке) изменяется ток. Выделением этих импульсов тока и занимается приведённая выше аналоговая часть схемы. Колебательный контур нужно настроить на максимальное напряжение в контрольной точке, например, сматывая/наматывая витки катушки. Правда, говорят, лучше всё же напряжение немного меньше максимума — стабильнее работает. У меня в контрольной точке около 40 В.
Копируемая метка использует кодирование типа манчестер. Для того чтобы расшифровать данный код, достаточно по любому изменению фронта сигнала пропускать три четверти периода слота бита и по следующему за ним перепаду сигнала фиксировать значение бита, которое будет соответствовать значению сигнала после перепада. При декодировании стоит задать окно, в которое должен произойти перепад сигнала – не более половины периода слота бита.
Метод расшифровки манчестерского кодирования и код для этого я взял у Shads. Можно, конечно, было написать свой собственный, но я торопился запустить копировщик — хотелось убедиться, что схема рабочая и приём меток производится. Так этот фрагмент и остался в коде копировщика. Также оказалось, что у меня компаратор настроен инверсно, чем нужно коду декодирования. Изменил в коде. Итак, мы получили последовательности нулей и единиц. Как из них получить код карты?
А очень просто. Примем, что номер карты по нибблам имеет вид AB CD EF GH IJ. Карта выдаёт вот что:
1) Девять единиц в начале;
2) Ниббл A;
3) Чётность ниббла A (1 бит);
4) Ниббл B;
5) Чётность ниббла B (1 бит);
…
16) Ниббл I;
17) Чётность ниббла I (1 бит);
18) Ниббл J;
19) Чётность ниббла J (1 бит);
20) Ниббл чётности колонок для нибблов A B C D E F G H I J;
21) Бит 0.
Считываем все 64 бита, расшифровываем и получаем 40 бит кода карты. Логично, что если самому выдать такой код, замыкая катушку карты приложенной к считывателю, мы получим эмулятор карты. Но сейчас нас интересует не он.
Карту мы читать научились, а вот как передать данные карте? Для этого нужно просто включать или выключать частоту 125 КГц в соответствии с протоколом обмена с картой. На время “молчания” считывателя карта питается запасённой энергией.
Болванки T5557/T5577 полностью совместимы между собой по протоколам записи, однако, имеют немного разные минимальные и максимальные времена импульсов (к счастью, времена T5557 перекрываются с T5577). У EM4305 протокол записи иной.
Чтобы записать T5557 я воспользовался кодом BolshoyK. В таблице ниже указаны параметры сигналов для брелока T5557.
Запись начинается с сигнала StartGape – требуется отключить сигнал 125 КГц примерно на 300 мкс. Это сигнал карте, что сейчас ей начнут передавать данные. Дальше следует передать болванке информацию. Кодирование передаваемых данных – тот же манчестер.
Болванки T5557/T5577 и EM4305 многофункциональные и умеют разные виды модуляций, поддерживают пароли и ещё много чего. В каждой болванке на борту имеется набор блоков по 32 бита. Назначение этих блоков разное. В некоторых – выдаваемый код ключа (он занимает два блока). В других – конфигурация. В третьих – идентификатор производителя. Мы будем использовать ограниченный функционал, поэтому желающие разобраться, что значат все эти биты, могут заглянуть в документацию к болванкам (я приложил её к архиву).
Блоки собраны в две страницы (0 и 1).
В нулевой странице есть блок конфигурации с индексом 0. Его мы и будем задавать. Для T5557/T5577 у нас будут следующие конфигурационные байты: 0x00,0x14,0x80,0x40 в соответствии с таблицей из документации (красным я отметил выбранные единичными битами режимы):
Таким образом, у нас выбрано: частота передачи данных RF/64 (125 КГц/64), кодирование типа манчестер, выдача блоков до второго (в блоках 1 и 2 у нас будет располагаться код, выдаваемый картой). Перед записью следует отправить код операции (2 бита opcode) и один бит защёлки (lockbit). Коды операции 10b и 11b предшествуют записи данных для страниц 0 и 1 (младший бит задаёт номер страницы, старший — код записи страницы). У нас выдаётся 10b для кода операции (вся работа идёт с нулевой страницей) и 0b для бита защёлки. После передачи всех этих данных необходимо передать трёхбитный адрес записываемой страницы. Все передачи данных для T5557/T5577 ведутся от старшего бита к младшему.
Задав код карты в блоках 1 и 2 и конфигурацию в блоке 0 можно получить дубликат RFID-метки. Как видите, всё просто.
Следующий тип болванок – это EM4305. Вот разбираться с записью этой болванки мне пришлось самому. Она также состоит из блоков по 32 бита, но назначение их иное.
Кодирование передаваемых карте данных – по перепадам за интервал времени. Если перепад за интервал времени был, то это ноль, а если не было — единица. Конфигурационное слово хранится в 4 байте и для себя я определил его так: 0x5F,0x80,0x01,0x00 (кодирование манчестер, RF/64, выдача слова 6). В слова 5 и 6 я записываю код карты (те самые 64 бита, что выдаёт карта). EM4305 требует чтобы передача велась от младшего бита к старшему. Карта понимает, что с ней начинают обмен после выдачи ей комбинации импульсов:
- Отключаем поле на 48 мкс.
- Включаем поле на 96 мкс.
- Выключаем поле на 320 мкс.
- Включаем поле на 136 мкс.
- Отключаем поле до следующей команды.
Команда на запись блока карте передаётся так:
- Шлём вышеуказанную последовательность импульсов.
- Шлём 0b.
- Передаём CC0-CC1 и их чётность P. (0101b для записи, см. таблицы ниже).
- Передаём адрес блока (см. таблицу), два дополняющих нуля и чётность адреса.
- Передаём данные блока (32 бита).
Формат команды
Коды команд
Формат адреса блока
Таким образом задаётся конфигурация болванки EM4305 и её код.
Собственно, ничего большего простому копировщику и не требуется.
Я сделал несколько вариантов копировщика с разными дисплеями. Например, вот копировщик с дисплеем 1602:

А вот видео работы копировщика на дисплее LPH9157-02:
А вот причина, по которой я заинтересовался копировщиками таких ключей — нужно было сделать много копий ключа от домофона (ждать посылки из Китая при этом тоже было лень), но ценник вот какой:

В архиве все схемы, печатки, программы и документация на болванки. Есть версия для Arduino Nano (её нужно прошивать отдельно через программы для заливки сторонних прошивок).
Желающие могут открыть документацию на все эти болванки и реализовать поддержку паролей и иные режимы работы карт. Мне лично всё это было ненужно.
Отдельное большущее спасибо RECTO, BolshoyK и Shads — без вас я бы развлекался бы с разработкой довольно долго!
Спасибо за внимание.
P.S. Я не являюсь профессионалом в копировании ключей и в болванках, поэтому вполне мог в чём-то ошибиться. Однако, копировщик работает, и в нём ошибок пока никто не нашёл.
Комментарии (15)
relia
12.06.2017 17:29В Киеве, к примеру, очень популярны «таблетки» i-button от Texas Instruments. Оригинальный программатор для них на Али стоит $35, плюс чистые «таблетки»с минимум ОЗУ по рублю за пучок… Очень хороший бизнесу этих копировщиков, однако.
da-nie
12.06.2017 17:46А кстати, у RECTO сделан копировщик i-button, только не знаю, поддерживает он указанные вами или нет.
leocat33
12.06.2017 20:29Фронт сигнала нонче уже называется перепадом?
da-nie
12.06.2017 20:32Это без разницы. Что лучше звучит «При декодировании стоит задать окно, в которое должен произойти перепад сигнала» или «При декодировании стоит задать окно, в которое должен произойти фронт сигнала»? Вторая фраза вообще нуждается в полном перестроении под «фронт». Поэтому я решил написать именно «перепад».
smilyfox
13.06.2017 06:13+1Фронт сигнала — это и есть переход между уровнями, передний или задний. Вполне устоявшееся выражение в учебниках по электротехнике. По мне так лучше звучит "фронт".
da-nie
13.06.2017 06:15Да знаю я это. :) У меня специальность с электроникой связана. Фронт — да, устоящееся — никто не спорит. Но с «фронт» фразу нужно подбирать, чтобы коряво не звучало.
ITMatika
13.06.2017 10:39Интересная тема, спасибо.
1) Можете прояснить, для чего в схеме COM-порт, и какой софт запускается на ПК для взаимодействия с этой схемой?
2) Можете посоветовать похожие проекты с более простой аналоговой частью и управлением, вынесенным на ПК?da-nie
13.06.2017 10:431) COM-порт там для работы с программой на компьютере (она лежит в приложенном архиве — называется RFIDUnitControl). Нужна она тем, кто будет записывать ключи известными кодами — там их можно ввести.
2) Честно говоря, я сомневаюсь, что можно ещё больше упростить аналоговую часть. Я видел гораздо более навороченные (с большей дальностью считывания карты), но более простых не встречал. А управление от ПК, возможно, сделано в каком-либо проекте у RECTO, но я не уверен.
Psychosynthesis
13.06.2017 12:42А про новые метки EPC Gen2 можете что-нибудь рассказать? Мне, похоже, предстоит для них ридер делать, но я чем больше англоязычный стандарт на них читаю, тем больше путаюсь…
Taciturn
Две совершенно одинаковые неподписанные кнопки это довольно опасно. Может стоило ту что на запись сделать хотя бы красной?
da-nie
Ну, я не стал заморачиваться и взял те, что были под рукой. :) А так, конечно, стоит сделать разных цветов или подписать. :)