Копировщик домофонных ключей на pic12f675. Как сделать копию ключа для домофона в домашних условиях

Домофонное оборудование в новостройках сейчас является обязательным условием, да и в старых домах его . Это значительно повышает безопасность жильцов и способствует поддержанию порядка в подъезде. Но что делать, если ключ к домофону утерян или сломался? Раньше компании установщики были монополистами и поднимали цену на резервные устройства, сейчас появилось множество фирм и мастерских которые за сравнительно небольшую сумму могут перезаписать ключ от домофона. Однако те же действия можно выполнить и самостоятельно.

Существует два основных способа получения нового ключа, в зависимости от типа используемых устройств – это и внесение кода в домофонную систему.

Touch memory

Touch memory – энергонезависимый идентификатор в составе которого имеется запоминающее устройство, часы реального времени и аккумуляторная батарея. Считывание или запись информации производится простым касанием к корпусу устройства. Существует множество разновидностей Touch memory. Различаются не только , но и модели по объему памяти. Совместимость с установленным оборудованием необходимо учитывать при покупке заготовок для записи кодов.

Модели Touch memory

  1. Модель «Dallas» — наиболее распространенная модель. На пластмассовом держателе может быть нанесена эмблеме или надпись компании производителя домофонного оборудования: Sean, Eltis, Vizit или эмблема Dallas. Для копирования кода используют заготовки ТМ2004.

    Некоторые домофонных систем Vizit не поддерживают работу с заготовками ТМ2004, в этом случае можно воспользоваться более дорогой универсальной моделью ТМ08.

  2. Модель «Метаком». Отечественного производства, являются полным аналогом модели «Dallas». Полностью совпадают по электрическим характеристикам. Должны иметь маркировку, как на пластике держателе, так и на самом металлическом корпусе устройства – надпись Метаком или МТ. Подходят заготовки ТМ2004 и ТМ08.
  3. Модель «Cyfral». Имеют аналогичную надпись на держателе. Для старых моделей подходят заготовки ТМ2004, для новых ТМ7. Резисторная модель «Цифрал». Устаревшее оборудование, которое довольно редко встречается. Такие устройства не имеют чипа с записанным кодом. Они используют резистор с номиналом соответствующим конкретному домофону. Отличить такое устройство можно по углублению, расположенному в центральной части корпуса. Копирование производится путем припаивания к любой из заготовок Touch memory соответствующего резистора. Его емкость определяется омметром по исправному ключу.

Бесконтактный RFID

В последнее время широкое распространение получают системы бесконтактного считывания, где используются ключи RFID или карты типа проксимити. Внешне они напоминают обычный пластиковый брелок или банковскую карту. Устройства не имеют собственного источника питания. Передача кода на устройство приема осуществляется после получения радиосигнала, энергия волнового излучения и выступает в качестве энергоснабжения. Поэтому активация происходит только на расстоянии 10-15 см от замка. В остальном устройство и действие метки не отличается от аналогичного Touch memory.

Сами ключи имеют вид брелоков размерами не более пятирублевой монеты и толщиной 5 мм. Бесконтактные карты имеют формат аналогичный банковской и несколько большую толщину – до 3 мм. Взаимозаменяемость карт и брелоков, несмотря на одинаковую технологию функционирования, не всегда осуществима, так как возможно нарушение интенсивности передаваемого сигнала. На данный момент для копирования RFID ключей различных производителей подходит практически любая заготовка: HID Prox II, EM-Marin, Indala и т.п.

Запись на заготовку

на носители осуществляется при помощи специальных устройств, программаторов. К примеру, устройство Keymaster PRO 4 RF, является универсальным программатором, как для стандарта Touch memory, так и для бесконтактных, радиочастотных RFID устройств. Позволяет копировать ключи на заготовки:
  • RW/ТМ 2004;
  • КС 1, 3;
  • ТМ – 01, 07, 08;
  • RW 1990, 2007, 125RF.

Поддерживает стандарты наиболее распространенных производителей:

Для Touch memory:

  • Cyfral;
    • Dallas;
  • Для RFID:
    • HID Prox II;
    • EM-Marin;
    • Indala и некоторые другие.

Запись заготовки производится в одно касание. Алгоритм копирования ключа следующий:

  1. К считывателю подносится ключ, который необходимо скопировать.
  2. Устройство самостоятельно определяет тип, производителя и модель рекомендуемой заготовки.
  3. К считывателю подносится заготовка. И нажимается кнопка на запись.
  4. Производится запись в память ключа.

Кроме того, устройство может производить запись без ключа исходника, если известен код, записанный в память. Дубликатор подключается к ПК через USB порт и имеет собственное ПО, которое сохраняет в памяти 500 последних записей, и ведет распределение записей Touch memory и RFID. Такое не по карману большинству простых пользователей, но существуют и более простые модели с ограниченным функционалом:

  • KeyMaster 3;
  • KeyMaster 3 RF – поддерживает бесконтактные метки;
  • TMD-5 RFID;
  • TM-Pro.

Программирование домофонов

