Протокол управления CD-чейнджером

Продолжаем начатое. В этот раз я расскажу о том, что содержится в полезной нагрузке кадра I/K-bus, кратенько об устройстве информационно-развлекательной системы BMW e38, e39, e46, e53, и рассмотрим подробнее работу протокола на примере чейнджера компакт-дисков.
По логике вещей канальный уровень содержит в своих данных протоколы более высокого уровня. В I/K-bus так и происходит, только в нем нет протоколов сетевого и транспортного уровней на подобие TCP/IP. В кадре нигде нет информации об адресе сети, но межсетевое взаимодействие возможно. Выполняется оно посредством шлюза, который выполнен в блоке комбинации приборов. Суть работы шлюза проста — он знает в какой сети расположен тот или иной блок, в соответствии с этим пересылает кадр в другую сеть, если отправитель и получатель находятся в разных. Таким образом обеспечивается межсетевое взаимодействие на канальном уровне будто это единый сегмент сети. Рисунок ниже иллюстрирует подключение сетей в общей системе взаимодействия блоков управления.

58d8bfafc02e4f75be8e250944d41a7b.png

Следует уточнить, что левая схема справедлива для кузовов e38 и e39, e53 с блоком комбинации приборов повышенной функциональности (IKE high). В e39, e53 с базовым блоком комбинации приборов (KOMBI), а также в e46 шины I-bus и K-bus физически объединены в одну.

D-bus — это диагностическая шина (k-line). По ней подключается диагностическое оборудование. Эта шина не имеет физического подключения ко всем блокам управления, но через шлюз в IKE/KOMBI задача взаимодействия обеспечивается в полной мере. Для примера блок навигации подключён только к I-bus, но с помощью сервисного/диагностического оборудования мы можем считывать сервисную информацию, ошибки и производить кодирование.

То что содержится в полезной нагрузке кадра I/K-bus, я буду называть протоколом прикладного уровня. В основе своей он состоит из двух частей. MSG ID — идентификатор сообщения, занимает один символ. MSG DATA — информация дополняющая сообщение, может отсутствовать вовсе или занимать до 32 символов. На следующем рисунке показано, как это выглядит:

0fd212456725475ab585dcf05db6eb61.png

Так как символ состоит из 8 бит, получается возможных вариаций команд (CMD ID) 256. Немало, наверное даже с запасом, и мне известны далеко не все. Но на некоторых ключевых я остановлю внимание.

Сообщение с идентификатором MSG ID = 01 — запрос состояния устройства. Прежде чем взаимодействовать с каким-либо устройством, необходимо убедиться в его наличии и исправности. Эта команда отправляется устройству, в состоянии которого необходимо убедиться. При этом поле MSG DATA не заполняется. Чтобы информация о состоянии устройств была актуальна все время, команда повторяется переодически. Рассмотрим этот вид сообщения на примере кадра 68 03 18 01 72 (здесь и далее содержимое кадра обозначаться будет цифрами в шестнадцатеричном исчислении). Кадр отправляется от радиоприёмника (идентификатор устройства 68) к CD чейнджеру (18) с запросом о состоянии (идентификатор сообщения MSG ID = 01). CD чейнджер, если он есть и исправен, отвечает сообщением, подтверждающем статус готовности (MSG ID = 02). Полный фрагмент ответного кадра 18 04 FF 02 00 E1. Ответ вещается всем в локальную сеть, так как адрес получателя FF. Здесь помимо идентификатора сообщения передаются дополнительные данные — MSG DATA = 00. Если значение данных равно 01, то это означает что устройство только включилось и это его первое сообщение о готовности. Такой вариант диалога наблюдается между многими блоками управления.

Управление воспроизведением музыкальных треков, радиостанций или изменение уровня громкости возможно как с рулевого колеса так и с центральной консоли. Эти органы управления передают информацию на радиоприёмник по той же I-bus. Сообщения регулировки уровня громкости идентифицируется номером 32, а в данных содержится управляющая информация. Ниже приведена структура этого сообщения.

3a6968fdd38c45198d98f1a3054e43a4.png

