Имитатор touch-memory DS1990A

29 марта 2007  |  Кодовые замки, замковые устройства



Этот проект является развитием проекта "Если Вы потеряли Touch Memory..."

Имитатор touch-memory DS1990A, который предлагается Вашему вниманию, способен запоминать номера до 30 разных ключей, а затем имитировать любой ключ. Номера можно вводить двумя способами: непосредственным считыванием оригинала или ручным вводом в компьютер с последующей записью в имитатор по RS-232. В компьютере может вестись база ключей, в которой указан тип, серийный номер и текстовое описание.

Touch Memory типа DS1990A представляет собой пассивное устройство (без внутреннего источника питания), которое содержит записанное с помощью лазера ПЗУ. ПЗУ содержит уникальный серийный номер. Для считывания данных с DS1990A используется 1-проводная шина фирмы DALLAS. DS1990A является подчинённым устройством, а мастером является обычно микропроцессор. Питание DS1990A во время обмена данными производится от 1-проводной шины. Эквивалентная схема интерфейсной части DS1990A показана на рис.1а.


Имитатор touch-memory DS1990A

Рисунок 1. Эквивалентная схема интерфейсной части DS1990A (а) и мастера (б).

Аналогичную интерфейсную часть имеет и мастер (рис.1б), отличие состоит в наличии подтягивающего резистора. В состоянии ожидания 1-проводная шина имеет высокий логический уровень. Последовательность доступа к DS1990A по 1-проводной шине следующая:

- Инициализация
- Команда чтения ПЗУ
- Чтение данных

Все пересылки по 1-проводной шине начинаются с инициализации. Инициализация производится в следующей последовательности (рис.2):


Имитатор touch-memory DS1990A

Рисунок 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).


Имитатор touch-memory DS1990A

Рисунок 3. Интервалы записи ноля и единицы по 1-проводной шине.

Приняв команду чтения ПЗУ, DS1990A передает 8-битный код типа устройства (для DS1990A это 01H), 48-битный серийный номер и 8-битную контрольную сумму. Временные интервалы для принимаемых битов тоже формирует мастер. Интервал начинается импульсом низкого уровня длительностью 1 - 15 мкс. Затем мастер должен освободить шину, чтобы дать возможность DS1990A вывести бит данных. По переходу из единицы в ноль DS1990A выводит на шину бит данных и запускает схему временной задержки, которая определяет, как долго бит данных будет присутствовать на шине. Это время лежит в пределах 15 - 60 мкс. Для того чтобы данные на шине гарантированно установились, требуется некоторое время. Поэтому момент считывания данных мастером должен отстоять чуть меньше, чем на 15 мкс от начала временного интервала (Рис 4).


Имитатор touch-memory DS1990A

Рисунок 4. Интервал чтения по 1-проводной шине.

Правильность принятых данных контролируется с помощью контрольной суммы (рис.9). Если подсчитать контрольную сумму всех восьми считанных байтов (включая байт считанной контрольной суммы), то в случае отсутствия ошибок должен получиться ноль. Подпрограмма вычисления контрольной суммы приведена ниже:


Имитатор touch-memory DS1990A

Рис.9.

Эта подпрограмма должна вызываться для каждого байта, участвующего в подсчете контрольной суммы. Байт должен быть помещён в A. Контрольная сумма получается в ячейке памяти TEMP (перед началом подсчёта контрольной суммы эта ячейка должна быть обнулена).

Принципиальная схема устройства приведена на рис. 5. Основой является микроконтроллер фирмы Atmel AT89C2051. Этот микроконтроллер имеет встроенное ПЗУ программ с электрическим стиранием объемом 2 Кбайта. Микроконтроллер работает на тактовой частоте 12 МГц. Программа содержит довольно много фрагментов, критичных к времени выполнения, поэтому изменять тактовую частоту без соответствующей корректировки программы нельзя.


Имитатор touch-memory DS1990A

Рисунок 5. Принципиальная схема имитатора touch-memory DS1990A.

Для отображения номера текущего ключа в устройстве применен сдвоенный 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.


Имитатор touch-memory DS1990A

Рисунок 6. Чертеж печатной платы имитатора touch-memory DS1990A.

При включении питания на индикаторах отображается текущий порядковый номер ключа. Порядковый номер запоминается в энергонезависимой памяти при входе в режим имитации. Всего может быть до 30 ключей. Пролистывать порядковый номер можно с помощью кнопок "UP" и "DOWN". Если к 1-проводному порту подключить DS1990A, то его серийный номер будет считан и записан в память под текущим порядковым номером. В случае удачного считывания на индикаторах на 2 секунды появляется надпись "Pr". Теперь устройство может имитировать считанный ключ. Для этого необходимо войти в режим имитации с помощью кнопки "GO". В этом режиме на индикатор выводится символ "P", а кнопки "UP" и "DOWN" не действуют. В режиме имитации 1-проводный порт можно подключить к считывателю touch memory, и он отреагирует на это как на подключение оригинальной DS1990A. Выйти из режима имитации можно вторичным нажатием кнопки "GO".