Внесение информации о новых ключах можно осуществлять и непосредственно на домофонное оборудование. Естественно, у разных производителей разработаны различные инструкции по программированию домофонов.

Занесение информации в память домофона возможно, только если монтажники не произвели изменение заводского кода доступа в устройство. Обычно, замену пароля доступа монтажники производят крайне редко, а большинство паролей по умолчанию – 1234.

Производитель Raimann

  • Для входа в настройки — нажимается кнопка считывателя;
  • Пароль входа от 9 до 4, после (подождать 10-15 сек) набрать от 1 до 6;
  • На мониторе появляется символ «Р»;
  • Пункты меню от 2 до 8. Пункт, отвечающий за введение новых ключей №2.

Производитель VIZIT

  • Вход в настройки – на клавиатуре набирается #99;
  • После звукового сигнала, вводится пароль 1234, затем снова сигнал;
  • Программирование и прописывание новых ключей – пункт №3;
  • Вводится номер квартиры, прикладывается ключ и нажимается #;
  • Затем нажимается * для перехода в рабочий режим.

Если кнопок * и # на клавиатуре нет то они заменяются кнопками С и К, соответственно.

Производитель Eltis

  • Для входа в меню нажимается кнопка В, держится нажатой 7 сек.;
  • Системный пароль 1234;
  • После того как на экране загрузится меню, выбираем пункт «Key master»;
  • Набираем номер квартиры и нажимаем на кнопку В;
  • После появления на экране команды LF нужно прислонить ключ к считывателю;
  • Запись закончена если на экране появится надпись ADD (если до этого ключей для данной квартиры в памяти не имелось) или номер квартиры.

Каждый ключ для домофона имеет свой номер - именно этот номер и служит идентификатором ключа. Именно по номеру ключа домофон решает - свой или чужой. Поэтому алгоритм копирования такой: сначала нужно узнать номер разрешённого ключа, а затем присвоить этот номер другому ключу - клону. Для домофона нет разницы, был приложен оригинальный ключ или его копия. Сверив номер со своей базой данных разрешённых номеров, он откроет дверь.

Ключи для домофона, которые мы будем подключать к Arduino (их иногда называют iButton или Touch Memory ), считываются и записываются по однопроводному интерфейсу 1-wire . Поэтому схема подключения очень проста. Нам нужны лишь пара проводов и подтягивающий резистор номиналом 2,2 кОм. Схема соединений показана на рисунке.

Собранная схема может выглядеть примерно так:


2 Считывание идентификатора ключа iButton с помощью Arduino

Для работы с интерфейсом 1-wire существуют готовые библиотеки для Ардуино. Можно воспользоваться, например, этой . Скачиваем архив и распаковываем в папку /libraries/ , расположенную в каталоге Arduino IDE. Теперь мы можем очень просто работать с данным протоколом.

Загрузим в Ардуино стандартным способом этот скетч:

Скетч чтения ключа iButton с помощью Arduino (разворачивается) #include OneWire iButton(10); // создаём объект 1-wire на 10 выводе void setup (void) { Serial.begin(9600); } void loop(void) { delay(1000); // задержка 1 сек byte addr; // массив для хранения данных ключа if (!iButton.search(addr)) { // если ключ не приложен Serial.println("No key connected..."); // сообщаем об этом return; // и прерываем программу } Serial.print("Key: "); for(int i=0; i }

Данный скетч показывает номер ключа для домофона, который подключён к схеме. Это то, что нам и нужно сейчас: мы должны узнать номер ключа, копию которого хотим сделать. Подключим Ардуино к компьютеру. Запустим монитор последовательного порта: Инструменты Монитор последовательного порта (или сочетание клавиш Ctrl+Shift+M).

Теперь подключим ключ к схеме. Монитор порта покажет номер ключа. Запомним этот номер.


А вот какой обмен происходит на однопроводной линии при чтении идентификатора ключа (подробнее - далее):

На рисунке, конечно, не видны все детали реализации. Поэтому в конце статьи я прикладываю временную диаграмму в формате *.logicdata , снятую с помощью логического анализатора и программы Saleae Logic Analyzer и открываемую ей же. Программа бесплатная и скачивается с официального сайта Saleae . Чтобы открыть файл *.logicdata нужно запустить программу, нажать сочетание Ctrl+O или в меню Options (расположено вверху справа) выбрать пункт Open capture / setup .

3 Запись идентификатора ключа Dallas с помощью Arduino

Теперь напишем скетч для записи данных в память ключа iButton.

