У цьому пості я опишу внутрішню організацію незалежної пам'яті кодера HCS200 і формат інформації, що передається посилки. Початок опису кодера HCS200 знаходиться тут.
Організація пам'яті EEPROM.
EEPROM організована у вигляді двобайтових слів:
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 включається, коли кнопка натиснута і самостійно вимикається після виконання команди, якщо користувач вже відпустив кнопку. Якщо кнопка утримується в натиснутому стані більше часу, ніж необхідно для однієї передачі, то в результаті передача буде продубльована кілька разів. Якщо в процесі передачі натиснута інша кнопка, то поточна передача буде перервана, і новий код буде згенеровано, використовуючи нову інформацію про кнопки.