Кодграббер статичного кода.

внешний вид
После того, как открыл для себя покупки через интернет, оказалось у меня несколько устройств из Китая:
— сигнализация GSM с беспроводными датчиками и брелками постановки/снятия
— блок с 12 реле, управляемых от пульта
— дверной звонок с радиокнопкой
Вскрытие показало, что передающие брелки и датчики этих устройств практически одинаковые.
По названию микросхем Гугль подсказал, что принцип формирования пакетов у них одинаковый.
Далее описано как можно принимать и расшифровывать посылки с таких устройств.

Все эти устройства работают по одному протоколу
Для описания протокола приведу рисунки из datasheet на микросхемы SC2272 и RT1527.
пакет RT1527
Перед посылкой каждого пакета данных передаётся «бит синхронизации», преамбула.
Дело в том, что когда передатчик молчит, на выходе приёмника присутствует случайный шум. Частые случайные переключения «0»/«1».
Для того чтобы начать принимать полезные данные — ждём молчания на выходе приёмника — «бит синхронизации».

За битом синхронизации передаются сами данные. Здесь у разных микросхем — разная трактовка.
Например у RT1527 — короткий импульс = бит «0», длинный импульс = бит «1»,
тайминги RT1527
а у SC2272 — последовательность двух коротких = бит «0», последовательность двух длинных = бит «1», последовательность короткого и длинного — бит «F».
тайминги SC2272

Но в любом случае соотношение времён импульсов имеет некоторую закономерность:
если принять время короткого импульса за 1t, то
при передаче короткого импульса — соотношение импульса и паузы 1t/3t,
при передаче длинного импульса — соотношение импульса и паузы 3t/1t.
время передачи «бита синхронизации» будет 32t.
Время t для микросхем передатчиков задаётся внешним резистором Rosc.
Мне встречались значения 1,5M, 3,3M, 4.7М.
При продаже датчиков продавцы обычно указывают частоту, на которой работает датчик и резистор, задающий тайминги.

В некоторых датчиках джамперами выставляется Rosc и передаваемые биты.
универсальный датчик
при разных Rosc этого датчика получились следующие тайминги:
Rosc = 4.7M, 1t = 0.395ms, 3t = 1.211ms, 31t = 14.770ms
Rosc = 3.3M, 1t = 0.265ms, 3t = 0.838ms, 31t = 10.033ms
Rosc = 1.5M, 1t = 0.119ms, 3t = 0.392ms, 31t = 4.577ms

Обнаружив такое соотношение таймингов придумался следующий алгоритм приёма с автоматическим определением «биттайминга»:
1. Ждём чтобы на выходе приёмника уровень «0» был дольше чем 4мс — «бит синхронизации». Измеряем длительность этого «0», и по нему рассчитываем времена длинного и короткого импульса последующих передаваемых данных.
Ещё раз напомню — длительность «0» бита синхронизации 31t, короткого импульса 1t, длинного импульса 3t.

2. После приёма «бита синхронизации» пытаемся принять всю посылку. Следим, чтобы импульсы примерно попадали в рассчитанные времена, и учитываем что за коротким импульсом следует длинная пауза, за длинным импульсом — короткая пауза, после передачи пакета следует «бит синхронизации».
Если при приёме что-то не попало в своё время — сбрасываем приём и возвращаемся к ожиданию преамбулы.

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

Перейдём к железу.
Все мои эти радиоустройства работают на частоте 315МГц. Только конпка от звонка «Космос» 433МГц.
Через интернет были приобретены модули на 315 и 433 Мгц. Там где я покупал продаются сразу в паре, приёмник+передатчик.
радиомодули приёмник и передатчик

Собрано в корпусе от пульта ИК ДУ. Специально был выбран наиболее «пузатый» пульт, места в нём оказалось достаточно.
Плату не разводил, технологией ЛУТ не владею. Поэтому всё сделано на макетной плате с кучей проводов, изоленты и термоклея.
внутренности

Контроллер STM32F103R6T6A. Для программирования по SWD используется аудио разъём jack3.5, установленный на место светодиода пульта ДУ.
Рядом разъём для SD карточки, на которую записываются успешно принятые коды.
SD карточка и jack 3.5 для программирования"