Скетч записи ключа iButton с помощью Arduino (разворачивается) #include // подключаем библиотеку const int pin = 10; // объявляем номер пина OneWire iButton(pin); // объявляем объект OneWire на 10-ом пине // номер ключа, который мы хотим записать в iButton: byte key_to_write = { 0x01, 0xF6, 0x75, 0xD7, 0x0F, 0x00, 0x00, 0x9A }; void setup(void) { Serial.begin(9600); pinMode(pin, OUTPUT); } void loop(void) { delay(1000); // задержка на 1 сек iButton.reset(); // сброс устройства 1-wire delay(50); iButton.write(0x33); // отправляем команду "чтение" byte data; // массив для хранения данных ключа iButton.read_bytes(data, 8); // считываем данные приложенного ключа, 8х8=64 бита if (OneWire::crc8(data, 7) != data) { // проверяем контрольную сумму приложенного ключа Serial.println("CRC error!"); // если CRC не верна, сообщаем об этом return; // и прерываем программу } if (data & data & data & data & data & data & data & data == 0xFF) { return; // если ключ не приложен к считывателю, прерываем программу и ждём, пока будет приложен } Serial.print("Start programming..."); // начало процесса записи данных в ключ for (int i = 0; i } // Инициализация записи данных в ключ-таблетку iButton: void send_programming_impulse() { digitalWrite(pin, HIGH); delay(60); digitalWrite(pin, LOW); delay(5); digitalWrite(pin, HIGH); delay(50); }

Не забудьте задать номер своего оригинального ключа в массиве key_to_write , который мы узнали ранее.

Загрузим этот скетч в Arduino. Откроем монитор последовательного порта (Ctrl+Shift+M). Подключим к схеме ключ, который будет клоном оригинального ключа. О результате программирования монитор последовательного порта выведет соответствующее сообщение.

Если данный скетч не сработал, попробуйте заменить код после Serial.print("Start programming...") и до конца функции loop() на следующий:

Дополнительный скетч записи ключа iButton с помощью Arduino (разворачивается) delay (200); iButton.skip(); iButton.reset(); iButton.write(0x33); // чтение текущего номера ключа Serial.print("ID before write:"); for (byte i=0; i<8; i++){ Serial.print(" "); Serial.print(iButton.read(), HEX); } Serial.print("\n"); iButton.skip(); iButton.reset(); iButton.write(0xD1); // команда разрешения записи digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); // выведем ключ, который собираемся записать: Serial.print("Writing iButton ID: "); for (byte i=0; i<8; i++) { Serial.print(key_to_write[i], HEX); Serial.print(" "); } Serial.print("\n"); iButton.skip(); iButton.reset(); iButton.write(0xD5); // команда записи for (byte i=0; i<8; i++) { writeByte(key_to_write[i]); Serial.print("*"); } Serial.print("\n"); iButton.reset(); iButton.write(0xD1); // команда выхода из режима записи digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); Serial.println("Success!"); delay(10000);

Здесь функция writeByte() будет следующей:

int writeByte(byte data) { int data_bit; for(data_bit=0; data_bit<8; data_bit++) { if (data & 1) { digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } else { digitalWrite(pin, LOW); pinMode(pin, OUTPUT); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } data = data >> 1; } return 0; }

Временную диаграмму работы скетча записи идентификатора ключа показывать бессмысленно, т.к. она длинная и не поместится на рисунке. Однако файл *.logicdata для программы логического анализатора прикладываю в конце статьи.

Ключи для домофона бывают разных типов. Данный код подойдёт не для всех ключей, а только для RW1990 или RW1990.2. Программирование ключей других типов может привести к выходу ключей из строя!

При желании можно переписать программу для ключа другого типа. Для этого воспользуйтесь техническим описанием Вашего типа ключа (datasheet) и изменить скетч в соответствии с описанием. Скачать datasheet для ключей iButton можно в приложении к статье.

Кстати, некоторые современные домофоны читают не только идентификатор ключа, но и другую информацию, записанную на оригинальном ключе. Поэтому сделать клон, скопировав только номер, не получится. Нужно полностью копировать данные ключа.

4 Описание однопроводного интерфейса 1-Wire

Давайте чуть глубже познакомимся с интерфейсом One-wire. По организации он похож на интерфейс I2C: в нём также должно присутствовать ведущее устройство (master), которое инициирует обмен, а также одно или несколько ведомых устройств (slave). Все устройства подключены к одной общей шине. Устройства iButton - всегда ведомые. В качестве мастера чаще всего выступает микроконтроллер или ПК. Скорость передачи данных составляет 16,3 кбит/сек. Шина в состоянии ожидания находится в логической "1" (HIGH). В данном протоколе предусмотрены всего 5 типов сигналов:

  • импульс сброса (master)
  • импульс присутствия (slave)
  • запись бита "0" (master)
  • запись бита "1" (master)
  • чтение бита (master)
За исключением импульса присутствия все остальные генерирует мастер. Обмен всегда происходит по схеме: 1) Инициализация 2) Команды работы с ПЗУ 3) Команды работы с ППЗУ 4) Передача данных.

1) Инициализация

Инициализация заключается в том, что ведущий выставляет условие сброса RESET (на время от 480 мкс или более опускает линию в "0", а затем отпускает её, и за счёт подтягивающего резистора линия поднимается в состояние "1"), а ведомый не позднее чем через 60 мкс после этого должен подтвердить присутствие, также опустив линию в "0" на 60…240 мкс и затем освободив её:


2) Команды работы с ПЗУ

