Обучаемый 433МГц пультик для клонирования статичного кода.


Эта статья является небольшим логическим продолжением статьи «Кодграббер статичного кода».
На пробу были приобретены «обучаемые брелки для копирования», чтобы посмотреть как это сделано.
Стоимость примерно 120 и 140 рублей за штуку.
Заявлено, что эти брелки позволяют записать посылку из существующего устройства и воспроизвести по нажатию кнопки. Ограничены протоколом посылок SC2262 и подобных.
Далее мы посмотрим что у них там внутри и попробуем настроить под себя.

Первым сюрпризом было то, что в одном из брелков используется элемент А27, который тоньше А23. Пришлось дозаказывать ещё и батарейки.

Пробуем обучить.
Перед обучением стираем все запомненные ранее коды, для этого одновременно нажимаем две верхние кнопки и удерживаем какое-то время.
Светодиод загорится, потом заморгает.

Для обучения нажимаем и удерживаем обучаемую кнопку. Вплотную подносим копируемого и включаем на передачу.
Светодиод заморгает, значит сигнал пойман и записан.
После этого обученная кнопка при нажатии и удержании будет выдавать в эфир запомненный код.
Перезаписать отдельную кнопку нельзя. Сначала стираем всё, затем программируем каждую кнопку.

Всё работает как и описано, но возникают трудности с копированием слабых сигналов.
Чувствительность приёмника в копировщике «никакая», подносить приходится антенна к антенне.
К тому же, хочется записывать коды просто «из головы», не копировать, а самостоятельно составлять и воспроизводить.


Немного реверс-инжиниринга.
Внутри пультика видим различную мелкую рассыпуху, четырнадцатиногую микросхему без маркировки и EEPROM с I2C интерфейсом AT24C02.
Вполне очевидно, что все данные хранятся внутри внешней EEPROM, осталось только понять что и как там хранится.
Впоследствии оказалось, что при внешней схожести микросхем основного контроллера в брелках, они всё-таки разные. Используют разные адреса, по разному запоминают данные.

Начнём с брелка с антеннкой.
Подключаем логический анализатор «USBEE» к пинам SDA и SCL микросхемы EEPROM.
Стираем, обучаем, воспроизводим и при этом смотрим, какие адреса и данные EEPROM используются.

В процессе выяснилась непонятная особенность работы логического анализатора.
Это недорогая китайская поделка на CY7C68013, которая может притворяться и USBEE и Logic-U.
Оказалось Logic-U почему-то не распознаёт часть посылки.
На картинках видно, что не рашифровывается считываемый байт.

Logic-U
Logic-U не может декодировать байт

USBEE
USBEE удачно справляется с декодированием
Разбираться я не стал, воспользовался USBEE софтом, хотя Logic-U удобнее.

После некоторых экспериментов с клонированием различных пультиков получаем:
базовый адрес в EEPROM для каждой кнопки:
Верхняя правая: 0x06
Нижняя правая: 0x10
Верхняя левая: 0x1A
Нижняя левая: 0x24

данные для каждой из четырёх кнопок
base_addr+0x00 — признак что кнопка запрограммирована (0 — запрограммирована)
base_addr+0x01 — записывается 0, при чтении не используется
base_addr+0x02 — тайминг 1t, ориентировочно 340 ед/мс (для расчёта значения необходимо время 1t в мс умножить на 340)
base_addr+0x03 — младшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x04 — средние 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x05 — старшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x06 — записывается 0, чтается при воспроизведении
base_addr+0x07 — записывается 0x18, может быть количество байт в посылке
base_addr+0x08 — тайминг 1t, дублируется base_addr+0x02

Формируем свою посылку.
Теперь попробуем заставить брелок воспроизводить любой код в формате SC2262 и подобных.
Например, для управления радиоуправляемой розеткой из статьи на хабре "«Заводим» радиоуправляемые розетки без пульта".

Переключателем розетка может быть настроена на один из восьми каналов.
Запрограммируем наш пультик так, чтобы управлять на четвёртом и пятом каналах.