Включение устройства — вставлением SD карточки. При установке карточки замыкаются контакты и минус батареек подключается к минусу схемы.
замыкаем контакты - включаем питание
SD карточка подключена через SPI. У STM в этом семействе контроллеров есть аппаратный SDIO, но в контроллерах с большими объёмами памяти. То что в этом нет SDIO выяснилось уже после покупки контроллера. Поэтому пришлось переходить на SPI. В нём по-моему не поддерживаются SDHC карточки, благо нашлась какая-то старинная карточка на 16 Мб.

Индикатор от Nokia 1616. SPI 9-бит через «ногодрыг», прямое программное управление ножками контроллера. Подпаяться к индикатору проводками — то ещё развлечение, шаг 0.6мм, две штуки угробил, прежде чем получилось.

Приёмник никак не захотел работать от 3В, даже 4,5 ему мало.
Поэтому питание от двух Li-ion элементов 10440 размера AAA, установленных в штатные места пульта. Элементы чуть длиннее батареек ААА, но влезли. Дальше стабилизаторы на 5В для приёмника и 3.3В для контроллера и дисплея. Ток потребления схемы 35мА. На сколько хватает этих аккумуляторов пока не проверял.
Li-ion аккумуляторы в сравнении с ААА и АА

Так же установлены два передатчика, на 315 и 433МГц, к ним ещё не подступался. Теоретически — просто сформировать на входе передатчика требуемую нам последовательность импульсов.

Дополнительно в корпус устройства вкручено два винта, подключённых к контроллеру проводками — считыватель 1-wire шины, для запланированных экспериментов с домофонными ключами.
i-Button reader  :-)

Компилятор Keil. Исходники в приложении.

Для того чтобы использовать кнопки от пульта IR на вход контроллера подаётся сигнал, который шёл на излучающий светодиод.
Теория ИК ДУ много где описана, повторяться не буду.
Только в нашем случае получим сигнал не как с фотоприёмника, а модулированный. Импульсы единиц будут не сплошные, а виде пачки импульсов. Как в левой части рисунка.
IR
Программно обрабатываю это так: пока импульсы идут часто, значит принимаем «1» и просто суммируем времена этих коротких импульсов.
Когда пауза достаточно длинная, значит приняли «0», а всё предыдущее насуммированое было «1».
Если пауза совсем уж длинная, то значит передача закончилась, начинаем разбирать что мы там такого напринимали.

В итоге устройство умеет:
— определять нажатия на клавишах пульта
— принимать на частотах 315МГц и 433,92МГц одновременно, выделять и «расшифровывать» посылки указанного выше типа
— записывать в текстовый файл на SD карточку принятые коды
— читать код с домофонных таблеток

В перспективе:
— передавать произвольный код на частотах 315 и 433,92
— записывать перезаписываемые заготовки для домофонных ключей

С чего всё начиналось
P.S. Немного проясню откуда взялись здесь домофонные ключи. После всех экспериментов понял, что пользоваться сигнализацией, снятие с охраны у которой производится при помощи такого кода я не буду. Небезопасно это.
В итоге из GSM сигнализации был выпаян контроллер, проводками подпаян на его место STM32, и добавив к данной программе кусок для работы с SIM300, получил вполне вменяемую сигнализацию со снятием с охраны домофонным ключом.
  • +12
  • 10 августа 2012, 01:04
  • r_o_m_k_a
  • 3
Файлы в топике: Grabber STM32.zip, Encoders.zip, samples Logic-U.zip

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

RSS свернуть / развернуть
НИ ФИГА СЕБЕ!!! Лутом не владеете, а такой девайс запилили, да еще и на СТМ !
0
Да тут и Тиньки или PICа хватило бы. Алгоритм — то простой. Достаточно одного-двух таймеров, а с учетом того, что фактически однозадачный — так даже и с программными задержками.

Кстати, автор не помянул, (хотя это легко видно в даташитах), что в большинстве этих кодеков брелков (PT2264/PT2294, SC2262, SC2272 и их клонов), просто всегда поочередно передается состояние 12 входов. Часть из них соединена с кнопками, оставшиеся — используются для задания адреса, (обычно не более 7 штук), и соединяются на плате обычно капельками припоя с питанием или 0, или остаются свободными. Сответственно, и передается не 2 состояния (1 и 0), а 3, — 1, 0, и «Обрыв».