Если после импульса инициализации не пришёл сигнал подтверждения, мастер повторяет опрос шины. Если сигнал подтверждения пришёл, то мастер понимает, что на шине есть устройство, которое готово к обмену, и посылает ему одну из четырёх 8-битных команд работы с ПЗУ:

(*) Кстати, семейств устройств iButton существует довольно много, некоторые из них перечислены в таблице ниже.

Коды семейств устройств типа iButton (разворачивается)
Код семейства Устройства iButton Описание
0x01 DS1990A, DS1990R, DS2401, DS2411 Уникальный серийный номер-ключ
0x02 DS1991 Мультиключ, 1152-битная защищённая EEPROM
0x04 DS1994, DS2404 4 кб NV RAM + часы, таймер и будильник
0x05 DS2405 Одиночный адресуемый ключ
0x06 DS1993 4 кб NV RAM
0x08 DS1992 1 кб NV RAM
0x09 DS1982, DS2502 1 кб PROM
0x0A DS1995 16 кб NV RAM
0x0B DS1985, DS2505 16 кб EEPROM
0x0C DS1996 64 кб NV RAM
0x0F DS1986, DS2506 64 кб EEPROM
0x10 DS1920, DS1820, DS18S20, DS18B20 Датчик температуры
0x12 DS2406, DS2407 1 кб EEPROM + двухканальный адресуемый ключ
0x14 DS1971, DS2430A 256 бит EEPROM и 64 бита PROM
0x1A DS1963L 4 кб NV RAM + счётчик циклов записи
0x1C DS28E04-100 4 кб EEPROM + двухканальный адресуемый ключ
0x1D DS2423 4 кб NV RAM + внешний счётчик
0x1F DS2409 Двухканальный адресуемый ключ с возможностью коммутации на возвратную шину
0x20 DS2450 Четырёхканальный АЦП
0x21 DS1921G, DS1921H, DS1921Z Термохронный датчик с функцией сбора данных
0x23 DS1973, DS2433 4 кб EEPROM
0x24 DS1904, DS2415 Часы реального времени
0x26 DS2438 Датчик температуры, АЦП
0x27 DS2417 Часы реального времени с прерыванием
0x29 DS2408 Двунаправленный 8-разрядный порт ввода/вывода
0x2C DS2890 Одноканальный цифровой потенциометр
0x2D DS1972, DS2431 1 кб EEPROM
0x30 DS2760 Датчик температуры, датчик тока, АЦП
0x37 DS1977 32 кб защищённой паролем EEPROM
0x3A DS2413 Двухканальный адресуемый коммутатор
0x41 DS1922L, DS1922T, DS1923, DS2422 Термохронные и гигрохронные датчики высокого разрешения с функцией сбора данных
0x42 DS28EA00 Цифровой термометр с программируемым разрешением, возможностью работать в режиме подключения к последовательному каналу и программируемыми портами ввода/вывода
0x43 DS28EC20 20 кб EEPROM

Данные передаются последовательно, бит за битом. Передачу каждого бита инициирует ведущее устройство. При записи ведущий опускает линию к нулю и удерживает её. Если время удерживания линии равно 1…15 мкс, значит записывается бит "1". Если время удерживания от 60 мкс и выше - записывается бит "0".

Чтение битов также инициируется мастером. В начале чтения каждого бита мастер устанавливает низкий уровень на шине. Если ведомое устройство хочет передать "0", оно удерживает шину в состоянии LOW на время от 60 до 120 мкс, а если хочет передать "1", то на время примерно 15 мкс. После этого ведомый отпускает линию, и за счёт подтягивающего резистора она возвращается в состояние HIGH.

Вот так, например, выглядит временная диаграмма команды поиска Search ROM (0xF0). Красным цветом на диаграмме отмечены команды записи битов. Обратите внимание на порядок следования битов при передаче по 1-Wire: старший бит справа, младший - слева.


3) Команды работы с ППЗУ

Прежде чем рассматривать команды для работы с ППЗУ iButton, необходимо пару слов сказать о структуре памяти ключа. Память разделена на 4 равных участка: три из них предназначены для хранения трёх уникальных ключей, а четвёртый - для временного хранения данных. Этот временный буфер служит своеобразным черновиком, где данные готовятся для записи ключей.


Для работы с ППЗУ существуют 6 команд:

Название Команда Назначение
Записать во временный буфер (Write Scratchpad) 0x96 Используется для записи данных во временный буфер (scratchpad).
Прочитать из временного буфера (Read Scratchpad) 0x69 Используется для чтения данных из временного буфера.
Копировать из временного буфера (Copy Scratchpad) 0x3C Используется для передачи данных, подготовленных во временном буфере, в выбранный ключ.
Записать пароль ключа (Write Password) 0x5A Используется для записи пароля и уникального идентификатора выбранного ключа (одного из трёх).
Записать ключ (Write SubKey) 0x99 Используется для непосредственной записи данных в выбранный ключ (минуя временный буфер).
Прочитать ключ (Read SubKey) 0x66 Используется для чтения данных выбранного ключа.

4) Передача данных

Продолжение следует...

5 Возможные ошибки при компиляции скетча

