Сайт переехал -> sun-student.ru

Протокол записи RW1990 (заключение)

Итак, с последней моей статьи прошло более двух недель. За это время можно было горы свернуть, однако, среди всех людей, желающих ознакомиться с протоколом, только от hexFFh я смог получить реальную помощь. Основные наши усилия были направлены на модернизацию логического анализатора. Коллега помог собрать прибор на микроконтроллере ATMEGA16  и написал прошивку для него.

Основное отличие данного анализатора от предыдущего варианта заключается в том, как данные передаются на компьютер. Если первоначально я передавал состояние линии непрерывно и разрешающая способность прибора обуславливалась пропускной способностью COM порта – 115 кБит/с, то вариант hexFFh расшифровывает протокол внутри микроконтроллера и посылает готовые данные на компьютер.

Теперь ближе к делу. В данной статье будет рассмотрен протокол записи двух самых распространенных болванок: RW1990.2 и RW1990.

 

До недавнего времени я думал, что две эти заготовки абсолютно идентичны по протоколу, однако этот миф также быстро развеялся. Вначале моё предположение подтвердилось в описании, размещенном на сайте ikey.ru, а затем и опытным путем. Новый код для RW1990 записывается инверсно. Как обычно передача начинается с family code, младшим байтом вперед, но биты в каждом байте инвертированы. Больше отличий в протоколах нет, поэтому все последующие высказывания будут относиться к заготовке второй версии.

Протокол передачи данных по шине 1-Wire состоит из четырех типов сигнализации на одной линии: последовательность сброса с импульсом сброса и импульсом присутствия, запись нуля, запись единицы и чтение данных. За исключением импульса присутствия, все эти сигналы инициируются мастером.

Последовательность записи в EEPROM RW1990.2 через 1-Wire порт следующая:

­1) Чтение ПЗУ;

2) Инициализация записи;

3) Запись кода в EEPROM;

4) Проверка записанного кода;

5) Ожидание момента, когда ключ уберется с лузы дубликатора.

Все транзакции на шине 1-Wire начинаются с последовательности инициализации. Последовательность инициализации, как правило, состоит из импульса сброса, передаваемого мастером шины, за которым следует импульс присутствия, передаваемые ведомым, в нашем случае таковым является ключик-заготовка. Длительность стандартных импульсов можно посмотреть в документации, например, на DS1990, которая любезно выложена на сайте Maxim.

Импульс присутствия сообщает мастеру шины, что RW1990.2 подключен к шине и готов к работе.

Для того, чтобы запись заготовки происходила достаточно уверенно, а записанные данные не носили случайный характер, необходимо обеспечить ток порядка 1 мА. У меня RW1990.2 стабильно записывается при номинале подтягивающего резистора 200 Ом (вход подтянут относительно положительного потенциала напряжения питания +5 В).

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

1) Чтение ПЗУ.

Перед тем как записать заготовку дубликатор трижды считывает уникальный код, находящийся в ПЗУ RW1990.2.

Как известно из технической документации для этого предназначена команда 0x33, перед которой следует чередование сигналов Reset и Presence. Для того, чтобы упростить чтение лога введем следующие сокращения: RReset, P Presence. Также не забываем, что чтение и запись информации идёт начиная с младшего бита, а инициирует передачу/прием всегда только мастер.

 

Таблица 1

п/п

Режим мастера

Данные

Примечание

1

передача

R

последовательность повторяется три раза

2

прием

P

3

передача

0x33

4

прием

64-бита (уникальный код ПЗУ)

 

2) Инициализация записи

В таблице 2 представлена последовательность, которую дубликатор посылает перед записью ключа. Следует отметить, что перед посылкой первого пакета Reset->Presence (см. п.1 табл.2)  выдерживается уровень логической единицы порядка 4 мс. Перед передачей Reset (см. п.5 и п.9 табл.2) длительность импульса логической единицы составляет 13 мс, перед Reset (п.9 табл. 2) – 16 мс. Все остальные временные промежутки согласно документации на DS1990.

 

Таблица 2

п/п

Режим мастера

Данные

Примечание

1

передача

R

повторяем 4 раза

2

прием

P

3

передача

0x1E

 

4

прием

0xFF

 

5

передача

R

 

6

прием

P

 

7

передача

0x1D

 

8

передача

тайм-слот записи 1

 

9

передача

R

 

10

прием

P

 

11

передача

0x1E

 

12

прием

0xFF

 

13

передача

R

 

14

прием

P

 

3) Запись кода в EEPROM

Для того чтобы запись кода происходила корректно, необходимо после передачи каждого бита выдержать импульс логической единицы более 10 мс. Здесь действует правило – лучше передержать, чем недодержать. Импульсу Reset (позиция 8 в табл. 3) предшествует импульс логической единицы длительностью 13 мс

 

 Таблица 3

п/п

Режим мастера

Данные

Примечание

1

передача

0xD5

 

2

передача

64-бита (записываемый код)

временные диаграммы см. рисунок 2

4

передача

R

 

5

прием

P

 

6

передача

0x1D

ключ записывается и без этой последовательности

7

передача

тайм-слот записи 0

8

передача

R

9

прием

P

10

передача

0x1E

11

прием

0xFF

4) Проверка записанного кода

Данный этап происходит аналогично пункту 1.

5) Ожидание момента, когда ключ уберется с лузы дубликатора

Можно пропустить данный абзац и даже не читать, но все-таки раз дубликатор это делает, значит опишу. До тех пор, пока Вы не уберете ключ с лузы дубликатора идет чередование Reset -> Presense.

Перед тем как использовать материалы из этой статьи хочу обратить внимание на некоторые моменты:

-                                           Данная информация опубликована исключительно для ознакомления (прочитав материал, Вы должны его тут же забыть).

-                                           Использование в коммерческих целях недопустимо. Имейте совесть!

-                                           При перепечатке материалов ссылка на страницу sunstudent.narod.ru обязательна.

Вот и всё, что я хотел сказать. Ещё один орех расколот, теперь нужно ставить новую цель и идти к ней. Удачи!

 

Хочу выразить особую благодарность hexFFh, за помощь в изучении протокола и написании статьи

 

 

Хостинг от uCoz