Состояние каждого входа передается ДВУМЯ импульсами! Период их равен 16 тактам генератора, длина — 4 или 8 тактов. Соответственно, передача состояния каждого входа — 32 такта.
Период синхроимпульса = 128 тактов, длина — 4 такта.
«0» — передается двумя короткими импульсами (по 4 такта).
«1» — передается двумя длинными импульсами (по 12 тактов).
«Обрыв» (плавающее состояние) — передается первым — коротким, вторым — длинным импульсами.

Вся кодовая последовательность = 128 тактов синхроимпульса + 384 такта на состояния 12 входов = 512 тактов генератора. Повторяется 4 раза подряд.

При длительном нажатии кнопки идет непрерывный повтор этих четверок.

Как видите, все еще проще. И необязательно мерять частоту генератора и вычислять длину импульсов. Достаточно сделать выборки с частотой раза в 2-3 выше тактовой, и определить по соотношению длительности пар импульсов, какому из 3х состояний каждая пара соответствует. А частоту генератора и все остальное можно посчитать, определив время передачи одной последовательности (от одного синхроимпульса до другого).

Если же надо просто запомнить и выдавать после кодовую последовательность (нажатие кнопки), можно еще проще. Просто сканируя частотой выше тактовой, записать последовательность в память, сжав ее при этом до частоты 1/4 тактовой, (получим 8 бит на вход, или 12 байт на команду), и потом выдавать ее со скоростью 4 такта пульта на записанный бит (32 такта на байт). С этим справится любой самый мелкий 8-ногий PIC или тинька…
0
согласен, контроллер подошёл бы и какой-нибудь попроще, но последнее время осваиваю STM32, и это ещё одна возможность «набить руку»

насчёт кодеков брелков — в даташите на RT1527, один бит передаётся одним импульсом, сначала 20бит ID, затем 4 бита состояние кнопок. Вообщем бывают разные кодировки.
Хотя, для удобства восприятия, на экран у меня выводится в формате как для кодировки двумя битами, импульсы группируются попарно
«0» — два коротких,
«1» — два длинных,
«F» — короткий + длинный,
добавлено состояние «X» — длинный + короткий
добавлены состояния «y» и «Y» — если в посылке нечётное число импульсов, и она оканчивается на «0» или «1» — в брелке от звонка «космос» установлена cs5211agp, она и даёт такие посылки. Даташит на неё не нашёл, чтоб понять почему так.

насчёт сканирования с завышеной частотй — не совсем понимаю. С приёмника постоянно сыплются какие-то импульсы, и определять начало полезного сигнала всё=равно придётся.
Если не трудно — опишите на словах алгоритм приёма.
0
Все имеющиеся у меня брелки (а у меня их — десятки, от 2 до 12 кнопок), в том числе и как два таких, как у вас слева, — на PT2264/PT2294. Некоторые — SC2272, но у них даже даташит один.

RT1527 — ни разу не видел… Правда, у меня в основном этой фирмы:
www.honestdz.com/english/product_show.asp?productid=46
0
отвечу сам себе, чтобы людей не путать
cs5211agp даёт нормальное, чётное число бит, ошибка у меня в программе
в файле «UNIT_Timer2.c», строка 127, условие цикла — не просто меньше, а меньше или равно
0
Сурово, одним словом — зачет!
0
Впечетляет…
0
Этож до каких конструкций человека доводит его «хотелка». И без особых технологий! А если у него все инструменты под рукой начнет космические корабли собирать?! Зачет за креативность.
0


у меня еще 2 таких пульта и там внутри трансивер cc1010 или как его там
прошивки под него с нуля уже написаны
0
интересный пульт, спасибо за информацию
0
вот только не могу найти где такие приобрести можно
0
больше нигде
это был проект в паре европейских стран для работы через телетекст и модем
у меня и модем с радиоканалом есть даже и были модули с лан портом

