Имитатор touch-memory DS1990A способен запоминать номера до 30 разных ключей, а затем имитировать любой ключ. Номера
можно вводить двумя способами: непосредственным считыванием оригинала или ручным
вводом в компьютер с последующей записью в имитатор по RS-232. В компьютере
может вестись база ключей, в которой указан тип, серийный номер и текстовое
описание.
Touch Memory типа DS1990A представляет собой пассивное устройство (без
внутреннего источника питания), которое содержит записанное с помощью лазера
ПЗУ. ПЗУ содержит уникальный серийный номер. Для считывания данных с DS1990A
используется 1-проводная шина фирмы DALLAS. DS1990A является подчинённым
устройством, а мастером является обычно микропроцессор. Питание DS1990A во время
обмена данными производится от 1-проводной шины. Эквивалентная схема
интерфейсной части DS1990A показана на рис.1а.
Рисунок 1. Эквивалентная схема интерфейсной части DS1990A (а) и мастера
(б).
Аналогичную интерфейсную часть имеет и мастер (рис.1б), отличие состоит в
наличии подтягивающего резистора. В состоянии ожидания 1-проводная шина имеет
высокий логический уровень. Последовательность доступа к DS1990A по 1-проводной
шине следующая:
Инициализация
Команда чтения ПЗУ
Чтение данных
Все пересылки по 1-проводной шине начинаются
с инициализации. Инициализация производится в следующей последовательности
(рис.2):
Рисунок 2. Инициализация обмена по 1-проводной шине.
Мастер посылает импульс сброса (reset pulse) - сигнал низкого уровня
длительностью не менее 480 мкс.
За импульсом сброса следует ответ подчиненного устройства (presence
pulse) - сигнал низкого уровня длительностью 60 - 240 мкс, который
генерируется через 15 - 60 мкс после завершения импульса сброса.
Ответ подчиненного устройства даёт мастеру понять, что на шине
присутствует устройство DS1990A и оно готово к обмену. После того, как мастер
обнаружил ответ, он может передавать команду чтения ПЗУ. Команда чтения ПЗУ
имеет код 33H. Передача данных ведётся путём формирования специальных временных
интервалов (time slots). Каждый временной интервал служит для передачи одного
бита. Первым передаётся младший бит. Интервал начинается импульсом низкого
уровня, длительность которого лежит в пределах 1 - 15 мкс. Поскольку переход из
единицы в ноль менее чувствителен к ёмкости шины (он формируется открытым
транзистором, в то время как переход из ноля в единицу формируется подтягивающим
резистором), именно этот переход DS1990A использует для синхронизации с
мастером. В DS1990A запускается схема временной задержки, которая определяет
момент считывания данных. Номинальное значение задержки равно 30 мкс, однако,
оно может колебаться в пределах 15 - 60 мкс. За импульсом низкого уровня следует
передаваемый бит. Он должен удерживаться на шине 60 - 120 мкс от начала
интервала. Временной интервал завершается переводом шины в состояние высокого
уровня на время не менее 1 мкс. Это необходимо для зарядки внутреннего
конденсатора, который обеспечивает питание DS1990A. Аналогичным образом
формируются временные интервалы для всех передаваемых битов (рис. 3).
Рисунок 3. Интервалы записи ноля и единицы по 1-проводной
шине.
Приняв команду чтения ПЗУ, DS1990A передает 8-битный код типа устройства (для
DS1990A это 01H), 48-битный серийный номер и 8-битную контрольную сумму.
Временные интервалы для принимаемых битов тоже формирует мастер. Интервал
начинается импульсом низкого уровня длительностью 1 - 15 мкс. Затем мастер
должен освободить шину, чтобы дать возможность DS1990A вывести бит данных. По
переходу из единицы в ноль DS1990A выводит на шину бит данных и запускает схему
временной задержки, которая определяет, как долго бит данных будет
присутствовать на шине. Это время лежит в пределах 15 - 60 мкс. Для того чтобы
данные на шине гарантированно установились, требуется некоторое время. Поэтому
момент считывания данных мастером должен отстоять чуть меньше, чем на 15 мкс от
начала временного интервала (Рис 4).
Рисунок 4. Интервал чтения по 1-проводной шине.
Правильность принятых данных контролируется с помощью контрольной суммы. Если
подсчитать контрольную сумму всех восьми считанных байтов (включая байт
считанной контрольной суммы), то в случае отсутствия ошибок должен получиться
ноль. Подпрограмма вычисления контрольной суммы приведена ниже:
Эта подпрограмма должна вызываться для каждого байта, участвующего в подсчете
контрольной суммы. Байт должен быть помещён в A. Контрольная сумма получается в
ячейке памяти TEMP (перед началом подсчёта контрольной суммы эта ячейка должна
быть обнулена).
Принципиальная схема устройства приведена на рис. 5. Основой является
микроконтроллер фирмы Atmel AT89C2051. Этот микроконтроллер имеет встроенное ПЗУ
программ с электрическим стиранием объемом 2 Кбайта. Микроконтроллер работает на
тактовой частоте 12 МГц. Программа содержит довольно много фрагментов, критичных
к времени выполнения, поэтому изменять тактовую частоту без соответствующей
корректировки программы нельзя.
Для отображения номера текущего ключа в устройстве применен сдвоенный
7-сегментный светодиодный индикатор с общим анодом HG1. Для уменьшения
количества элементов схемы применена динамическая индикация, реализованная
программно. Катоды индикатора через токоограничивающие резисторы подключены к
порту P1. Аноды управляются ключами VT1 и VT2. Ключами же управляют линии
сканирования T0 и T1. Соединение катодов двух разрядов индикатора произведено в
произвольном порядке, потому что так удобнее для топологии печатной платы. В
связи с этим для каждого разряда индикатора в программе использована отдельная
таблица знакогенератора.
Те же линии порта P1, к которым подключены катоды индикаторов, используются и
для сканирования кнопок SB1 и SB2. Линия возврата - порт P1.7. Диоды VD2 и VD3
предотвращают замыкание линий P1.0 и P1.1 (и нарушение работы индикации) при
одновременном нажатии двух кнопок.
Для экономии портов контроллера микросхема энергонезависимой памяти, в
которой сохраняются номера ключей, подключена к линиям сканирования индикатора
T0 и T1. Процесс сканирования представляет собой чередующиеся условия "Старт" и
"Стоп" шины I2C и на работу микросхемы памяти влияния не оказывает. Во время
циклов записи/чтения по шине I2C процесс сканирования индикаторов
приостанавливается. При этом индикаторы гасятся путём вывода в порт P1 всех
единиц.
В качестве 1-проводного порта использована ножка INT0 микроконтроллера.
Элементы R1, VD1 имеют защитную функцию. К выводам DQ и GND можно подключить
параллельно touch probe DS9092 и touch port DS9092R. Однако их стоимость,
пожалуй, больше стоимости всего устройства. Поэтому можно обойтись более
простыми контактными устройствами.
Преобразователь уровней для порта RS-232 выполнен на транзисторах VT3 и
VT4. Отрицательное напряжение питания поступает с порта компьютера через контакт
RTS.
Питание устройства осуществляется от батареи из трёх элементов (например,
размера AAA) с суммарным напряжением 4.5 В. Работоспособность устройства
сохраняется при снижении напряжения питания до 3 В.
Никакой настройки устройство не требует. Достаточно только, чтобы монтаж был
выполнен без ошибок и из исправных деталей. Микросхему U2 можно заменить 24C08,
24C16, 24LC04, 24LC08, 24LC16. Важно только, чтобы она позволяла производить
запись при снижении напряжения питания до 3 В (микросхемы некоторых
производителей запрещают запись при напряжении менее 4.5 В). Вместо индикатора
HG1 можно применить два отдельных индикатора любого типа, важно только, чтобы
они имели общий анод. Ну и, конечно, достаточную яркость свечения. Транзисторы
можно применить любые маломощные соответствующей проводимости с максимальным
током коллектора не менее 50 мА. Для порта RS-232 применена вилка разъёма
D-SUB-9, которая предназначена для объёмного монтажа. Плата входит между рядами
контактов, которые припаиваются к соответствующим ламелям. Кнопки
(безфиксационные) и выключатель питания можно применить любые малогабаритные,
только при этом может потребоваться корректировка печатной платы. Чертеж
печатной платы устройства показан на рисунке 6.
При включении питания на индикаторах отображается текущий порядковый номер
ключа. Порядковый номер запоминается в энергонезависимой памяти при входе в
режим имитации. Всего может быть до 30 ключей. Пролистывать порядковый номер
можно с помощью кнопок "UP" и "DOWN". Если к 1-проводному порту подключить
DS1990A, то его серийный номер будет считан и записан в память под текущим
порядковым номером. В случае удачного считывания на индикаторах на 2 секунды
появляется надпись "Pr". Теперь устройство может имитировать считанный ключ. Для
этого необходимо войти в режим имитации с помощью кнопки "GO". В этом режиме на
индикатор выводится символ "P", а кнопки "UP" и "DOWN" не действуют. В режиме
имитации 1-проводный порт можно подключить к считывателю touch memory, и он
отреагирует на это как на подключение оригинальной DS1990A. Выйти из режима
имитации можно вторичным нажатием кнопки "GO".
В имитаторе DS1990A возникла необходимость программно реализовать не только
мастера, но и подчинённое устройство. Реализовать подчинённое устройство
несколько сложнее ввиду того, что инициатором на шине является мастер. Однако,
это реализуемо, если во время имитации микроконтроллер не будет отвлекаться на
другие задачи. Самая критичная по времени операция - это определение начала
временного интервала (time slot). Для этого использована внутренняя логика
прерываний. Роль порта 1-проводной шины выполняет ножка INT0 контроллера.
Прерывание настроено таким образом, что флаг устанавливается при переходе
входного сигнала из единицы в ноль. Само прерывание при этом запрещено, а флаг
анализируется программно. Это позволяет устанавливать на шине данные с
наименьшей задержкой относительно начала временного интервала:
Вход в режим имитации осуществляется нажатием кнопки "GO". При этом программа
начинает выполнять критичный к времени цикл и отвлекаться на сканирование
индикатора и на опрос кнопок не может. В этом режиме индикация осуществляется
статически, поэтому гореть может только один разряд (с несколько увеличенной
яркостью). На индикаторе зажигается символ "P", для чего в порт P1 выводится
соответствующая информация. Линия сканирования T0 устанавливается в ноль, при
этом транзистор VT2 всё время открыт, а второй разряд HG1 - всё время включен.
Выход из цикла имитации выполнен нестандартно. Кнопка "GO" подключена к ножке
INT1 контроллера. При входе в цикл это прерывание разрешается. Его обработчик
выглядит следующим образом:
Этот текст аналогичен по выполняемым действиям команде "LJMP EDIT". Он
осуществляет переход на метку EDIT в основной программе, где производится
начальная инициализация. Однако применять команду LJMP нельзя, так как в этом
случае логика прерываний не восстановит своего состояния (она останется в
состоянии обработки прерывания и прерывание больше не возникнет).
Кроме автономной работы, устройство может работать с PC, к которому оно
подключается через порт RS-232 (поддерживаются порты COM1 - COM4). Программа на
РС (рис.7) отображает параметры ключей, записанных в память имитатора.
Рисунок 7. Вид пользовательского интерфейса программы-менеджера
ключей.
В колонке # отображается серийный номер, Device - тип устройства, например
DS1990A, DS1992, DS1994 и т.д. Нужно отметить, что устройство может имитировать
только DS1990A, но это не мешает распознавать другие типы touch memory. В
колонке Serial number отображается серийный номер ключа, в колонке CRC -
результат проверки контрольной суммы ("OK" или ничего). Колонка Description
предназначена для текстового описания ключа. Текстовые описания всех ключей
сохраняются в ini-файле. А вот серийные номера ключей в ini-файл не записываются
и хранятся только в энергонезависимой памяти устройства. Поэтому, имея доступ
только к компьютеру нельзя получить серийные номера.
Перемещение по строчкам таблицы эквивалентно пролистыванию порядковых номеров
ключей с помощью кнопок "UP" и "DOWN". При этом на индикаторах устройства также
меняется текущее значение. Поля колонки Serial number доступны для
редактирования. Поэтому в память устройства можно ввести серийный номер ключа,
просто набрав его в таблице и нажав Enter.
Кнопка Read служит для считывания содержимого памяти имитатора в таблицу. C
помощью кнопки Clear можно стереть текущий ключ, а с помощью Clear All - стереть
все ключи.
Последовательный порт настраивается следующим образом: скорость 4800 бод, 8
бит данных, 1 стоп-бит. Бит паритета является признаком передачи адреса. Обмен
всегда инициирует PC. Порядок обмена следующий: в ОЗУ контроллера имитатора
организован буфер обмена. PC может прочитать или записать любой байт этого
буфера. Для этого PC должен вначале передать адрес байта. Признак передачи
адреса - бит паритета, равный единице. Адрес имеет длину 5 бит, хотя в данном
контроллере буфер имеет размер всего 10 байт. Поэтому имеют смысл только первые
10 адресов. Вслед за передачей адреса PC должен передать байт данных, который
будет записан в буфер по этому адресу. Для чтения данных PC должен передать
адрес, у которого бит D7 равен единице. Это признак запроса чтения. После
получения такого адреса, контроллер сам передаст байт данных из буфера. Формат
передаваемых данных наглядно представлен в таблице:
Буфер обмена имеет следующую структуру:
Подробное описание параметров:
Этот параметр представляет собой код команды, которая будет выполнена
контроллером. Возможные коды команд приведены в таблице:
Команда "Установить порядковый номер" включает текущий номер в соответствии
со значением в ячейке CHAN буфера обмена. Поэтому прежде чем передавать код этой
команды, необходимо записать в CHAN требуемый номер. Команда “Записать номер
в энергонезависимую память” осуществляет копирование серийного номера из буфера
обмена в энергонезависимую память. Перед тем, как передать код этой команды,
необходимо правильно заполнить буфер и установить требуемый порядковый номер с
помощью предыдущей команды. После выполнения любой команды контроллер
возвращает её код в PC как подтверждение выполнения.
Этот параметр задает порядковый номер ключа и может находиться в диапазоне от
1 до 30.
Этот параметр является кодом семейства ключа. Имеет смысл записывать только
01H (код семейства DS1990A).
В эти ячейки записывается серийный номер ключа.
Этот параметр должен быть равен контрольной сумме предыдущих семи ячеек
(FAM_CODE, SER_NUM1 .. SER_NUM6).
Последнее время во многих организациях, а порой и дома, появились дверные
замки, ключом к которым является таблетка Touch Memory фирмы DALLAS. Если Вы
потеряли такой ключ, то, в отличие от простого металлического ключа, Вам никто
не сделает дубликат, потому что второго, точно такого ключа, нет в природе. Все
ключи, произведенные фирмой DALLAS, имеют свой уникальный номер, который никогда
не повторяется. Поэтому, если Вы уже потеряли Touch Memory, помочь горю никак
нельзя. Но если Вы пока ее не потеряли, то можно застраховать себя от риска
остаться без ключа. Благодаря тому, что дверные замки в большинстве случаев
используют Touch Memory типа DS1990A, которая не имеет никаких средств защиты,
ее без труда можно симулировать на микроконтроллере. Поэтому, пока еще на
таблетке не стерся серийный номер, перепишите его и, внеся в ПЗУ
микроконтроллера, можно будет симулировать именно этот ключ. Принципиальная
схема имитатора одного ключа типа DS1990A приведена на рисунке 8.
Рисунок 8. Принципиальная схема имитатора одного ключа
DS1990A.
Схема очень проста и особых пояснений не требует. Выходом симулятора является
порт микроконтроллера INT0. На нем установлена цепочка защиты, состоящая из
резистора R1 и стабилитрона VD1. Питается устройство от батареи напряжением 4.5
В. Если применить микроконтроллер в корпусе SOIC, а в качестве батареи
использовать три элемента типа СЦ-32, то устройство может быть очень компактным.
Его можно встроить, например, в брелок. Устройство может получиться еще меньше,
если перейти на микроконтроллер семейства ATtiny AVR.
Серийный номер Touch Memory вписывается в tm_sim.bin, начиная с адреса 10H,
всего 6 байт. Вводить цифры нужно в такой же последовательности, в какой они
идут на корпусе Touch Memory. Например, номер может быть таким: 000002D6B41F.
Седьмой байт представляет собой код семейства (family code) Touch Memory. Для
DS1990A он всегда равен 01H. Другие семейства Touch Memory в полном объеме
симулировать сложно. Контрольная сумма (CRC) вычисляется программой
автоматически, ее вводить не надо.
Download:
ds1990a.bin (1.2 Kb) — уже оттранслированный файл.
ds1990a.zip (148 Kb) — программа-менеджер ключей ds1990a.exe в архиве.
comapi32.dll (16 Kb) — динамическая библиотека, которая используется этой программой.