4 канал, код включения «000100001000»
в формате HS2272
«0» — соответствует «короткий + короткий импульс»
«1» — соответствует «длинный + длинный импульс»
«F» — соответствует «короткий + длинный импульс»
тайминги SC2272

в формате обучаемого брелка каждый импульс кодируется одним битом
0 — короткий импульс
1 — длинный имульс

значит «000100001000» преобразуется в 000000110000000011000000 = 0x0300C0 (в память оно ляжет младшим байтом вперёд).

Аналогично:
4 канал, код выключения «000100000000» преобразуется в 0x030000
5 канал, код включения «011000001000» преобразуется в 0x3С00С0
5 канал, код выключения «011000000000» преобразуется в 0x3С0000

Настройка таймингов.
Вскроем наш приёмник сигналов, и посмотрим какой резистор Rosc установлен у микросхемы HS2272.
По цветовой маркировке получается 390К, тестер показывает 394К.
По графику из pdf пытаемся прикинуть частоту OSC, но в разных pdf по разному рисуют графики зависимости.
Поэтому, напрямую осциллографом смотрим частоту на OSC2 ножке микросхемы.
У меня получилась частота около 70 КГц.
В pdf написано что при приёме в импульс должно помещаться от 2,5 до 8 клоков OSC.
Расчётное значение 1t получается 0,114 мс, но с таким таймингом приёма нет.
На практике получилось, что работает с таймингами 1t = 0,150-0,350 мс. Всё что быстрее или медленнее не принимается.

Почему так — не понимаю, если больше поэкспериментировать с разными приёмниками, то может чего и прояснилось бы.

Выберем значение «с потолка» 0,25 мс * 340 = 85 (0x55).

Запрограммируем любым доступным I2C программатором (CH341 например), подключившись к SDA, SCL, GND, VCC ножкам EEPROM.

левая верхняя кнопка — включение канала 4
с адреса 0x1A запишем данные 0x00 0x00 0x55 0xC0 0x00 0x03 0x00 0x18 0x55
левая нижняя кнопка — выключение канала 4
с адреса 0x24 запишем данные 0x00 0x00 0x55 0x00 0x00 0x03 0x00 0x18 0x55
правая верхняя кнопка — включение канала 5
с адреса 0x06 запишем данные 0x00 0x00 0x55 0xC0 0x00 0x3C 0x00 0x18 0x55
правая нижняя кнопка — выключение канала 5
с адреса 0x10 запишем данные 0x00 0x00 0x55 0x00 0x00 0x3C 0x00 0x18 0x55

Перед заливкой данных через программатор, необходимо нажать и удерживать любую кнопку на пультике, иначе линии SDA и SCL притянуты к земле.

Проверяем, работает.
Дополнительно можно защитить от стирания, подняв 7 ножку EEPROM и посадив её на 8 ногу.

Второй брелок, без антенны с А27 батарейкой имеет другую «карту памяти».
Базовый адрес:
Нижняя правая: 0x0A
Нижняя левая: 0x14
Верхняя правая: 0x1E
Верхняя левая: 0x28

Данные:
base_addr+0x00 — признак что кнопка запрограммирована (см. примечание *)
base_addr+0x01 — младшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x02 — средние 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x03 — старшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x04 — тайминг 1t

*примечание — если у предыдущего брелка признак запрограммированности кнопки — значение 0 по соответствующему адресу (остальные значения воспринимаются как «кнопка не запрограммирована»), то здесь для каждой кнопки индивидуальные значения.
При стирании:
по адресу 0x0A пишется значение 0x30,
по адресу 0x14 пишется 0x3A,
по адресу 0x1E пишется 0x44,
по адресу 0x28 пишется 0x4E.
При запоминании:
по адресу 0x0A пишется значение 0x0A,
по адресу 0x14 пишется 0x14,
по адресу 0x1E пишется 0x1E,
по адресу 0x28 пишется 0x28.

Кроме того, при стирании по адресу 0x6E пишется 0x6E, при запоминании любой кнопки туда пишется 0x00.

Дополнительную сложность представляет то, что контроллер после окончания обмена с EEPROM не освобождает линию SCL, и мне не удалось записать EEPROM программатором не выпаивая микросхему.

