Шина i2c в магнитоле

Видео:Урок 24. Узнаём адреса устройств на шине I2CСкачать

Урок 24. Узнаём адреса устройств на шине I2C

Создание входа AUX магнитоле Kenwood GX806EF2 захватом шины i2c

Шина i2c в магнитоле

Герой заметки — магнитола Kenwood GX806EF2 — славна тем, что устанавливалась в очень большое число экспортных японских автомобилей (взять хотя бы Subaru Forester) и не имеет ни входа AUX для подключения внешних источников звука, ни возможности воспроизвести MP3-файлы с CD-дисков (с внешних накопителей тоже). Магнитола вышла весьма утилитарной для своего времени (2004-2007 года), несмотря на CD-чейнджер на 6 CD. CD-audio, FM/AM-тюнер, и всё, но кассетоприемника, к слову, уже нет.

Но все-таки сделать ей вход AUX можно без порчи внешнего вида и функциональности.

Попалась мне эта магнитола вместе с автомобилем. Вмонтировав андроид-планшет 7″ в будку для навигации я начал искать способы вывести звук с планшета на магнитолу, а покупать для этого новую «голову» совсем не хотелось.
Выяснилось, что многие отключают внутренний CD-чейнджер и подключают серийно производимые эмуляторы с возможностью воспроизведения MP3 через USB, например так, но мне это показалось излишним вандализмом с избыточными затратами.

Передачу звука с внешнего устройства можно решить еще с помощью FM-передатчика, но качество звука с таким вариантом очень плохое и здесь так же присутствует звено с лишними затратами на FM-передатчик и на его размещение в салоне.

В некоторых местах я находил упоминание про отрезание линии AM-тюнера от магнитолы и использование её остатка для внешнего звука, но это неосуществимо с конкретно этой магнитолой, в любых режимах тюнера сигналы идут по одной линии. Было решено проанализировать всю схему магнитолы на предмет «уязвимых» мест.

Склеенную схему главной платы можно посмотреть здесь. Вот интересная часть схемы:

Шина i2c в магнитоле

Искомое находится рядом с аудиопроцессором TDA7406 (IC203 на схеме) от STMicroelectronics. Красным я обвел шину i2c, которая связывает главный контроллер с микросхемой IC203, синим — неиспользуемые аудиовходы MD и TAPE. Как выясняется из даташита на эту микросхему, у неё есть 4 раздельных стерео аудиовхода и 4 раздельных моно аудиовхода. Однако, используются они не все, а неиспользуемые «заглушены» конденсаторами об землю (C233-C236 тому пример).

Изучив принцип работы TDA7406, я понял, что можно попробовать вклиниться в управление главным контроллером и задействовать неиспользованные звуковые входы когда это необходимо. Я подпаял на линии SDA и SCL (резисторы R855, R857) провода и подключил к ним логический анализатор:

Шина i2c в магнитоле

Выяснилось, что при штатном функционировании контроллер каждые полсекунды запрашивает по шине i2c статус у TDA7406. В этом запросе ничего интересного для нас нет — там флаги состояния TDA7406. Никаких команд управления в покое не встречается:

Самое интересное на шине происходит в момент переключения режимов CD/BAND и при изменении громкости. В таких случаях контроллер дает длинную посылку для регистров управления TDA7406. Эта посылка содержит настройки почти для всех доступных регистров. Вот пример посылки (её небольшая начальная часть):

Разберем это посылку:
0x8C (chip address) — адрес чипа TDA7406 со сброшенным битом R/W (контроллер собирается писать в регистры).
0x60 (subaddress) — адрес первого регистра, с которого начнется запись посылки и некоторые установки порядка записи (в данном случае запись будет производится с нулевого адреса, как впрочем и всегда, когда контроллер конфигурирует TDA7406: он всегда записывает конфигурацию начиная с регистра 0).
0x0E (регистр 0) — конфигурация для регистра 0, то что нам надо, судя по документации: это регистр Input Selector. В нем указывается какой вход аудиомикшера сейчас должен быть выбран и какое усиление (громкость) должно быть у этого канала:

