�������@Mail.ru
Главная страница Техподдержка Основные принципы работы iButton фирмы Dallas Semiconductor. Часть 5
Поиск по сайту

Вход/Регистрация
Магазин

Список всех товаров


Расширенный поиск
Расширенный поиск по характеристикам
Показать корзину
Ваша корзина пуста.
Пользователи online
Сейчас 30 гостей онлайн
Баннер

Основные принципы работы iButton фирмы Dallas Semiconductor. Часть 5

Система команд DS1990A.

Как только мастер определил на шине наличие импульса presence, он может послать одну из четырёх команд, работающих с ПЗУ (ROM) DS1990A. Каждая команда состоит из 8 бит. Перечень этих команд следующий (в квадратных скобках указан hex-код команды):

Read ROM [33h] или [0Fh] (прочитать ПЗУ)

Эта команда позволяет мастеру шины прочитать из DS1990A код устройства (family code), уникальный 48-битный серийный номер и 8-битный CRC. Эта команда может быть использована только в том случае, если на шине присутствует только одно устройство DS1990A (для электронного замка это условие выполняется). Если на шине присутствует более одного подчинённого устройства, произойдёт коллизия данных, когда все slave-устройства начнут передавать одновременно (параллельно соединённые открытые стоки будут работать как логический элемент И). DS1990A будет одинаково реагировать как на код команды 33h, так и на код 0Fh для обеспечения совместимости с более ранней версией электронного серийного номера DS1990, который реагирует только на команду 0Fh.

Math ROM [55h], Skip ROM [CCh], Searсh ROM [F0h]

Не будем останавливаться на этих командах, поскольку для электронного замка они не нужны (подробности по ним см. в Книге Стандартов iButton фирмы Dallas Semiconductor).

Генерирование CRC.

Для проверки правильности данных, переданных из DS1990A (как, впрочем, и из других устройств iButton) master может генерировать значение CRC из принятых данных. Эта сгенерированная величина затем сравнивается с величиной, сохранённой в последних 8 битах DS1990A. Master вычисляет CRC от 8-битового family code и всех 48 бит серийного номера, но не от самой сохранённой в iButton величины CRC (от первых 7 байт содержимого DS1990A). Если две величины, вычисленная и считанная напрямую, совпадают, то передача была безошибочной. Для генерации CRC используется полином вида:

CRC = x8 + x5 + x4 + 1

Ниже приведён код из технического описания DS1990A фирмы Dallas Semiconductor для процессора с системой команд Intel 8051, реализующий алгоритм вычисления CRC.

DO_CRC:
; Процедура DO_CRC считает КУМУЛЯТИВНО CRC от всех данных, передаваемых в acc.
; Перед началом подсчёта в CRC надо поместить 0. Затем каждый байт помещается
; в acc, вызывается процедура DO_CRC, и величина CRC в ней обновляется.
; После того, как все данные прошли через DO_CRC, переменная CRC будет
; содержать результат (контрольную сумму). Эквивалентная полиномная; функция этой подпрограммы:
; CRC = X^8 + X^5 + X^4 + 1
mov         a, r7                        ;параметр  в C-функции передаётся через r7
push       acc
push       b
push       acc                            ;сохраним сдвигаемые биты
mov         b, #8                       ;установить сдвиг = 8 бит
CRC_LOOP:
xrl           a, CRC                     ;вычисляем CRC
rrc           a                             ;двигаем её в перенос
mov         a, CRC                     ;получаем последнюю величину CRC
jnc           ZERO                       ;пропускаем, если data=0
xrl           a, #18h                    ;обновляем CRC
ZERO:
rrc           a                              ;позиционируем новую CRC
mov         CRC, a                     ;запомним новую CRC
pop         acc                           ;получим оставшиеся биты
rr             a                             ;позиционируемся на следующий бит
push       acc                            ;сохраним оставшиеся биты
djnz         b, CRC_LOOP            ;повторим для восьми бит
pop         acc                            ;очистим стек
pop         b
pop         acc
ret

Более подробно принцип вычисления CRC описан в Книге Стандартов iButton фирмы Dallas Semiconductor.

Комментарии (0)
Только зарегистрированные пользователи могут оставлять комментарии!
 
Баннер

Рейтинг@Mail.ru Rambler's Top100 top100.sec.ru