Данные состоят из одного байта, в котором синий бит отвечает за направление изменения уровня: 0 — убавить, 1 — добавить. А зелёные биты показывают силу относительного изменения от 1 до 15 дискретных уровней. Например кадр, отправляемый при нажатии клавиши »+» на рулевом колесе, выглядит так 50 04 68 32 11 1F. Это сообщение заставляет радиоприёмник увеличить громкость на 1 дискретный уровень. Если резко крутонуть барашку управления громкости на центральной консоли по часовой стрелке, то в шину будет отправлен кадр C0 04 68 32 91 0F. Здесь мультиинформационный дисплей сообщает о требовании увеличить громкость на 9 дискретных уровней.

Для кнопочного управления характерны три вида сообщения: кнопка нажата, кнопка удерживается длительное время и кнопка отпущена. В данных сообщения, кроме состояния кнопки, передаётся её идентификатор. Например сообщение с MSG ID = 3B означает, что передаётся информация об изменении состояния кнопок на рулевом колесе, отвечающих за управление радиоприёмником и телефоном. MSG DATA состоит из одного символа и содержит информацию о кнопке, подвергшейся воздействию.

0bd87be7c7bd47849bb39accb1575618.png

В битах синего цвета обозначается кнопка. Если это 0-й бит, то было воздействие на кнопку «поиск вверх». Если 1-й бит, то кнопка «R/T». Если 3-й бит, то кнопка «поиск вниз». В битовой области зелёного цвета обозначается состояние кнопки. Если все биты равны 0, то это значит что кнопка нажата. Если 4-й бит равен 1, то было длительное удержание кнопки. Если 5-бит равен 1, то кнопка была отпущена. Рассмотрим ситуацию, когда мы переключаем музыкальный трек на следующий при нажатии кнопки на руле. В шину будет послано с небольшим интервалом два кадра: 50 04 68 3B 01 06 и 50 04 68 3B 21 26. Первый кадр сообщает, что была нажата кнопка «поиск вверх». Второй сообщает, что была отпущена кнопка «поиск вверх».

Для кнопочного управления на центральной консоли, будь то мультиинформационный дисплей или бортовой монитор, подход тот же — передаётся информация об идентификаторе кнопки и её состоянии. Но структура сообщения построена по иному.

Теперь рассмотрим в общем как устроена информационно-развлекательная система на автомобилях e38, e39, e53. А именно та её часть, отвечающая за воспроизведение музыки и радио. На рисунке ниже я представил схематично устройство этой части системы.

4d9bc56062454e1c9cf94ff92cb7299d.png

Центральную роль тут занимает радиоприёмник (RAD). Дело в том, что помимо функций приёма эфирных станций, этот блок выполняет функции усилителя. Если автомобиль не оборудован бортовым монитором, то в корпусе радиоприёмника располагается кассетный или CD проигрыватель. В таком варианте он располагается в центральной консоли. Если же автомобиль укомплектован бортовым монитором, то радиоприёмник располагается в багажном отделении и дооборудован аудио входом для кассетного проигрывателя. Кассетный проигрыватель вмонтирован в бортовой монитор.

Акустическая система может быть в трёх исполнениях: простая стереосистема, Hi-Fi или Top Hi-Fi. В первом случае радиоприёмник напрямую подключён к динамикам. В Hi-Fi акустической системе динамиков больше и они подключены к радиоприёмнику через дополнительный усилитель. Такой усилитель помимо повышения мощности аудио сигнала выполняет функции активной эквализации под автомобильную акустику и разделяет звук на диапазоны для соответствующих динамиков. Система top Hi-Fi ещё круче. В ней помимо всего выше перечисленного присутствует сабвуфер, а силитель выполняет эквализацию в зависимости от скорости автомобиля, тем самым компенсируется шумность салона. Так же система дополнена эффектом объёмного звучания.

Отображение информации о выбранном источнике воспроизведения, номере трека, частоте радиостанции и прочее, а также управление выполняется на центральной консоли посредством бортового монитора или мультиинформационного дисплея или чего-то ещё. Чтобы не отвлекаться от управления автомобилем, управление воспроизведением аудио может быть выполнено на многофункциональном рулевом колесе (MFL), о котором упоминалось выше.