1) Если при компиляции скетча возникнет ошибка WConstants.h: No such file or directory #include "WConstants.h", то, как вариант, следует в файле OneWire.cpp заменить первый блок после комментариев на следующий:

#include #include extern "C" { #include #include }

2) Если при компиляции появляется ошибка class OneWire has no member named read_bytes, то найдите и попробуйте использовать другую библиотеку для работы с интерфейсом OneWire.

Ты потерял ключи от домофона и не можешь сделать дубликат. Хочешь ходить в гости к подруге, но у тебя нет ключей от её подъезда. Либо просто тебе нужно подосрать твоему недругу, но ты не можешь попасть к нему в дом, тогда эта статья для тебя.

Пара слов о принципе работы…
Бытует мнение, что в таблетках от домофона находится магнит, и он открывает дверь. Нет, это не так. Таблетка представляет собой ПЗУ, с жёстко зашитым в ней ключом. Называется это ПЗУ — Touch Memory, марки DS1990A. DS1990A — это и есть марка домофонных ключей. Общается с домофоном по шине one-wire (однопроводной интерфейс). Эта шина разработана фирмой Dallas и позволяет общаться двум устройствам всего по одному проводу. Если устройство пассивное (как в нашем случае), то оно ещё и передаёт ему питание по этому проводу. Надо ещё заметить, что необходим ещё общий провод (чтобы цепь замыкалась), но, как правило, все земли устройств подключённых к этой шине соединены воедино. В ключе находится конденсатор на 60 пикофарад, который обеспечивает кратковременное питание ключа на момент ответа. Но ведущее устройство должно постоянно (не реже чем в раз 120 микросекунд) генерировать сигнал единицы, для зарядки этого конденсатора, чтобы ПЗУ в таблетке продолжало питаться.

Внутреннее устройство таблетки

Организация шины One-wire
Шина One-wire работает следующим образом. Есть ведущее устройство Мастер, и ведомое устройство, в нашем случае пассивный ключик. Основные сигналы генерирует мастер, сигналы логической единицы и нуля. Ведомое устройство может только принудительно генерировать сигналы нуля (т.е. просто просаживать шину на землю через транзистор). Упрощённая схема ведущего и ведомого устройства показана на картинках.

Схема мастера

Если взглянуть на схему, нетрудно заметить, что по умолчанию у мастера стоит всегда +5 вольт, а ля логическая единица. Для передачи логического нуля мастер через транзистор замыкает шину на землю, а для передачи единицы — просто размыкает. Это сделано для того, чтобы обеспечить питание ведомого устройства. Ведомое устройство сделано аналогично, только оно не генерирует +5 вольт. Оно может только просаживать шину на землю, тем самым, передавая логический ноль. Логическая единица передаётся просто «молчанием» устройства.

Протокол работы
Сразу можно однозначно заметить, что парадом правит только Мастер, сам ключик DS1990A либо удерживает землю (мастер её сам выставляет шину в ноль), либо просто отмалчивается, в случае, если он хочет передать единицу, то он просто молчит. Смотрим рисунок.

Пример чтения домофоном ключа.

После генерации ключом импульса PREFERENCE, мастер девайс выжидает некоторое время и выдаёт команду на чтение ПЗУ, обычно это код семейства, в нашем случае 33H. Обрати внимание, как сделана передача нуля и единицы. В любом случае импульс «роняется» на землю, но если передаётся единица, то он быстро восстанавливается (около 1 микросекунды), если же должен быть ноль, то импульс некоторое время «висит» на земле, затем возвращается опять в единицу. Возвращение в единицу нужно для того, чтобы пассивное устройство постоянно пополняло энергию конденсатора, и на ней было питание. Далее домофон выдерживает некоторое время и начинает генерировать импульсы приёма информации, всего 64 импульса (т.е. принимает 64 бита инфы). Ключ лишь должен правильно сопоставить длительности. Если он хочет вывести ноль, то он удерживает шину некоторое время в нуле, если же нет, то просто молчит. Всё остальное за него делает домофон.

Содержимое ключа DS1990A.
В домофонах, и просто устройствах, где для открытия дверей используется подобные устройства, применяется ключ стандарта DS1990A. Это устройство представляет собой 8-ми байтовое ПЗУ, с информацией записанной лазером.


Схема дампа ключа.

В младшем байте содержится код семейства. Для DS1990A он всегда будет равен 01h. В шести последующих байтах содержится серийный номер ключа. То самое сокровенное, что идентифицирует ключик. Последний байт называется CRC, это контроль чётности, обеспечивающий подлинность переданных данных. Он вычисляется из семи предыдущих байт. К слову заметить, что это не единственный стандарт. Существуют перезаписываемые ПЗУ, на которых можно носить информацию, также есть ключи шифрования. Но всё многообразие таблеток Dallas просто нереально рассмотреть в рамках одной статьи, о них можно почитать на диске.

