Оригинальный текст был здесь: http://www.g7smy.co.uk/2018/02/hacking- ... ontroller/
Если у вас возникнут замечания по терминологии и поправки к переводу, прошу сообщить в комментариях.
http://www.g7smy.co.uk/2018/02/hacking- ... ontroller/
ИССЛЕДОВАНИЕ БЕСПРОВОДНОГО КОНТРОЛЛЕРА YONGNUO.
22 февраля 2018, KARL
Я написал это ещё в мае 2017 года, но так и не закончил, отвлекаясь на другие вещи, и мне был нужен радиосинхронизатор для фотосъёмки. Я написал все это, и было бы стыдно удалить текст, поэтому я публикую текст сейчас на случай, если там может быть что-то интересное внутри.
Применяю этот радиосинхронизатор Yongnuo в съёмке для управления несколькими вынесенными далеко от фотокамеры. Синхронизатор состоит из двух частей: передатчика, который подключается к башмаку на камере, и приёмников, в башмаки которых подключаются вспышки, один передатчик может управлять любым количеством приемников с вспышками в пределах заявленной 300-метровой дистанции. Передатчик с парой приемников можно купить на eBay приблизительно за 35 фунтов.
Беспроводной контроллер Yongnuo с частотным кодированием (FSK) 2.4 ГГц.
RF-600TX передатчик
RF-602RX приёмник
Я постарался:
- изучить, как подключаются вспышки,
- изучить, как работает трансмиттер – настолько, насколько я мог реконструировать схему,
- посмотреть, смогу ли управлять трансмиттером, применяя непосредственно Ардуино,
- посмотреть, можно ли так же управлять другими устройствами, работающими на тех же микросхемах,
- не повредить трансмиттер во время его изучения.
Внутри, на печатной плате вы найдете:
- Включатель питания on/off
- Двухцветный красно/зелёный светодиод
- Кнопку с двойным нажатием и двумя переключателями для ручного управления вспышкой
- Переключатель кода из 4 микропереключателей
- Неизвестный (без маркировки) микроконтроллер – MK
- приёмопередатчик A7105 диапазона 2.4 ГГц с FSK/GFSK модуляцией и внутренним переключением (ISM)
Version: 1.21
Date: 14/04/23 – 23 April 2014
Как сообщается в технической спецификации на A7105, он может работать как передатчик, так и как приемник, и использует интерфейс SPI для пользовательского управления, он, кажется, популярен в сообществах радиоуправляемых авиамоделей и дронов. Приёмник выглядит очень похожим по компонентам, использует тоже A7105 и неизвестный микроконтроллер. Я не рассматривал его в деталях и требуется аккуратность при разборке, так как есть три паянных соединения горячего башмака.
Приёмник RF-602RX
Подключение вспышки
В башмаке камер Canon имеется шесть соединений, но нам требуется изучить только три из них. Если смотреть на камеру сверху, объективом направленным вперед, обойма, в которую входит нога вспышки, заземлена, большая центральная точка - это синхроконтакт вспышки, чуть ниже этого и слева - контакт "готовности камеры". Я предполагаю, что остальные для функций E-TTL, и я не изучал их.
Примечание от переводчика. Автор текста указывает на контакт "№5, который называется STSPC = TTL OK signal / clock / сигналы TTL (фото)
Контакты горячего башмака Canon.
Исследуя горячий башмак мультиметром, можно видеть, что синхроконтакт показывает большое сопротивление, которое уменьшается до нуля в момент поджига вспышки. Я полагаю, это унаследовано от старых, механических камер. Напряжение на контакте "готовности камеры" становится высоким - около 5 Вольт, сообщая вспышке, что вы нажали кнопку затвора наполовину, объектив сфокусирован, и вы собираетесь сделать фотографию.
Чтобы определить длительность сигнала вспышки на башмаке фотоаппарата, я подключил почти разряженную батарею типа АА между землей и и синхроконтактом вспышки, что до дало 1,2 вольт и позволило измерять осциллографом (при проверке на самой вспышке Canon напряжение между синхроконтактом вспышки и заземлением составляет 4,47 вольт). Я обнаружил, что сигнал на вспышку посылается камерой в течение 352 мс, что довольно долго, с учётом того, что типичная выдержка затвора для фотосъемки с вспышкой равна 1/125 секунды, что равно 8 мс, хотя длительность импульса вспышки задаётся самой вспышкой, а не этим сигналом.
Запись процессов на вспышке.
Цепи микроконтроллера
Я потратил некоторое время на восстановление большей части схемы передатчика, и проигнорировал часть вспомогательных цепей схемы и кварцевого таймера, так как хотел изучить передачу данных. Детали также довольно маленькие и проблематично исследовать их стандартными щупами мультиметра.
Фрагмент схемы RF600TX.
Микроконтроллер, похоже, использует внутренние подтягивающие резисторы на входах, сигнал "готовности камеры" от башмака переключает транзистор, так, что на выводе 16 контроллера устанавливается низкий уровень.
Глядя на принципиальную схему, мы видим выход на антенну с вывода 8 микроконтроллера. При нажатии кнопки спуска затвора выводятся два разных прямоугольных импульса: один для готовности камеры, а другой для вспышки. Я думаю, что они модулируются на выходе передатчика для получения радиосигнала и упрощения конструкции передатчика. Если посмотреть осциллографом на выходной сигнал с 8 контакта, то можно увидеть достаточно четко два состояния:
Сигнал готовности камеры.
Сигнал на вспышку.
Эти прямоугольные импульсы всегда одинаковы, я думаю, что они могут измениться, когда будет выбран другой код через переключатели кода. Узел передатчика не принимает никаких радиоданных, и нет подтверждения на это со стороны вспышки.
Применение логического анализатора
Самое время разобраться с Logic Analyzer, это хитрое устройство, которое позволяет вам видеть обмен данными между микроконтроллером и трансивером. Я не хочу вдаваться в подробности, но думаю, что это может помочь в дальнейшем.
A7105 использует последовательный SPI-протокол данных. Шина Serial Peripheral Interface использует четыре провода: Chip Select SCS, несколько чипов могут быть на одной шине SPI, но все они имеют разные соединения SCS, чип главного контроллера использует SCS, чтобы сообщить подчиненному чипу, который он хочет использовать для обмена данными. Serial Clock SCK: используется для обеспечения синхронизации времени для обмена данными с фиксированной длительностью для максимумов и минимумов. Data SDIO: это данные, отправляемые микроконтроллером, а GIO1 - это данные от приемопередатчика, отправляемые в ответ, обычно для SPI это 8 бит, формирующие байт.
Используемые здесь условные наименования взяты из спецификации A7105. Шина SPI имеет стандартные имена для линий данных; SDIO - это MOSI - Master Out / Slave In, GIO1 - это MISO - Master In / Slave Out, а SCS - SS - Slave Select. В нашем случае микроконтроллер будет ведущим, а трансивер - ведомым.
SPI один ведомый
Логический анализатор отображает данные в форме, которая позволяет видеть логику, здесь мы можем видеть два байта данных:
Пример SPI данных.
Микроконтроллер (МК) отправляет данные по линии SDIO и прослушивает ответы на GIO1. Когда МК устанавливает низкий уровень Select SCS, это говорит приемопередатчику, что МК хочет поговорить с ним. МК отправляет командный байт, за которым следует пакетом один или несколько байтов данных. Во время события SCS данные передаются только во время работы тактовой частоты SCK.
Данные SPI, двоичные данные из низких и высоких уровней
Мы можем видеть, что логика на SDIO читается каждый раз, когда тактовые импульсы уменьшаются до низкого уровня, спадают, тактовые импульсы на линии SCK представляют собой бит данных, восемь тактов составляют байт. Теперь у нас есть двоичные данные: 00100101 - для удобства это преобразуется в шестнадцатеричный 0x25.
We can see that the logic on the SDIO is read every-time the clock goes low, falling edge, a clock tick on the SCK line represents a bit of data, eight ticks make a byte. We now have our binary data: 00100101 for convenience this is converted into hexadecimal 0x25.
При изучении шины SPI, нужно проверить все доступные таблицы данных, чтобы увидеть, установлены ли тактовые импульсы для падающего или нарастающего фронта, какой порядок битов: самый старший бит - младший бит или младший бит - младший бит, и длину данных (обычно восемь).
Смотрим на трансивер A7105
Блок-схема A7105 (более полную версию можно увидеть в спецификации)
Из спецификации A7105 шина SPI настроена следующим образом:
- для активации SPI необходимо установить низкий уровень на выводе SCS
- длина данных: 8 бит
- порядок бит: старший значащий бит (MSB) идёт первым
Подключение логического анализатора
В этой таблице показаны контакты ввода / вывода на трансивере и микроконтроллере, соответственно цвета проводов логического анализатора.
A7105 Описание Вход/Выход МК Цвет провода 11 SCS 3 Wire Chip Select I 9 жёлтый 12 SCK 3 Wire Clock I 10 оранжевый 14 SDIO Чтение/Запись I/O 12 коричневый 16 GIO1 4 Wire SPI Data Output I/O 11 красный 17 GIO2 4 Wire SPI Data Output I/O 13 белый GND Земля чёрный Trigger Out O 8 серый
Как A7105 обрабатывает данные
Трансивер имеет 2 режима работы, стробирование и управление. Существует восемь строб-команд для управления различными режимами, которые поддерживает чип, они имеют длину четыре бита и всегда начинаются с 1, когда приемопередатчик работает в 8-битном режиме, последние четыре бита игнорируются. Управляющие регистры имеют длину восемь битов и используются для настройки и чтения параметров из трансивера, они имеют длину восемь битов. Первый БИТ всегда равен 0, а второй - 1 для записи и 0 для чтения. В таблице ниже приведены примеры записи, чтения (или, точнее, запроса, приемопередатчик отвечает на GIO1) и команды стробирования, отправленной микроконтроллером.
Изучение данных A7105
Обмен данными на SPI происходит в течение двух событий: после включения передатчика и при нажатии спуска затвора камеры или кнопки на устройстве.
Включение
Выборка данных SPI при включении, показывающих событие SCS 48, см. спецификацию для получения более подробной информации
Когда вы включаете устройство, микроконтроллер инициализирует приемопередатчик несколькими сотнями байтов данных, я создал эту таблицу из данных SPI, данные hex data across - самое полезное представление для просмотра:
В итоге последовательность инициализации состоит из следующего:
- Микроконтроллер устанавливает большинство регистров управления по умолчанию.
- Внутренняя калибровка запущена, и микроконтроллер продолжает проверять, пока не закончит.
- Заключительная очистка.
- Перевод A7105 в режим ожидания.
В последовательности SPI нажатие на спуск затвора состоит из двух отдельных этапов: преамбулы и передачи. Преамбула выводит камеру из режима ожидания и устанавливает канал, по которому она будет передавать. Передача сообщает информацию о готовности камеры и состоянии вспышки.
Преамбула
В начале записи данных я вижу пакет преамбулы, отправленный через SPI:
Данные логического анализатора - первые пять байтов пакета преамбулы
Эта преамбула, по-видимому, появляется только тогда, когда вспышка срабатывает в первый раз после включения передатчика, последующее использование идет прямо на передачу. Пятый байт изменяется в зависимости от настройки DIL-переключателя на нижней стороне устройства, как вы можете видеть четыре примера, приведенных в таблице ниже.
Взяв первый пример, мы можем разбить его на части, чтобы увидеть, что делает каждый байт
Трудно понять, что здесь происходит, в соответствии со спецификацией, вы посылаете пакет данных 0xb5 0xf0 для передачи в FIFO Data 0x5и затем следует строб-команда TX mode 0xd0, но то, что передается, не имеет никакого отношения к пакету FIFO.
Нам нужно заглянуть глубже в последовательность инициализации и в спецификацию, у A7105 есть три режима передачи; легкий, сегментный и расширенный. Требуется небольшое расследование, чтобы выяснить, что это такое. Глава 16.4 спецификации показывает нам два регистра, используемые в последовательности инициализации, которую мы должны изучить:
В спецификации нет прямого указания, поэтому нам нужно пройти через описание каждого режима, чтобы увидеть, какой из них подходит лучше всего. Сегмент FIFO выглядит хорошо: "В сегменте FIFO длина TX FIFO равна (FEP [7: 0] - PSA [5: 0] + 1). FPM [1: 0] должен быть равен нулю". Итак, наши настройки: (FEP: 0b1 - PSA: 0b0) + 1 = 2. Количество байтов, отправленных нашим пакетом данных FIFO, также равно 2.
Дальнейшее чтение описания "Эта функция очень полезна для кнопочных приложений. В таком случае каждая кнопка используется для передачи фиксированного кода (данных) каждый раз. Во время инициализации каждый фиксированный код записывается в соответствующий сегмент FIFO раз и навсегда. Затем, если кнопка нажата, MCU просто назначает соответствующий сегмент FIFO (PSA [5: 0] и FEP [7: 0]) и выдает строб-команду TX".
Передача
При первоначальном рассмотрении данных, собранных во время нажатия кнопки затвора на выходе триггера (вывод 8 микроконтроллера), мы ясно видим переход из режима готовности камеры и вспышки, как мы видели на осциллографе ранее.
Данные логического анализатора
GIO2 показывает зеркало Trigger Out, но изменив масштаб данных, и я вижу, что он следует за сигналом Trigger. Глядя в таблицу инициализации при событии SCS, мы видим, что команда 0xc 0x1 была отправлена для установки функции контакта GIO2. Глядя на таблицу данных, кажется, что он установлен как сигнал "Я передаю", WTR - ждите окончания передачи или приема. Если я установлю низкий уровень на GIO2, соединив его с землей, вспышка не срабатывает, когда я нажимаю на спуск затвора.
Данные логического анализатора
Во время записи данных сигнал готовности камеры передавался шесть раз, а сигнал вспышки - тринадцать раз, я уверен, что это зависит от продолжительности времени, в течение которого я нажимал кнопку спуска затвора на камере.
Прошу извинить за незавершённый финал, но у меня не было времени продолжать эту тему дальше.
Ссылки и источники
- A7105 Datasheet and Product information
- Logic Analyser: https://www.ikalogic.com/scanaplus/
- SPI Data tutorial https://learn.sparkfun.com/tutorials/se ... erface-spi
- Arduino A7105 library: https://github.com/nh2/arduino-a7105
- Reverse Engineering a Hubsan X4 Quadcopter: http://www.jimhung.co.uk/?p=1424 with a description of the A7105 data
- SPI data bus and FSK – Frequency Shift Keying on Wikipedia