CD-чейнджер (CDC) выполнен как дополнение к радиоприёмнику. Обмен управляющими командами и ответами производится только между радиоприёмником и CD-чейнджером. Делается это по I-bus, как вино на схеме. Аудио сигнал в аналоговой форме передаётся на линейный вход радиоприёмника, где усиливается и поступает далее на акустическую систему. Если акустическая система top Hi-Fi, то сигнал от CDC подаётся напрямую к усилителю в цифровой форме.

Теперь рассмотрим подробнее непосредственно сам диалог CD-чейнджера и радиоприёмника по шине I/K-bus. Как было описано ранее, радиоприёмник переодически отсылает запросы о статусе CD-чейнджера. Если такой присутствует в автомобиле и он исправен, то незамедлительно в шину будет отослан ответ о присутствии. Получив ответ, радиоприёмник формирует в меню на центральной консоли дополнительный режим воспроизведения, в котором источником является CD-чейнджер. Водителю остаётся только нажать соответствующую кнопку, чтобы радиоприёмник запустил воспроизведение с CD-чейнджера, получил информацию о загруженном компакт диске, номере трека и отобразил эту информацию на центральной консоли.

Управление воспроизведением CD-чейндра выполняется сообщением с идентификатором MSG ID = 38. Структура сообщения следующая:

3565efc10ba94783970f58e738af2b0e.png

Как видно, сообщение простое по структуре и содержит два ключевых параметра: CMD и ARG. В CMD передаётся код требуемого режима воспроизведения, а в ARG дополнительные данные. Для наглядности и простоты понимания, ниже представлена таблица, в которую сведены мне известные команды:

be2019899ebd4e55b8210ab39df9e747.png

Таким образом выполняется управление CD-чейнджером, а тот в свою очередь поддерживает обратную связь сообщениями с идентификатором 39:

76abd110fa0a4d189a6a85366b6bef80.png

В данном сообщении передаётся состояние CD-чейнджера и его режим воспроизведения. Более подробно о каждом символе сообщения в следующей таблице:

9db919d0bf2e43078bd5230485d65d76.png

Следует отметить, что есть команды управления от радиоприёмника, на которые CD-чейнджер должен отсылать незамедлительный ответ, как подтверждение принятия команды, иначе команды будут отправляться по таймауту 500 мс повторно. К таким командам относятся: «начать воспроизведение», «остановить воспроизведение», «перемотка», «режим случайного выбора треков» и «режим сканирования треков». Получив команду с соответствующим идентификатором CMD, CD-чейнджер на требуемый запрос изменяет индикатор состояния и отсылает сообщение радиоприёмнику. В случае команды «перемотка» индикатор остаётся в режиме простого проигрывания, только меняется статус на «FAST FORWARD» или «REWIND». Радиоприемник успокаивается, что команда принята успешно и перестаёт бомбить повторными сообщениями.

Далее хочу привести лог трафика I/K-bus, где к шине подключены три устройства: мультиинформационный дисплей, радиоприемник и программный эмулятор CD-чейнджера. Эту простую сеть я собрал у себя на столе, чтобы проводить анализ работы взаимодействия блоков управления и отлаживать программный CD-чейнджер.

500c1519d6964be6982d27b7d773f299.png

Цветом здесь выделены сообщения управления CD-чейнджером и ответы на них.

  • Желтый — это переключение на предыдущий трек.
  • Зеленый — включение и выключение перемотки
  • Синий — включение и выключение режима произведения треков в случайном порядке.

Подводя итог, хочу сказать, что применив данный протокол на простейшем программно-аппаратном решении, можно «легально» вклиниться в штатную информационно-развлекательную систему автомобиля. Как самый простой пример создать свой функциональный по современным меркам медиа проигрыватель, который будет получать управляющие команды с рулевого колеса, центральной консоли и издавать звучание по штатной акустической системе.

Испльзованные источники:

  • Bus System Troubleshooting, 2001
  • I-BUS Inside, Franck Touanen, 2002

© Habrahabr.ru