В имитаторе DS1990A возникла необходимость программно реализовать не только мастера, но и подчинённое устройство. Реализовать подчинённое устройство несколько сложнее ввиду того, что инициатором на шине является мастер. Однако, это реализуемо, если во время имитации микроконтроллер не будет отвлекаться на другие задачи. Самая критичная по времени операция - это определение начала временного интервала (time slot). Для этого использована внутренняя логика прерываний. Роль порта 1-проводной шины выполняет ножка INT0 контроллера. Прерывание настроено таким образом, что флаг устанавливается при переходе входного сигнала из единицы в ноль. Само прерывание при этом запрещено, а флаг анализируется программно. Это позволяет устанавливать на шине данные с наименьшей задержкой относительно начала временного интервала (рис.10)


Имитатор touch-memory DS1990A

Рис.10.

Вход в режим имитации осуществляется нажатием кнопки "GO". При этом программа начинает выполнять критичный к времени цикл и отвлекаться на сканирование индикатора и на опрос кнопок не может. В этом режиме индикация осуществляется статически, поэтому гореть может только один разряд (с несколько увеличенной яркостью). На индикаторе зажигается символ "P", для чего в порт P1 выводится соответствующая информация. Линия сканирования T0 устанавливается в ноль, при этом транзистор VT2 всё время открыт, а второй разряд HG1 - всё время включен. Выход из цикла имитации выполнен нестандартно. Кнопка "GO" подключена к ножке INT1 контроллера. При входе в цикл это прерывание разрешается. Его обработчик выглядит следующим образом - рис.11.


Имитатор touch-memory DS1990A

Рис.11.

Этот текст аналогичен по выполняемым действиям команде "LJMP EDIT". Он осуществляет переход на метку EDIT в основной программе, где производится начальная инициализация. Однако применять команду LJMP нельзя, так как в этом случае логика прерываний не восстановит своего состояния (она останется в состоянии обработки прерывания и прерывание больше не возникнет).

Кроме автономной работы, устройство может работать с PC, к которому оно подключается через порт RS-232 (поддерживаются порты COM1 - COM4). Программа на РС (рис.7) отображает параметры ключей, записанных в память имитатора.


Имитатор touch-memory DS1990A

Рисунок 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 равен единице. Это признак запроса чтения. После получения такого адреса, контроллер сам передаст байт данных из буфера. Формат передаваемых данных наглядно представлен в таблице - рис.12.


Имитатор touch-memory DS1990A

Рис.12.

Буфер обмена имеет следующую структуру - рис.13.


Имитатор touch-memory DS1990A

Рис.13.

Подробное описание параметров - рис.14.


Имитатор touch-memory DS1990A

Рис.14.

Этот параметр представляет собой код команды, которая будет выполнена контроллером. Возможные коды команд приведены в таблице - рис.15.


Имитатор touch-memory DS1990A

Рис.15.

Команда "Установить порядковый номер" включает текущий номер в соответствии со значением в ячейке CHAN буфера обмена. Поэтому прежде чем передавать код этой команды, необходимо записать в CHAN требуемый номер.

Команда “Записать номер в энергонезависимую память” осуществляет копирование серийного номера из буфера обмена в энергонезависимую память. Перед тем, как передать код этой команды, необходимо правильно заполнить буфер и установить требуемый порядковый номер с помощью предыдущей команды.

После выполнения любой команды контроллер возвращает её код в PC как подтверждение выполнения.

Этот параметр (рис.16) задает порядковый номер ключа и может находиться в диапазоне от 1 до 30.


Имитатор touch-memory DS1990A

Рис.16.

Этот параметр (рис.17) является кодом семейства ключа. Имеет смысл записывать только 01H (код семейства DS1990A).


Имитатор touch-memory DS1990A

Рис.17.

В эти ячейки (рис.18) записывается серийный номер ключа.


Имитатор touch-memory DS1990A

Рис.18.

Этот параметр (рис.19) должен быть равен контрольной сумме предыдущих семи ячеек (FAM_CODE, SER_NUM1 .. SER_NUM6).


Имитатор touch-memory DS1990A

Рис.19.

Download:

ds1990a.asm (25 Kb) — исходный текст программы имитатора.
ds1990a.bin (1.2 Kb) — уже оттранслированный файл.
ds1990a.zip (148 Kb) — программа-менеджер ключей ds1990a.exe в архиве.
comapi32.dll (16 Kb) — динамическая библиотека, которая используется этой программой.
tm_sim.asm (5 Kb) — исходный текст программы имитатора одного ключа.
tm_sim.bin (0.2 Kb) — уже оттранслированный файл.

Автор: Ридико Леонид Иванович (wubblick@yahoo.com)


Код для размещения на форумах или блоге

«
»