В этом посте я опишу внутреннюю организацию энергонезависимой памяти кодера HCS200 и формат передаваемой посылки. Начало описания кодера HCS200 находится здесь.
Организация памяти EEPROM.
EEPROM организована в виде двухбайтовых слов:
- Адреса 0..3 – 64-х битный ключ шифрования;
- Адрес 4 – 16-х битная величина синхронизации;
- Адрес 5 – зарезервирован;
- Адреса 6..7 – 28-ми битный серийный номер;
- Адреса 8..9 – некоторое начальное 32-х битное число;
- Адрес 10 – зарезервирован;
- Адрес 11 – слово конфигурации.
64-х битный ключ шифрования - используется кодером, чтобы создать зашифрованное сообщение. Этот ключ создается и программируется во процессе изготовления с использованием алгоритма генерации ключа. Алгоритм генерации ключа может отличаться от keeloq алгоритма. Входные данные для алгоритма генерации ключа – серийный номер используемого кодера и 64-битный код производителя. Фирмой Microchip предложен определенный метод генерации ключа шифрования, тем не менее пользователь может создавать свой собственный метод генерации ключа.
Счетчик синхронизации – это 16-битная величина счетчика синхронизации, которая используется, чтобы создать динамический код для передачи. Эта величина будет изменяться после каждой передачи.
Серийный номер. Хотя под серийный номер отводится 32 бита, но только младшие 28 бит будут переданы. Серийный номер, должен быть уникальным для каждого кодера.
Начальное число – это 32-битное начальное число, которое будет передано, когда одновременно нажаты все три кнопки. Это позволяет разработчику системы выполнять безопасное обучение декодера или использовать эту фиксированную кодовую последовательность как часть различных процессов генерации / изменения ключа.
Слово конфигурации – 16-битное слово, которое содержит информацию о конфигураций устройства. Младшие 12 бит слова конфигурации – это дискриминационная величина, которая используется для проверки правильности декодирования динамического кода. Эта величина может быть любой. Обычно в качестве дискриминационной величины используют последние 12 бит серийного номера кодера. Далее идет бит, которым задается значение напряжения питания кодера. Эта информация необходима кодеру, чтобы определить, когда послать сигнал приемнику о критическом снижении напряжения питания. Когда этот бит установлен, значит предполагается использовать напряжение питания 9 или 12 вольт. Если бит сброшен, значит будет использоваться питание 6 вольт. Далее идет бит выбора скорости передачи и перекрытия кодовой последовательности. Последние (старшие) два бита зарезервированы (некоторые из них используются в HCS300 и HCS301).
Формат передачи
Пакет передачи HCS200 состоит из нескольких частей. Каждая передача начинается с преамбулы и заголовка, далее следуют зашифрованные данные и затем фиксированные данные. Фактическая длина пакета данных – 66 бит, который состоит из 32 битов зашифрованных данных и 34 битов фиксированных данных (рис. 1). Каждая передача сопровождается периодом задержки, прежде чем начинается другая передача. Зашифрованная часть обеспечивает до четырех миллиардов изменяющихся комбинаций кодов и включает биты состояния кнопки (основанные на том, какие кнопки были активизированы), значение счетчика синхронизации и величины дискриминации. Фиксированная часть состоит из битов состояния, битов состояний кнопок и 28-битного серийного номера. Фиксированные и зашифрованные части кода увеличевают число комбинаций до 7.38 x 10^19.
Рис.1 Организация кодовой комбинации в кодере HCS200.
Кодер автоматически продолжит передачу текущей кодовой комбинации до конца, если в процессе передачи кнопка будет отпущена. Кодер HCS200 включается, когда кнопка нажата и самостоятельно выключается после выполнения команды, если пользователь уже отпустил кнопку. Если кнопка удерживается в нажатом состоянии больше времени, чем необходимо для одной передачи, то в результате передача будет продублирована несколько раз. Если в процессе передачи нажата другая кнопка, то текущая передача будет прервана, и новый код будет сгенерирован, используя новую информацию о кнопки.