В статье кратко описана шина Pioneer System Remote (SR), представлены схема подключения RaspberryPi к шине System Remote и CLI программа на языке C для RaspberryPi, управляющая усилителем Pioneer M-10X через GPIO. В качестве разоблачения приведён способ применения этой программы.
В двух словах о Pioneer System Remote
Некоторые домашние аудио/видео компоненты производства Pioneer Corporation могут быть соединены друг с другом шиной управления, которая называется SR (аббревиатурное сокращение от System Remote). Целью такого объединения отдельных компонентов в единую систему является, конечно же, удобство потребителя, ведь при этом целой грядкой устройств можно управлять с одного пульта ДУ.
Коннекторы этой шины обозначаются как CONTROL IN и CONTROL OUT и выполнены в виде моно гнёзд mini jack 3.5мм. Поэтому соединения блоков по шине SR можно производить обычными двухконтактными аудио кабелями с моно штекерами mini plug 3.5мм (разъём типа TS, от Tip-Sleeve). Устройства соединяются последовательно, гирляндой: выход CONTROL OUT одного компонента соединяется с входом CONTROL IN другого. Контакт Tip разъёма несёт собственно сигнал шины SR, а вот с контактом Sleeve дело чуть сложнее. На некоторых компонентах (например, усилитель M-10X) здесь честная «земля», и тогда всё как положено: Tip — сигнал, Sleeve — «земля». Но есть компоненты (как правило, проигрыватели), которые используют контакт Sleeve разъёма шины SR для передачи цифрового аудио сигнала. В этом случае «земля» берется с корпуса компонента или с «земли» аналогового аудио разъёма. На самом деле, если «земли» компонентов каким-либо образом соединены, то про контакт Sleeve разъёма шины SR можно вообще забыть.
Управляющие коды шины SR являются ни чем иным, как демодулированными сигналами пульта ДУ. То есть шина SR это попросту проводной ретранслятор очищенных от несущей частоты IR команд. (В IR пультах модуляция кодов управления несущей частотой ~40кГц применяется для того, чтобы, во-первых, снизить энергозатраты на передачу и увеличить срок службы батареек пульта, а во-вторых, иметь возможность отстраиваться от сигналов чужих пультов ДУ). При поступлении IR команды от пульта ДУ активный SR-приёмник осуществляет ретрансляцию этой команды по шине SR. Команду видят все устройства, подключенные к шине. Компоненты производства Pioneer Corporation могут быть оснащенны одним разъемом шины SR (только входом либо только выходом), или двумя — и входом, и выходом. Вход, CONTROL IN, характеризуется наличием интерпретатора команд (специальной микросхемы; например, в усилителе M-10X это микросхема PD5637A), который и отвечает за декодирование и исполнение команд устройством. Однако следует заметить, что System Remote является именно общей шиной, и коды управления ретранслируются как на выходы CONTROL OUT, так и на входы CONTROL IN.
В простейшем случае управляющие коды являются двухбайтовыми, где первый байт это тип устройства, а второй байт — собственно код команды для исполнения на этом типе устройств. Ниже для справки приведен список типов устройств шины SR (первый байт команды управления):
- 0x73 Projectors
- 0xA1 Tape decks (Blu-ray Players)
- 0xA2 CD Players
- 0xA3 DVD Players
- 0xA4 Tuners
- 0xA5 Amplifiers (AV Receivers)
- 0xA8 Laserdisc Players
- 0xAB Video Recorders (DVD Recorders)
- 0xAA Plasma Displays
Устройства на шине SR не имеют выделенных адресов, шина не является адресной. Поэтому, например, если к шине подключены два CD проигрывателя, то многие команды с типом устройства 0xA2 будут выполнять оба проигрывателя одновременно. Кодов команд много, наборы команд зависят от типа устройства, года выпуска и даже от модели компонента. На одном из сайтов Pioneer Corporation, в разделе Custom Install по этой ссылке можно скачать коды устройств и команд управления для некоторых конкретных моделей.
Протокол передачи информации по шине System Remote довольно прост. Каждый компонент на контакте Tip разъёмов шины поддерживает +5В (TTL логика). Для отправки фрейма информации нужно в определённой последовательности и с определённой длительностью подавать на контакт Tip шины SR потенциал «земли» (0В). Pioneer, как и многие японские производители, использует в IR командах схему кодирования длительностью бита (bit-width codification), когда логический ноль кодируется импульсом длительностью 0,56мс а затем паузой 0,56мс, а логическая единица кодируется импульсом длительностью 0,56мс а затем паузой 1,68мс.
Рисунок 1. Кодирование длительностью бита.
Структура фрейма шины SR для двухбайтовых команд следующая:
- заголовок фрейма: в течение 9мс на шине удерживается потенциал 0В (пульс), затем в течение 4,5мс потенциал +5В (пауза)
- 8 бит: код типа устройства
- 8 бит: побитовое отрицание кода типа устройства
- 8 бит: код команды
- 8 бит: побитовое отрицание кода команды
- 1 бит: стоп-бит
На рисунке ниже приведена осциллограмма фрейма 0xA55A38C7 шины SR, передающего команду power toggle (код команды 0x38) усилителю (код типа устройства 0xA5):
Рисунок 2. Фрейм 0xA55A38C7 шины System Remote.
Усилитель Pioneer M-10X
Это усилитель мощности, из органов управления он имеет всего две кнопки: механическую кнопку Power и электронную кнопку Standby. Не густо. Но, к счастью, ещё он оборудован входом CONTROL IN шины System Remote и понимает три команды:
- цикл питания (power toggle) 0xA538
- включить питание (power on) 0xA558
- выключить питание (power off) 0xA5D8
Подключение RaspberryPi к шине Pioneer System Remote
Шина System Remote имеет TTL логику, напряжение меняется в диапазоне от 0В до +5В. На выводах же GPIO RaspberryPi напряжение может меняться в диапазоне от 0В до +3,3В, при этом защиты от перенапряжения для этих выводов на плате не предусмотрено. Поэтому напрямую управлять шиной SR с вывода GPIO нельзя, необходимо использовать преобразователь уровня.
Представленная здесь схема и является таким преобразователем. База транзистора Q1 через резистор R1 подключается к ножке P1-11 (GPIO17) RPi, коллектор транзистора через резистор R2 — к ножке P1-02 (5V) RPi, а эмиттер транзистора — к ножке P1-20 (GND) RPi. Программно управляя выводом GPIO17 (база транзистора Q1), на контакте Tip клеммника J1 (коллектор транзистора Q1) получаем сигнал нужного уровня для управляющих команд шины System Remote. Резистор R1 служит ограничителем тока базы, а резистор R2 — ограничителем тока коллектора транзистора. Когда на базе транзистора 0В (GPIO17 = 0), транзистор закрыт и на эмиттере удерживается потенциал +5В; когда на базе транзистора +3,3В (GPIO17 = 1), транзистор открыт и на эмиттере удерживается потенциал 0В. Поэтому, строго говоря, эта схема является инвертором сигнала с преобразованием уровня. На Рисунке 2 выше показаны осциллограммы работающей схемы: на верхнем графике — сигнал на коллекторе транзистора (шина SR), на нижнем графике — сигнал на базе транзистора (ножка GPIO17; реальный диапазон этого сигнала от 0В до +3,3В).
Для реализации схемы понадобятся:
- контактная макетная плата
- транзистор КТ3102 (Q1)
- резистор 1кОм (R1)
- резистор 10кОм (R2)
- клеммник с шагом контактов 2,54мм, для установки в макетную плату (J1)
- моно штекер mini plug 3.5мм (разъём типа TS)
- провода
Чтобы не возиться с пайкой штекера, можно вместо него взять готовый моно кабель с mini plug 3.5мм, отрезать коннектор с одной стороны, а проводники подключить к клеммнику J1.
Внимание! Будьте очень осторожны с пятивольтовыми ножками RaspberryPi (P1-02 и P1-04), ни в коем случае не закоротите случайно эти контакты с другими ножками платы, так как это выведет её из строя.
Программа управления питанием усилителя Pioneer M-10X для RaspberryPi
Исходный код программы для платформы Raspbian находится по этой ссылке. Код содержит вызов nice(-19), поэтому программа должна вызываться суперпользователем root. Для сборки программы нужно использовать команду:
gcc -o m10xptgl m10xptgl.c
После сборки нужно создать две символические ссылки с альтернативными именами m10xpon и m10xpoff на исполняемый файл:
ln -s m10xptgl m10xpon
ln -s m10xptgl m10xpoff
Программа генерирует на ножке GPIO17 фрейм управляющей команды для усилителя Pioneer M-10X. Фактическое действие программы (генерируемый фрейм) зависит от имени, под которым программа запущена:
- при запуске с именем m10xpon происходит включение усилителя (выход из состояния Standby, фрейм 0xA55A58A7)
- при запуске с именем m10xpoff происходит выключение усилителя (переход в состояние Standby, фрейм 0xA55AD827)
- при запуске с именем m10xptgl происходит переключение состояния питания усилителя (команда power toggle, фрейм 0xA55A38C7)
В качестве необязательного аргумента программе можно указать целое число, в этом случае фрейм будет последовательно повторён столько раз, сколько задано аргументом командной строки.
В целом проект простой, не сложнее учебного проекта по миганию светодиодом, только тут мы «мигаем» целым усилителем Pioneer.
Применение
Описанные в статье схему и программу удобно использовать, например, вместе с проектом shairport, потому что при этом мы получаем не только функцию AirPlay на старом усилителе, но и автоматическое включение и выключение усилителя on demand.
Собрать проект shairport из исходных кодов можно при помощи последовательности следующих команд:
apt-get install avahi-daemon mdns-scan libssl-dev libavahi-client-dev libasound2-dev
apt-get install libao4 libao-dev
apt-get install pulseaudio libpulse-dev
cd /root/src; git clone --depth 1 https://github.com/abrasive/shairport.git shairport
cd shairport
./configure
make
А запускать так:
shairport -v --name="M10X" --on-start="/usr/local/sbin/m10xpon 10" --on-stop="/usr/local/sbin/m10xpoff 10"
Спасибо за внимание.
Автор: photon_m