Читайте также: Автомобильные шины зимние 15 радиус

При выборе канала тюнера и при дальнейшей работе с ним (повышение/понижение громкости), контроллер отсылает в поле Source Selector нулевого регистра биты 110. И это очень хорошо, поскольку для того чтобы задействовать под AUX вход MD надо передать в это поле биты 010. Для справки: шина i2c имеет подтяжки к напряжению питания и всегда свободна, а активный уровень на шине — ноль, т.е. управление ведется открытым коллектором (открытым стоком). В любой момент времени любую линию шины i2c можно «дернуть» к нулю без ущерба для всех устройств на этой шине.

Можно вклиниться в общение контроллера с аудиомикшером в нужный нам момент и превратить режим FM в режим MD. Единственное что требуется — точно отследить нужное время для импульса, чтобы «110» превратилось в «010». И делать это надо каждый раз, когда контроллер разговаривает с TDA7406. Вот нужный нам момент на диаграмме, в момент выделенного красным такта линии SCL надо задавить линию SDA в ноль:

Я нарисовал и изготовил небольшую платку с микроконтроллером Attiny13, с штыревыми разъемами на всех выводах для удобства программирования и дальнейшего подключения к i2c и питанию:

Шина i2c в магнитоле

Нижний слой платы я намеренно сделал плоским, без выпирания штырей, чтобы можно без проблем приклеить плату на голову TDA7406.

Шина i2c в магнитоле

Осталось дело за малым: припаять к плате с ATTiny13 провода питания, i2c, провода от внешнего разъема 3,5 мм («мама») и проводки на плату магнитолы к линиям MD (предварительно удалив конденсаторы С233, С234):

Шина i2c в магнитоле

Прошу прощения за качество фото, был увлечен больше процессом создания, а не документированием.

Синий провод уходящий вверх на фото идет к кнопке News на передней панели магнитолы. Именно она используется для включения перехвата управления аудиомикшером. Нажатием кнопки активируем перехват, еще одним нажатием — деактивируем. Важно: после нажатия кнопки News нужно будет уменьшить или увеличить громкость, т.к. в покое, как мы помним, управление аудиомикшером не происходит, а сам по себе микроконтроллер ATTiny13 никаких посылок в шину не делает.

Программа для микроконтроллера получилась очень простой; в основном это решение задачи «в лоб», без применения прерываний. Я вернусь к программе чуть ниже.

Итак, для тех кто решит воспользоваться этим методом для создания входа AUX этой магнитоле:
1. Разобрать магнитолу, запомнив типы винтов и их места.
2. Добраться до основной платы и найти микросхему TDA7406.
3. Изготовить и запрограммировать плату с ATTiny13 (номиналы конденсаторов С1-С3 0,1 мкФ):

4. Приклеить плату к чипу TDA7406.
5. Выпаять с основной платы С233, С234. Припаять проводки от основной платы к плате ATTiny13 по схеме:

Питание для ATTiny13 вблизи TDA7406 нет, т.к. TDA7406 питается от 8 В, а нам надо 5. Тянем к XP2:1 провод от вывода 8 микросхемы памяти IC803 (24C02), корпус SO-8, см. фото выше.
Провод от кнопки News (у неё два контакта, нам нужен тот, что сидит на питании, а не на земле) тянем к XP1:2 (PB3).
6. Припаиваем собственно выход AUX (у меня это фабричный разъем 3,5мм «мама» с проводом, от удлинителя наушников) к плате: XP1:5 левый канал, XP2:5 правый канал и общий провод на XP1:4. Провод от разъема заводим перед этим снаружи откуда удобнее.
7. Подключаем динамики к магнитоле, проверяем.
8. Пайку проводов хорошо проверяем и фиксируем провода к плате эластичным клеем типа «Момента».

Читайте также: Сады с шинами своими руками