Физическое устройства ключа.
Наверное, всё вышесказанное отбило всякое желание заниматься эмуляторами ключей, ведь ключ надо прочитать, а это такой геморрр. Оказывается нет! Производители Dallas позаботились о нас и всю необходимую для нас информацию разместил непосредственно на ключе, при том в шестнадцатеричной системе! Она выгравирована на нём и её вполне можно прочитать, а потом в дальнейшем зашить в наш замечательный эмулятор.

Морда ключа

Нас интересует из всей этой информации следующее:

CC = CRC — это байт контроля чётности 7-й байт в прошивке
SSSSSSSSSSSS = двенадцать ниблов //нибл = 1/2 байта// серийного номера, т.е. самого ключа в хекс кодах.
FF = код семейства, в нашем случае равен 01h — нулевой байт нашего ключа.

Получается, что мы можем просто написать программу, забить в неё ключ весь, переписав ручками визуально с настоящего ключа дамп, и получим готовый эмулятор. Достаточно просто взять у недруга ключик в руки и переписать то, что на нём написано. Что я в общем-то с успехом и сделал. :)

Эмулятор.
Вот и дошли мы до самого вкусного — эмулятора ключей от домофона. Сначала я нашёл на каком-то сайте готовый эмулятор, зашил его в свой АТ89С51 и он не заработал (что не удивительно). Но это не спортивно юзать чужие прошивки и отлавливать чужие, специально оставленные, баги в коде. По сему я начал делать свои эмуляторы и писать под них свои программы. В общем, я попробовал сделать эмулятор на 6 различных микроконтроллерах, разных архитектур, принадлежащих двум семействам AVR и i8051, все производства Atmel. Заработал не на всех, и программ было написано уйма. По началу ставились вообще наполеоновские задачи сделать универсальный эмулятор с возможностью подборки ключа, но потом я оставил эту затею в силу её геморойности и бессмысленности, пусть ей займутся другие люди, кого заинтересует данная статья. Но себестоимость эмулятора, не считая затраченных трудов меньше 70-80 ре, можно даже уложиться в 30 ре, если делать, например на ATtiny12.

Принцип действия эмулятора.
Мы достаточно подробно рассмотрели принцип работы домофона, и соответственно не составит большой проблемы описать алгоритм программы эмулятора DS1990A. Смотрим внимательно диаграмму, и думаем, что надо сделать. А делать надо следующее. Висящая в воздухе нога микроконтроллера (пока не присоединена к земле, импульс ресета) будет считаться контроллером логической единицей. Значится так, мы после подачи питания на котроллер должны ждать того пока наша ножка не уйдёт на землю, а ля в ноль. Как мы услышали ноль, радуемся, ждём некоторое время и переводим порт из режима чтения в режим записи. Затем роняем шину в ноль, и держим её некоторое время — генерим импульс PRESENCE (длительности импульсов смотри в даташите). Дальше снова переводим шину в режим чтения, и ждём что же нам скажет мастер — домофон. Он нам скажет команду чтения, состоящую из 8-ми бит. Декодировать её не будем, т.к. в 99,999% случаев он нам скажет команду дать свой дамп, а ля 33H, просто отсчитываем 8-мь импульсов и не паримся. Дальше ждём. И начинается самое сложное и интересное — надо быстро смотреть, что нам говорит домофон и отвечать ему тоже быстро. Нам нужно побитно выдать серийный номер, состоящий из 8-ми байт, о которых я говорил выше. Я это делал следующим образом (не важно, какой микроконтроллер, принцип везде один будет), загружал байт в какой-нибудь свободный регистр, и сдвигал его вправо, и смотрел бит переноса. Как только домофон роняет шину в ноль, то если у меня флаг переноса установлен в еденицу, то я просто отмалчиваюсь на этот импульс, и жду генерации следующего импульса чтения бита от мастера. Если же у меня во флаге переноса находиться ноль, то после того как домофон уронит шину на ноль, я перевожу порт микроконтроллера в режим вывода и принудительно удерживаю шину в нуле некоторое время, потом отпускаю и обратно перевожу порт контроллера в режим чтения. По длительности импульса в земле устройство мастер понимает, передана была ли ему единица или нуль. В принципе всё, дальше домофон должен радостно запипикать и открыть дверь.

Практика.

Плата тестер. Видня надпись dallas.

После небольшого гемороя и войны с отладчиком получился код. Вот пример кода вывода данных домофону на AT89C2051. (Вообще AT89C2051 это хоть и популярный, но устаревший контроллер. Один из первых которые я программировал. Периферии минимум, памяти тоже всего ничего. Шьется только высоковольтным программатором. Хотя есть его новая замена AT89S2051 его уже можно прошить внутрисхемно через какой нибудь AVR ISP, а может и через AVRDUDE — не проверял. Самое любопытное в том, что он совместим по ногам с ATTiny2313 так что код можно портировать и на Тиньку. прим. DI HALT)

DI HALT:
Этот адов код мы писали в с Длиным в далеком 2006 у него в квартире. Уржались до икоты над своими тупняками. Я тогда еще впервые пощупал AVR. Сидел фигачил на совершенно незнакомом мне ассемблере процедуры чтения из EEPROM, Длиный же ковырял демоплатку для своего будущего эмулятора. Особо запомнился мой прикол с вачдогом, когда у меня МК сбрасывался во время записи в ЕЕПРОМ и выпиливание микросхемы i2c памяти из платы с помощью отрезного круга. Эх… ничо, сгоняю в Москву мы снова отожгем!