проект загнулся, т.к. европейское быдло не хотело платить за такую лажу
а пульты нахаляву вообще давали и я взял себе и родителям
лежат уже 5 лет без дела
0
ОЧень круто! Я сейчас играюсь со снятием данных с сенсора погодной станции, но алгоритм беру готовый. Все получается только плохо как-то с дальностью приема данных от сенсора. Хотя приемник брал высокой чуствительности супергетеродин.
0
Зачетный прибор.
Я правильно понял, что он может захватить посылку, запомнить и выкинуть её при желании в эфир?
Если так, то прибором можно даже недорогие авто-сигнализации вскрывать. Они тоже на 433МГц работают.

А лутом нужно овладевать, негоже таким приборам быть на соплях собранным.
0
  • avatar
  • Bonio
  • 10 августа 2012, 13:36
Да, если дописать софт, то сможет. Но у сигналок автомобильных кодирование уже посерьёзней. Хотя, если задаться целью с этим разобраться, то всё возможно.
Ещё, чтобы сбивать посылки от сигналок передатчик желательно помощнее.

Недавно ради любопытства погуглил насчёт вскрывания сигналок. Понравилось красивое решение — в брелке от сигнализации с двусторонней связью меняется прошивка, и получается очень интересная «штучка», умеющая принимать и передавать на частоте 433,92МГц — на этой частоте практически все сигналки работают. Но, как я понимаю в основном для шлагбаумов реально использовать, в автомобильных сигнализациях серьёзная криптозащита.
0
Не во всех. Есть простенькие сигналки, работающие со статическим кодом, не имеющие никакого шифрования. По сути ничем не отличаются от ДУ, что на фотках.
0
В автомобильных сигналках уже лет 10 применяются «Прыгающие» коды, при каждом нажатии там код формируется по определенным (довольно сложным) правилам. Простой перехват поэтому давно уже не работает.
0
Применяется, но не везде! Простые сигналки, без обратной связи и всяких наворотов работают со статическим кодом.
Вот только что, специально снял лог. анализатором посылку с брелка от моей машины.
Как видно, посылки абсолютно одинаковые, специально сравнивал в фотошопе, они действительно одинаковы.


0
Жесть. Такое ещё осталось? Если уж Keeloq давно легко вскрывают, то такое… Как оно называется? Я такое последний раз видел в SherKhan5 лет 5 назад.
0
Чет на первый взгляд вроде как одинаковые… Но присмотревшись вроде различаются! Жаль вторая картинка не открывается=)
0
Скажите пожалуйста, а какая зависимость таймингов/такта от Rosc в передатчике? Насколько я видел, в даташитах приводятся только параметры пар резисторов для передатчика-приемника. Конкретно интересует при наиболее распространенном варианте 4.7 МОм в передатчике, 820 кОм в приемнике.
Заранее благодарен!
0
  • avatar
  • ARMag
  • 14 августа 2012, 16:18
На универсальном датчике с джамперами получились следующие тайминги:
Rosc = 4.7M, 1t = 0.395ms, 3t = 1.211ms, 31t = 14.770ms
Rosc = 3.3M, 1t = 0.265ms, 3t = 0.838ms, 31t = 10.033ms
Rosc = 1.5M, 1t = 0.119ms, 3t = 0.392ms, 31t = 4.577ms

Добавил в основной текст.
0
Мне тоже попался такой брелок, сделан на cs5211agp. Поставил люстрю домой. Дом двухэтажный хочется чтобы один пульт был на верху другой низу. Я так понял что у этой микросхемы ножки с 11 по 18 это ножки адреса? То есть если потянуть к земле, или к питанию одинаково то два пульта будут работать с одним приемником? Верно?
Кстати даташит на нее или на аналог ее никто не находил? Хоть на китайском, главное разобраться что ножки значат, да цифорки поглядеть.
0
Если второй пульт перемычками сконфигурировать как родной, если совпадает частота 433/315МГц и резистор, задающий тайминги то можно будет управлять вторым пультом.

Посмотрел я на свою cs5211agp, у неё ножки выбора адреса — 1..8, есть возможность притянуть к питанию/земле или оставить в воздухе. pdf на неё я так и не смог найти.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.