Копіювальник домофонних ключів на 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Опис
0x01DS1990A, DS1990R, DS2401, DS2411Унікальний серійний номер-ключ
0x02DS1991Мультиключ, 1152-бітна захищена EEPROM
0x04DS1994, DS24044 кб NV RAM + годинник, таймер та будильник
0x05DS2405Одиночний адресований ключ
0x06DS19934 кб NV RAM
0x08DS19921 кб NV RAM
0x09DS1982, DS25021 кб PROM
0x0ADS199516 кб NV RAM
0x0BDS1985, DS250516 кб EEPROM
0x0CDS199664 кб NV RAM
0x0FDS1986, DS250664 кб EEPROM
0x10DS1920, DS1820, DS18S20, DS18B20Датчик температури
0x12DS2406, DS24071 кб EEPROM + двоканальний адресований ключ
0x14DS1971, DS2430A256 біт EEPROM і 64 біт PROM
0x1ADS1963L4 кб NV RAM + лічильник циклів запису
0x1CDS28E04-1004 кб EEPROM + двоканальний адресований ключ
0x1DDS24234 кб NV RAM + зовнішній лічильник
0x1FDS2409Двоканальний ключ, що адресується, з можливістю комутації на зворотну шину
0x20DS2450Чотирьохканальний АЦП
0x21DS1921G, DS1921H, DS1921ZТермохронний датчик із функцією збору даних
0x23DS1973, DS24334 кб EEPROM
0x24DS1904, DS2415Годинник реального часу
0x26DS2438Датчик температури, АЦП
0x27DS2417Годинник реального часу з перериванням
0x29DS2408Двонаправлений 8-розрядний порт вводу/виводу
0x2CDS2890Одноканальний цифровий потенціометр
0x2DDS1972, DS24311 кб EEPROM
0x30DS2760Датчик температури, датчик струму, АЦП
0x37DS197732 кб захищеної паролем EEPROM
0x3ADS2413Двоканальний комутатор, що адресується.
0x41DS1922L, DS1922T, DS1923, DS2422Термохронні та гігрохронні датчики високої роздільної здатності з функцією збору даних
0x42DS28EA00Цифровий термометр із програмованою роздільною здатністю, можливістю працювати в режимі підключення до послідовного каналу та програмованими портами вводу/виводу
0x43DS28EC2020 кб 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 або directory #include "WConstants.h",те, як варіант, слід у файлі OneWire.cppзамінити перший блок після коментарів на наступний:

#include #include extern "C" (#include #include }

2) Якщо при компіляції з'являється помилка class OneWire не має 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:
Цей код пекла ми писали у з Довгим у далекому 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 registr PUSH ACC ;save bits до shifted MOV B,#8 ;set shift = 8 bits ; CRC_LOOP: XRL A,CRC ;calculate CRC RRC A ;move it to 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 ;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 registr PUSH ACC ;save bits до shifted MOV B,#8 ;set shift = 8 bits ; CRC_LOOP: XRL A,CRC ;calculate CRC RRC A ;move it to 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 ;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