;======================================== ; Выдача в линию серийника; in: R0- адресс где лежит серийник с типом таблетки и CRC8 ; USES: A,B,R0,R1,R2 ;======================================================== DEMUL_SendSer: mov R2,#8 SS3: mov ACC,@R0 mov R1,#8 SS2: JB TouchFuck,$ ;ожидаем, когда шину уронят в ноль 1->0 RRC A ;C:=A.0; shift A; mov TouchFuck,C ;TouchFuck:=C; MOV B,#9 DJNZ B,$ ;Delay 20 us setb TouchFuck JNB TouchFuck,$ ;цикл пока 0 DJNZ R1,SS2 inc R0 DJNZ R2,SS3 ret ;=======================================================

Результаты.
В результате я получил множество эмуляторов. Правда, некоторые ещё из них надо доводить до ума. Хотя несколько 100% рабочие. Примеры эмуляторов ты можешь поглядеть на фотках.



Фотографии эмуляторов

Наиболее интересна проверка CRC, которая осуществляется домофоном. Тебе понадобится это, если ты захочешь поставить Dallas замок например на свой комп. Пример рассчёта CRC на A89C2051 (хотя данный код будет работать на всех микроконтрерах семейства i8051.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 DO_CRC: PUSH ACC ;save accumulator PUSH B ;save the B register PUSH ACC ;save bits to be shifted MOV B,#8 ;set shift = 8 bits ; CRC_LOOP: XRL A,CRC ;calculate CRC RRC A ;move it to the carry MOV A,CRC ;get the last CRC value JNC ZERO ;skip if data = 0 XRL A,#18H ;update the CRC value ; ZERO: RRC A ;position the new CRC MOV CRC,A ;store the new CRC POP ACC ;get the remaining bits RR A ;position the next bit PUSH ACC ;save the remaining bits DJNZ B,CRC_LOOP ;repeat for eight bits POP ACC ;clean up the stack POP B ;restore the B register POP ACC ;restore the accumulator RET

DO_CRC: PUSH ACC ;save accumulator PUSH B ;save the B register PUSH ACC ;save bits to be shifted MOV B,#8 ;set shift = 8 bits ; CRC_LOOP: XRL A,CRC ;calculate CRC RRC A ;move it to the carry MOV A,CRC ;get the last CRC value JNC ZERO ;skip if data = 0 XRL A,#18H ;update the CRC value ; ZERO: RRC A ;position the new CRC MOV CRC,A ;store the new CRC POP ACC ;get the remaining bits RR A ;position the next bit PUSH ACC ;save the remaining bits DJNZ B,CRC_LOOP ;repeat for eight bits POP ACC ;clean up the stack POP B ;restore the B register POP ACC ;restore the accumulator RET

Заключение.
Как видишь домофоные ключи устроенны не так просто, как кажется. Однако, съэмулировать их доступно каждому кто владеет программированием и паяльником.

DI HALT:
Дела давно минувших дней, преданья старины глубокой… Длиный — WDR! (понятно будет только посвященным;)))))

Доредакционная версия статьи из журнала Хакер

Добрый день! Как-то надоело платить по 150 рублей за копию ключа от домофона и решил собрать простой, бюджетный дубликатор iButton на Arduino. Цены на подобные готовые устройства «кусаются», хотя и функционал у них шире, копируют практически всё, включая беспроводные ключи. Мне достаточно простого копирования ключа iButton а-ля «кнопка». Интересно? Прошу под «cut»!

Итак, приступим! Для начала «техзадание», что должно уметь это устройство :
1) Читать содержимое ключа, интересно же что там зашито.
2) Копировать ключи, как это ни странно звучит:)
3) Прошивать «универсальный» ключ. Под словом «универсальный» будем понимать какой-либо свой ключ, который будет записываться по-умолчанию.

UPD. Очень важно! Если первый байт, family code, будет 00 , например 00 :12:34:56:AB:CD:EF:AA , то после прошивки ключ «умрёт», читаться он уже этим программатором, а возможно и другими, не будет. Выявлено опытным путём, спасибо товарищу 16 :AB:CD:EF:E0 с естественно неверной контрольной суммой E0 . Так как контрольная сумма неверная, то домофон игнорирует эту последовательность при считывании. Этот домофон загубил все перезаписываемые ключи, пока я разбирался в чём дело и почему «сами по себе» меняются данные в ключах. В итоге дубликат к этому домофону сделать не удалось, пришлось идти в обслуживающую организацию и заказывать ключик за 100 рублей. :)


В итоге получаем полезную в хозяйстве штуку за смешные деньги, «болванки» для записи продают , хотя у нас в оффлайне можно найти по 30 рублей за штуку, у копировальщиков на рынке по 100 - 150 рублей:).
UPD. О том какие типы ключей можно записать этим дубликатором читаем . Спасибо за помощь товарищу "у.
UPD. Если ключ не пишется следуем товарища . Планирую купить +197 Добавить в избранное Обзор понравился +95 +184