Данная модификация работает у меня почти месяц без нареканий. Единственное неудобство — двухступенчатое включение и выключение AUX. Сначала кнопку нажимаем News, а затем страгиваем немного громкость. Этого можно было бы избежать, дописав программу таким образом, чтобы ATTiny сама отправляла конфигурацию регистрам аудиомикшера в момент нажатия кнопки, но я посчитал это излишним вмешательством, усложняющим программу. Но при должном опыте работы с микроконтроллерами такую функцию приделать недолго.

Пара слов о программе. В ней не используются прерывания, а отслеживание тактов (фронтов) на линии SCL ведется по флагам GIFR в циклах. С каждым тактом SCL программа оценивает состояние шины SDA и если оно удовлетворяет последовательности 0x8C 0x60 0x0E, то на линии SDA в нужном месте выставляется лог.0. И так по кругу. При использовании прерываний ATTiny13 тратит много тактов на вход и обработку прерывания и не успевает за тактами; частота i2c для него высоковата: 160 кГц.

Плата в формате PCB P-CAD 2006 здесь.
Прошивка для ATTiny13 в формате Intel hex здесь.

UPD: по просьбе пользователей добавляю информацию о «фьюзах».
Из производства ATTniy13 приходит с запрограммированным битом CKDIV8 в Fuse Low Byte. Его надо снять, записав бит 1 в его поле. К примеру, если у ATTiny13 значение Fuse Low Byte с завода равно 0x6A, то его надо сделать равным 0x7A. Тем самым мы делаем тактовую частоту максимальной (9,6 Мгц); с другой тактовой частотой программа не будет работать должным образом.

Видео:Введение в шину I2CСкачать

Введение в шину I2C

Выводим сигнал remote из автомагнитолы с управляемым по i2c усилителем

Шина i2c в магнитоле

Сигнал REMOTE (напряжение 12В, которое служит для включения внешних усилителей когда включена магнитола) из современных штатных магнитол вывести не так просто. Если раньше можно было использовать ножку ST-BY микросхемы-усилителя, то теперь разработчики магнитол не используют эту ножку, потому что появились микросхемы-усилители с цифровым управлением.

Можно поискать на плате дорожки, на которых появляется напряжение тогда, когда включается магнитола, но в большинстве случаев они не подходят. Можно подключиться к питанию подсветки дисплея, вот только в этом случае усилитель может включаться незапланированно — до включения встроенного усилителя (что сопровождается щелчками в тракте) или при регулировке климата или при работе парктроника.

Попробую описать другой вариант выхода из положения на примере штатной магнитолы Swing на Skoda Octavia A7

Изучаем устройство

Оконечный усилитель — TDA7563, на него аналоговый сигнал приходит с DSP SAF7741HV.

TDA7563, как выяснилось, очень любят разработчики штатных магнитол из-за того, что микросхема имеет цифровое управление и диагностику по шине i2c, а i2c применяется в магнитолах уже очень давно. Микросхема усилителя при включении магнитолы по команде основного процессора производит тест динамиков, результат теста отдаёт по i2c — определяется обрыв/КЗ, что позволяет блоку магнитолы выдавать эти ошибки по CAN диагностическому оборудованию. В спящий режим микросхема усилителя переводится тоже командами по i2c (нога ST-BY усилителя не используется), что сильно усложняет получение сигнала REMOTE.

Читайте также: Соединение шин между собой пуэ

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

Состояние включенности габаритов и включенности зажигания магнитола получает по CAN. Обмен с кнопками руля — по CAN до блока шлюза диагностических шин, далее — по LIN до контроллера кнопок в руле.

Идея в том, чтобы на внутреннюю шину магнитолы i2c посадить ещё одно устройство на базе простого и дешёвого микроконтроллера, которое будет прикидываться микросхемой усилителя и слушать все команды, которые летят в неё от процессора магнитолы. Причём i2c позволяют нашему «шпиону» оставаться незаметным для процессора магнитолы. Встроенный усилитель будет функционировать как и прежде, а сигнал REMOTE будет формироваться микроконтроллером ровно тогда, когда магнитола будет включать свой встроенный усилитель. Данный способ подойдет для всех магнитол, в которых применена микросхема TDA7563 или совместимые с ней по протоколу обмена.