Тайминги у контроллеров также отличаются. В первом брелке мы записывали 0x55, во втором оно сохраняется как 0x43.

P.S.
Хорошо бы сравнить дальнобойность этих брелков с какими-нибудь другими, необучаемыми.
Да и живучесть батарейки также может отличаться, потребление в режиме сна разное.
Но, мне кажется, что эти параметры будут примерно одинаковые.

Схему срисовывать не стал.
Вот фотографии с двух сторон, все дорожки навиду.

Комментарии (13)

RSS свернуть / развернуть
В процессе выяснилась непонятная особенность работы логического анализатора.
Это недорогая китайская поделка на CY7C68013, которая может притворяться и USBEE и Logic-U.
Оказалось Logic-U почему-то не распознаёт часть посылки.
Полагаю, это косяк софта, а не особенность анализатора.
то здесь для каждой кнопки индивидуальные значения.
Любопытно выглядят — на адреса похожи. А по адресам 30/3А/44/4Е какие-то данные есть?

Схему с брелков не снимал? Любопытно взглянуть на реализацию RF-части.
0
  • avatar
  • Vga
  • 13 июля 2015, 01:20
Полный дамп памяти у второго брелка не считывал.
Надо EEPROM выпаивать. Несложно вроде. Но «зачем»?

Схему, опять же, не снимал.
Мне не к чему, в RF я слабо разбираюсь, повторять самостоятельно не планирую.
0
Но «зачем»?
Из любопытства, очевидно же.
Мне не к чему, в RF я слабо разбираюсь, повторять самостоятельно не планирую.
Ну, для меня сними, мне интересно. А для себя ты получишь немного практики в реверсинге схем — благо, этот объект как раз удобен для практики (я бы порекомендовал левый, на правом слишком много дорожек под деталями).
0
Ну, для меня сними, мне интересно
Мне тоже, нас уже двое
0
Не, времени жалко тратить.
Обновил статью, крупные фотографии платы с двух сторон.
+1
Антенна часть загораживает. Что там под ней написано?
0
2014
1 2 3 4
5 6 7 8
9 10 11 12
0
RF там — круглая блямба сверху, похожая на транзистор серии МП. ASK/OOK передатчик, такой же как в самых дешевых китайских радиомодулях FS-1000A. Кроме этого какой-то ОТР МК типа холтековских, которые идут по цене чашки риса за кило микросхем.
0
Насколько я вижу, круглая блямба — резонатор. А передатчик в таких девайсах обычно построен на 1-2 транзисторах (кроме того, я явно вижу куски RF-части вроде фигурных дорожек-индуктивностей). Полагаю, приемник там тоже примитивный, особенно учитывая его чувствительность, возможно даже он на 90% состоит из элементов передатчика (примерно как в 3-транзисторных детских рациях). Вот именно на это мне и хочется взглянуть — вдруг подчерпну оттуда идеи по построению передатчиков, которые иногда могут работать как очень дерьмовые, но приемники?

С МК — это понятно, но эта часть и неинтересна, я ее могу нарисовать не глядя на плату — и, вероятно, ошибусь только в раскладке ножек.
0
Думаю вот это близко к правде:


По крайней мере на моём модуле именно такой расклад, каждой твари по паре: два транзюка, два кондюка, два резюка, две катушки и один хикки-резонатор.
0
Передача АМ, приемник реализуется достаточно просто — холостым выводом, ловящим наводки. От этого и подносить надо близко.
0
Малость не понял про холостой вывод (где он и как это работает). У меня так же есть обучаем брелок (могу фото сделать), другой компоновки и схемотехника. Его нужно не просто приложить к оригиналу, а иной раз покрутить один относительно другого, что бы код записать. Думал сначала, что чутье каким нибудь резаком задушили, видимо ошибся. Так что шлагбаум с соседского двора не сосканить видимо…
0
Просто никуда не подключенный вывод. За счет высокого входного сопротивления размах колебаний наводок становится достаточным, что бы переключить логические уровни на входе. Эбычно это паразитный эффект с которым борются, но ни кто не запрещает его использовать в своих целях.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.