Тема: AUX для головы производства DENSO c NAVI. 9-5, 2005. Решено.
Предупреждение: при повторении рискуете – есть реальный шанс навсегда уничтожить хорошую магнитолу!
Преамбула:
Примерно месяц назад я начал активно искать способ подключения стерео входа к штатной автомагнитоле своей Снежной Королевы (серебристый Saab 9-5, 2005).
Все нагугленные мной решения были для голов без навигации и основывались на подключении дополнительного входа непосредственно к тракту усиления, или на подмешивании сигнала к радио тракту, или даже установкой CD с записанной тишиной . Ни то, ни другое решение меня не удовлетворяло по причине ухудшения качества звука и/или отсутствию штатного регулирования громкости, баланса, эквалайзера. Так же как и FM-трансмитеры, тем более что они не позволяют подключать телефон к голове автоматически в момент вызова. Множество авто-форумов пестрят словами дизассемблер, хак, взлом и т.п., но нигде я не встретил действительно готового решения для данного типа магнитолы с навигатором. Дольше всех о данной магнитоле переписывались на кадилаковском англоязычном форуме – упорные ребята, молодцы, они даже пытались использовать человеческий фактор - вышли на инженера из DENSO, но он как настоящий самурай ничего им не сказал и листинг кода прошивки не выдал . Потом видимо поменяли автомобили или магнитолы. Это конечно выход, но мне чертовски нравится моя машина и магнитола меня тоже полностью устраивает. Поэтому я решил побороться.
Сразу скажу, что бесплатного решения не получилось – расходы составили 1600 рублей на приобретение процессорного модуля, с помощью которого я и перепрограммировал микросхему звукового процессора для включения незадействованного стерео входа.
Что сделано:
1. Куплен модуль типа BM9300L за 1600р (погуглите, может и дешевле найдете)
2. Модуль закреплен внутри магнитолы (см. фото ниже).
3. Модуль подключен к ногам звукового процессора TDA7406 (SDA, SCL), а так же к земле и +5В.
4. Из магнитолы выведен стерео кабель, припаянный ко входам TDA7406 (MD Left, MD Right) через конденсаторы по одной микрофараде.
5. Для программирования вживленного процессора из магнитолы выведен USB кабель и провода для Reset и перехода в отладочный режим (это на случай если наша программа совсем слетит и придется ее записывать снова)
6. Из магнитолы выведены два дополнительных провода от двух портов BM9300L с разъема X1 (17 и 19). Соответственно 17 - для включения нашего стерео входа кнопкой (без фиксации!), 19 - для соединения с выходом блютуз громкой связи и входом магнитолы TLF. Вход 17 опрашивается в программе на наличие нуля, ноль на входе 19 вызывает срабатывание прерывания. И то и другое в итоге выполняет одну функцию – засылает в TDA7406 команду на переключение источника стерео-сигнала.
7. Написана программа (не ржать !) на бейсике. Почему бейсик?:
a. потому что в BM9300L он уже вшит.
b. да нет у меня времени осваивать ассемблер PIС24.
c. можно оперативно поправить программу не перепрограммируя PIC24 программатором.
Что не сделано:
1. Чукча не читатель, чукча писатель Не удалось добиться чтения состояния регистров TDA7406 (по загадочной причине возвращает нули из любого адреса), а значит нет возможности после использования нашего стерео входа (по кнопке), переключится на тот вход с которого ушли. Т.е. для выключения стерео входа надо просто выбрать FM или CD/CDC. При использовании стерео входа по прерыванию от телефона, магнитола сама вернется к исходному входу. В моем случае это штатный режим, т.к. стерео вход я планировал использовать именно от внешнего блютуз, .т.к у него еще и USB вход для флешек имеется .
2. Сэкономить и не покупать готовый модуль BM9300L, а купить рублей за 100 PIС24 или PIC18 или Atmel, написать, отладить и вшить туда программу на ассемблере. У кого есть время и желание - делитесь с общественностью, пожалуйста.
Принцип работы очень прост:
Я решил, что если нельзя дизассемблировать и изменить родную прошивку, то надо зайти с другой стороны , т.е. подавать команды другим процессором.
В данной магнитоле, как впрочем и в большинстве других, управление звуковым процессором осуществляется центральным процессором по шине i2c. Все что делает наш вживленный мозг – это ждет появления нуля на проводе, соединенным с блютуз и входом TLF магнитолы, потом ждет пол секунды пока ЦП DENSO пошлет свои команды на звуковой процессор, который включает моно вход для телефона (что бы не создавать конфликт на шине i2c), а потом тихой сапой засылает свою команду на подключение стерео входа. Когда разговор по телефону, или наш трек с флешки заканчивается, на входе магнитолы TLF появляется логическая единица и DENSO сам подключает активированный ранее вход, а наша программа продолжает крутиться в цикле ожидания следующих событий.
Программу можно в любой момент подкорректировать, просто подключившись ноутом к выведенному из зверька USB шнурку.
Программа для BM9300L:
10 onint1 100
15 x=pin(17) ; check button “lineIn”
20 if x=0 then gosub 200
30 time=0: do: while time <0,01
40 goto 15
; Interrupt on pin 19 (TLF ON)
100 time=0: do: while time<0,5 ; ждем пока ЦП DENSO освободит шину i2c
110 gosub 200
120 reti
; tell TDA: switch input to MD!
200 k=0
210 i2c#8ch,(0)=7ah
220 k=k+1
230 if k>9 then goto 260
240 if i2ca = 1 then goto 210 ; если команда не прошла, то повторим попытку (до 10 раз)
245 i2c#8ch,(1)=0E0h ; set Loudness Attenuation to 0 db (эта и следующая команды на любителя сразу получить реальную громкость )
250 i2c#8ch,(2)=040h ; set Volume to 0 db
260 return
Фото:
Всем успехов, интересных и нестандартных решений!
Saab 9-5 Снежная Королева.
9-5, 2005, 2.3, 220, АКПП