Само устройство было собрано в выходные на плате, на которой кроме микроконтроллера расположились только 3 резистора и 2 отладочных светодиода (необязательных). Микроконтроллер выковырян из ненужного устройства, поэтому долго над выбором мк я не думал.

Шина i2c в магнитоле
Шина i2c в магнитоле

Отлаживаем ПО контроллера

Всё достаточно просто. Нам всего лишь нужно реализовать i2c-slave с адресом как у TDA7563 (0x6C) и ждать обращений на запись. Далее нужно принять 2 Instruction byte от процессора магнитолы и их проанализировать. Интересующие биты — Standby Off в байте IB2, Unmute Rear Channels и Unmute Front Channels в байте IB1. Вообще выяснилось, что магнитола сначала выставляет бит Standby Off и с небольшой задержкой — биты Unmute Front Channels и Unmute Rear Channels.

Шина i2c в магнитоле

Командные байты я описал в виде структур бит, которые поместил в объединение вместе с массивом из 2 байт, чтобы при заполнении буфера обращаться к нему побайтово, а при разборе команды иметь удобный доступ к битам:

typedef struct
tIB1;

typedef struct
tIB2;

typedef union
IBs;
char Bytes[2];
> tTWI_Buff;

А так выглядит проверка команды (я проверяю биты Standby Off и Unmute Front Channels):

Чтобы шпион не мешал чтению состояния из TDA7563, при операциях чтения из слейва будем выдавать байты = 0xFF, чтобы TDA мог в нужные моменты притягивать линию SDA к земле и шпион ему не мешал это делать.

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле

    🎥 Видео

    Лекция 308. Шина I2CСкачать

    Лекция 308.  Шина I2C

    I2c шина в iPhone, способы диагностики, причины циклического перезапуска.Скачать

    I2c шина в iPhone, способы диагностики, причины циклического перезапуска.

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

    Шина I2CСкачать

    Шина I2C

    MCP2515, контроллер CAN шины с интерфейсом SPIСкачать

    MCP2515, контроллер CAN шины с интерфейсом SPI

    Шина I2C.Скачать

    Шина I2C.

    Микросхемы и программаторы, Шины I2C и SPIСкачать

    Микросхемы и программаторы, Шины I2C и SPI

    CAN блоки в магнитолах Android или CAN шина в автомобиле ВОПРОС/ОТВЕТСкачать

    CAN блоки в магнитолах Android или CAN шина в автомобиле ВОПРОС/ОТВЕТ

    Xiaomi Walkie Talkie 1S, 2S. Китайская безлицензионная радиостанция, программирование со смартфона.Скачать

    Xiaomi Walkie Talkie 1S, 2S. Китайская безлицензионная радиостанция, программирование со смартфона.

    Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)Скачать

    Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)

    I2C интерфейсСкачать

    I2C интерфейс

    Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать

    Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED  I2C, TJA 1020

    Тестируем самую дешевую магнитолу на Андроид. Не ведитесь на уловки китайцевСкачать

    Тестируем самую дешевую магнитолу на Андроид. Не ведитесь на уловки китайцев

    Быстрая магнитола 2+32 4 ядра. Почему нельзя такое покупать и устанавливать. Магнитола не работаетСкачать

    Быстрая магнитола 2+32 4 ядра. Почему нельзя такое покупать и устанавливать. Магнитола не работает

    ремонт (улучшение) магнитолы 2DIN с АлиэкспрессСкачать

    ремонт (улучшение) магнитолы 2DIN с Алиэкспресс

    Подключение нескольких устройств по шине i2cСкачать

    Подключение нескольких устройств по шине i2c

    I2C-адаптер для дисплеев на HD44780Скачать

    I2C-адаптер для дисплеев на HD44780

    Урок 26.3 Соединяем две arduino по шине I2C #iarduinoСкачать

    Урок 26.3 Соединяем две arduino по шине I2C #iarduino
Поделиться или сохранить к себе:
Технарь знаток