Всем известно, что любой механизм со временем портится, и его приходится менять, особенно это относится к элементам, подверженным частой физической нагрузке.

Электроника в этом смысле более надежна, и если она хорошо защищена по электрической части, то может прослужить довольно долго.

Потеря ключей от механического замка часто сопряжена с заменой последнего. Теряя электронный чип, достаточно сделать его копию при помощи .

Как устроен и работает дубликатор

Какие модели и виды дубликаторов ключей бывают

Все имеющиеся в природе дубликаторы домофонных ключей можно отнести к трем разным типам:

  1. Программаторы для перепрошивки бесконтактных ключей tmd;
  2. Дубликаторы для создания копий контактных домофонных ключей;
  3. Универсальный тип дубликаторов, которые могут перепрошивать любые виды домофонных чипов.

Каждый из этих типов устройств имеют свои модификации.

Дубликаторы-бесконтактники

В их числе имеется три модификации аппаратов.

К первой модификации относятся программаторы, делающие стандарт радиочастотной идентификации EM-Marin, HID и Indala (дубликаторы tmd), ко второй – поддерживающие стандарт Mifare, третья модификация дубликаторов работает с ключами стандарта ТЕХ-КОМ или ТКРФ.

Устройства контактного типа

Аппараты представлены двумя видами. Первый вид рассчитан на работу с ключами контактного типа dallas, второй вид программаторов дублирует ключи типа либо .

Даллассовский чип имеет шестнадцатиричный код, а цифраловский прошивается кодом протокольного типа, который отличается большим объемом.

Универсальные устройства программирования ключей

Универсальные дубликаторы домофонных ключей, помимо того, что могут создать копию любого цифрового чипа, обладают рядом дополнительных функций:

  • Способность к обновлению;
  • Наличие базы памяти;
  • Генерация кодов.

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

Вторая функция делает возможным выполнять клоны ключей без наличия оригинала. То есть после первой перепрошивки код чипа просто записывается в базу устройства и воспроизводится по необходимости.

Третья функция позволяет прошивать ключи оригинальными кодами, например, для сотрудников компании у каждого из которых должен быть свой личный код доступа к замку. Тогда можно отследить количество посещений того или иного объекта конкретным человеком.

Что потребуется, чтобы изготовить дубликатор домофонных ключей своими руками

При изготовлении копировщика ключей собственными руками за основу можно взять модуль «ардуино».

Элементная база, которая понадобится для изготовления устройства:

  1. Микроконтроллер типа «Arduino Nano» - это основные «мозги» аппарата, где происходит обработка информации и запись данных;
  2. Плата RFID RC522, выполняющая роль считывающего коды модуля и перенаправления информации в микроконтроллер;
  3. Зуммер пьезоэлектрического типа;
  4. Два LED элемента для монитора;
  5. Два резистора по 330 Ом;
  6. Блок клавиатуры типа 4Х4;
  7. Адаптер для жидкокристаллического дисплея типа I2C (LCM1602), выполняющий роль преобразователя ЖК –дисплея в формат совместимый с «ардуино»;
  8. Жидкокристаллический экран типа LCD16X2BL.

Жидкокристаллический экран при помощи шестнадцати контактов соединяется с контактной группой адаптера. На обоих модулях контакты имеют нумерацию.

Далее на адаптер дисплея от модуля rf ID RC522 подводят питающие провода: красного цвета – к контакту VCC (+) и черного – к контакту GND (общий). Управляющие провода припаивают к контактам SDA и SCL. LED элементы устанавливают в паре с ограничивающими ток резисторами.

Принцип прошивки ключей

Домофонные чипы, которые имеют форму таблеток и поверхность которых нужно прикладывать к контакту домофона, не содержат внутри магнитных элементов.

Схемотехника устройства построена на применении энергонезависимой памяти (другими словами - ПЗУ).

В такую память производится запись последовательности символов цифрового уникального кода.

Принцип перезаписи таких ключей заключается в том, что дубликатор tmd считывает код и воссоздает его на платформе чистого чипа.

RFID-система построена на передачи кода не при помощи контакта, а определенной радиочастоты.

В схеме ключа заложен колебательный контур. В случае его возбуждения данные из памяти передадутся на считывающее устройство через пространство.

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

Единственное отличие состоит в том, что программаторы могут записывать в память и воспроизводить лишь определенный тип цифрового сигнала. Исключение составляют универсальные приборы, которые могут быть прошиты на работу с любым типом цифровых данных.

Заключение

Изготовление чипов для домофона своими руками может стать не только решением проблемы потери личных ключей, но и возможностью построить на этом свой бизнес.

Для начала можно сделать простой копировщик домофонных ключей для самых ходовых «болванок».

Самое важное, что такой заработок не требует больших стартовых вложений, а услуги всегда будут востребованы, особенно в крупных городах.

Видео: Дубликатор домофонных ключей своими руками

mob_info