Замена магнитолы тойота приус 20
UPDATE:
Магнитола AMPrime сгорела! И чуть не спалила мне весь автомобиль. Опишу в чём причина.
Летом 2019 выехал за город отдохнуть. На улице +25. Тепло, не жарко. Лужайка позволяла и отдыхали прям рядом с машиной, метрах в 15ти. И чтобы было не скучно включил музыку в машине. Открыл окна и двери для звука. ! И ВЫКЛЮЧИЛ КОНДИЦИОНЕР В МАШИНЕ! Ведь окна и двери открыты, зачем улицу охлаждать, насиловать машину?
Сидели-отдыхали, музыка играла. Минут через 30-40 пропала музыка. (Я отходил погулять, когда вернулся ребята сказали: Не играет!)
Я к машине — а там вонь горелой изоляции! Сунул руку к магнитоле а она горячая как мартеновская печь (не пластик, а корпус из дюралюминия), дотронутся нельзя.
Я выключил машину, а магнитола продолжала хрипеть. Кинулся разбирать приборную панель, чтобы добраться до магнитолы.
ОКАЗАЛОСЬ: Микросхема усилителя магнитолы прикручена к корпусу, для отвода тепла (как радиатор). Микросхема грелась ОЧЕНЬ сильно -> Нагрела корпус -> От корпуса нагрелся и расплавился разъём ISO с питающими и контрольными проводами -> расплавилась изоляция проводов — откуда и был запах!
Если бы замкнуло +12 на массу — сработал бы предохранитель по питанию магнитолы. Но он был целый. Весь АМБАсадор произошёл от чрезмерного нагрева микросхемы усилителя. Сама она честно сгорела, но продолжала накалять корпус магнитолы, а тот расплавлял проводку.
НЕ советую к покупке!
Поставил новую китайскую от Prology:
Дальше первоначальный пост. Поскольку всё процедуры по установке магнитолы с ISO рабочие.
Я долго шёл к этому и наконец-то получил желаемое.
Ещё давно пробовал подключать андроидную приставку к штатному монитору. Были эксперименты с управлением: встраивал тачпад, использовал "летучую мышь, и радиоклавиатуру. Пробовал варианты с передачей видеосигнала на моник: и готовый RCA AV out, и конвертировал выход с приставки HDMI to AV RCA.
И в целом было не плохо, но что-то не задалось. И одной из причин отказа от этого варианта была ДОЛГАЯ загрузка андроид после включения машины.
Поэтому когда на рынке Али появились 2din обычные и андроидные готовые магнитолы всё не мог определиться, что же мне хочется, что же мне надо. Плюсы и минусы есть у обоих типов устройств, поэтому то что я здесь пишу исключительно моё мнение и я никому не навязываю его. А сама запись делается, чтобы поделиться опытом по установке и надеюсь поможет кому-то при подключении 2din магнитолы в машине.
И так вот магнитола:
Вот переходная рамка:
Основная проблема подключения нештатной магнитолы у меня — это подключение её к усилителю.
Есть 2 варианта как это сделать:
1 вариант — Купить адаптер за 4000 руб. (он идёт с необходимыми разъёмами и подключается "разъём в разъём" — не надо почти ничего резать, врезаться в штатную проводку.
2 вариант — Никак! Нету его другого варианта. По крайней мере я не нашёл.
А поскольку сама магнитола стоит 2500 руб, то покупать адаптер дороже самой магнитолы у меня в планы не входило.
Поэтому моё решение: ПОЛНОСТЬЮ отказываемся от усилителя JBL. просто нафиг откручиваем его и убираем из машины.
По подключению питания проблем не было. Ну как… после того как нашёл в интернете распиновку штатной магнитолы Toyota Pioneer. Вернее конкретно моей магнитолы не нашёл, но разъёмы и распиновка соответсвуют. У меня магнитола с CD-чейнджером на 6 дисков и с MP3.
Вот эти разъёмы:
А вот точки подключения к динамикам:
Вид места установки магнитолы:
У меня в машине под пассажирским сиденьем установлен JBL усилитель. И у него соответственно есть разъёмы с проводами уходящими на колонки. Вот в них то мы и врежемся.
Снял пассажирское кресло для удобства.
Синий разъём S14:
Бежевый разъём S29:
Для динамиков купил двужильный кабель ШВВП 2х0,75. Протянул провода под обшивкой. Прозвонил и написал на скотче бирки. Потом зачистил недалеко от разъёмов места на штатной проводке. Сначала просто примотал и проверил правильность, а потом и пропаял и изолировал хорошенько.
Центральный динамик подключал так: минус- с переднего правого динамика, плюс+ с переднего левого.
Напоследок подложил под воздуховод для заднего ряда кусочек пенопласта, а то он совсем в пол упирался. Теперь он приподнялся на 3 см, надеюсь так поток воздуха лучше будет достигать заднего ряда.
Кнопки на руле работают такие: "VOL-", "VOL+", "SEEK-", "SEEK+" . Потом попробую задействовать и кнопки "ON HOOK", "OFF HOOK", "VOICE" и "MODE".
И на будущее надо подключить штатный Тойотовский микрофон в плафоне, вместо встроенного в магнитолу. А то разговаривать только в экстренных случаях получается. Собеседник плохо слышит, нужно очень громко говорить.
поставил за час. переходник купил на ибае.
всё замечательно работает. + значительно качественней звук. если можно так сказать про сток.
родные шурупы длинноваты.
поставил за час. переходник купил на ибае.
всё замечательно работает. + значительно качественней звук. если можно так сказать про сток.
родные шурупы длинноваты.
Вот не хочется вставлять доп магнитолу.
У меня вроде все читает и CD и MP3 и радио ловит. но вот. блин, есть несколько каналов, которые четные. вот бы че-нить с радио сделать, что б и они ловились.
А пока приходиться возить в бардачке дешевый MP3 Pleer, втыкать его в AUX :((((. но признаюсь, когджа выезжаешь за город, прием быстро пропадает.
Неужели низя как нить решить эту проблему. Это ж типа обычный приемник, а не оборудование с космического корабля.
все кто в первый раз садятся в машину другого мнения )))))
ну а если по теме . у меня нет ни мп3 ни аух. за 120$ взял пионер (оригинал) со всеми наворотами (4200SD сд+usb/ipod+sd). если сравнить с всякими х-кар линками . то даже сравнивать не хочется. теперь у меня полноценное радио с шикарным приёмом. у меня mp3+wma на любом носителе. cd в подарок. звук на порядок лучше даже при стоковых динамиках. . сам мафон спрятался так что хрен разглядишь (от воришек) + штатная отвлекает внимание. по поводу удобства. покупаем пульт если не идёт в комплекте (у меня был свой). через тонированную дверку замечательно бьёт. конечно было бы по феншую с руля . но это +50 баксов. или руками. схема элементарная.
все кто в первый раз садятся в машину другого мнения )))))
ну а если по теме . у меня нет ни мп3 ни аух. за 120$ взял пионер (оригинал) со всеми наворотами (4200SD сд+usb/ipod+sd). если сравнить с всякими х-кар линками . то даже сравнивать не хочется. теперь у меня полноценное радио с шикарным приёмом. у меня mp3+wma на любом носителе. cd в подарок. звук на порядок лучше даже при стоковых динамиках. . сам мафон спрятался так что хрен разглядишь (от воришек) + штатная отвлекает внимание. по поводу удобства. покупаем пульт если не идёт в комплекте (у меня был свой). через тонированную дверку замечательно бьёт. конечно было бы по феншую с руля . но это +50 баксов. или руками. схема элементарная.
Захотелось мне заменить штатную нави на что-то более достойное. Тут и Пролежнь стал подглюкивать - мониторчик ейный замерцал. И решил я поставить вторую голову в машину. Начитался форумов, пообщался с умными людьми - Ralpharn, egradov и др. Заказал на ебее магнитолу и рамку.
Ура! Все доставлено!
3. Как настроить автоуменьшение подсветки экрана? (Правда в магнитоле есть вроде своя фича, типа по времени суток, надо проверить. Еще есть провод Illum, но куда его вштырить?) Магнитола так удачно расположена, что не мешает ночной езде.
4. Что это за провода Brake-In и Reverse-IN (ну, реверс может отрубать звук при движении задним ходом, а тормоз при чём?)
Кстати пленку с экрана еще не снимал, но даже через нее все видно хорошо и тачскрин не лажает. Цифровое телевидение не проверял - антенна пришла сломанной, заказал нештатную, но получше. Цифра оказалась не для России - она хоть и DVB-T, но MPEG2, а у нас вещание MPEG4. Жаль, мог тышшу сэкономить.
После ряда экспериментов принято кардинальное решение - из салона изъят фирменный усилитель JBL (если кому надо - обращайтесь, отдам вместе с шестидисковой магнитолой за разумные мани естесна), про снятие штаной нави пока не думал. Да, активатор уже ушёл в Питер и надеюсь там пригодится!
Что далее? От новой магнитолы под водительское сиденье проброшены провода к разъему S12. И там разведены по колонкам Передние твиттеры пока не подключены - я не радиотехник и в инете не искал схему подключения пищалок. Летом разберемся.
Пришлось подрезать кромку у подмагнитольного бардачка чтобы моник легко выезжал. Там теперь будет место для дисков и могбыть флешки.
В фотоальбоме есть ночные фотки, а здесь покажу, как это выглядит днем.
При скине штатном (800х480) цифры слева были наполовину не видны и тем самым сложно было определить и скорость движения и метры до маневря, ну и время. Исправил просто - из файла скина открывающегося total comander'ом или winrar'ом убрал папки ненужных разрешений и оставил 640х480.
CarPC в Toyota Prius NHW20 - установка мультимедийного компьютера
Концепция проекта – создать систему, не уступающую по удобству готовым мультимедийным решениям, но превосходящую по функционалу.
Приоритеты расставил следующие:
- Настроенная и отлаженная система должна работать автономно, включаться и выключаться автоматически, и при включении продолжать работать с момента, при котором была выключена, подобно штатной магнитоле.
- Со стороны, для непосвященных, все должно выглядеть, как штатное головное устройство.
Выводить графическую информацию решил на штатный сенсорный мультидисплей.
Звук подключил к линейному входу AUX штатной магнитолы.
Управление автоматическим включением/выключением организовал от штатных цепей автомобиля.
При сборке компьютера основной упор делал на соотношение Цена/Качество и конфигурацию подбирал относительно бюджетную, но с небольшим запасом по мощности.
Итак, платформой CarPC послужили:
- Мат. Плата - BioStar H61MLC, формата microATX под сокет LGA 1155
- Процессор - Intel G630, 2,7GHz, выполненный на платформе 4-х ядерного Core i5, но урезанный на 2 ядра
- Оперативная память - NCP DDR3, 4GB
- Твердотельный накопитель SSD OSZ Vertex 3 Max IOPS на 120GB
- Блок питания PICO-PSU 12V, 150W
- Корпус mini-ITX Winsis WI-03 Black
Корпус рассчитан на мат. плату mini-ITX, размером 17 х 17 см. Удалив комплектный блок питания, я освободил место для своей платы micro-ATX, имеющей размеры 17,5 х 23 см. Громоздкое крепление HDD и слим-привода тоже удалил за ненадобностью, обеспечив лучшую вентиляцию внутри корпуса.
Разместил в багажнике, в пластиковом коробе, закрывающем запаску. Системник крепится на застежках "липучках", что позволяет его быстро и легко снять/поставить в течение минуты.
Подключение видео от CarPC сделал по аналоговому композитному сигналу на вход камеры заднего вида через самодельный коммутатор на малогабаритном 5-контактном реле.
Для формирования правильного композитного видеосигнала NTSC 3.58, понятного мультисплею, использовал скромную PCI-E видеокарту ATI Radeon HD 3450 на 256MB, имеющую хорошо настраиваемый TV-out.
Видеовход активируется при включении компьютера, а коммутатор служит для переключения изображения с камеры в режиме заднего хода.
Для унификации, все подключения Аудио и Видео выполнил на стандартных RCA разъемах (тюльпан), впаяв их в штатную проводку и использовав автомобильные межблочные кабели.
Сенсорное управление подключал в два этапа.
Для подключения сенсорного экрана использовал USB-контроллер Сенсорной панели.
Сначала приобрел гибкую сенсорную панель с USB-контроллером, и закрепил ее поверх штатной. Гибкая панель прекрасно исполняет свою функцию и не препятствует нажатиям на штатную панель.
Не понравилось, что накладная панель сильно бликует на солнце.
Определил, что родная панель по своим резистивным параметрам идентична накладной, следовательно, должна заработать с USB-контроллером.
После проверки работоспособности "на коленке", собрал группу из 4 малогабаритных коммутационных реле для переключения выводов тач-панели с платы мультидисплея на USB-контроллер в режиме вывода изображения с PC. Это необходимо для развязки контроллеров тач-панели, и разделения режимов работы монитора.
Полностью разобрав мультидисплей, подключил самодельный коммутатор "в разрыв" шлейфа тач-панели.
Поскольку внутри корпуса мультидисплея свободного места очень мало, я вывел выход с тач-панели, вход на плату дисплея и управление реле из корпуса наружу. Управление реле припаял к контактам разъема со стороны платы, на которых появляется +12 вольт в режиме вывода изображения с PC (разъем М13, 21-й pin, розовый и масса). Коммутационные реле закрепил на двухсторонний скотч под штатными разъемами и изолировал моделином.
Схема подключения видео на вход камеры заднего обзора актуальна только для Prius 20 рестайл, без системы Park Assist.
Принцип работы коммутационных реле:
В нормальном состоянии Touchscreen через нормально-замкнутые контакты реле подключен к своему разъему на плате и работает в штатном режиме.
При активации видеовхода с PC выключателем Sw 1, реле переключают тач с мультидисплея на USB-контроллер, и он работает уже только с Car-PC. При выключении видеовхода, тач подключается обратно к разъему на плате.
Сам USB-контроллер закрепил на жгуте мультидисплея, вместе с реле, переключающим видеосигнал с CarPC на вход камеры заднего обзора.
Для питания CarPC использовал компактный блок питания PICO-PSU 12V, 150W.
БП включается через силовое реле, подключенное через схему задержки выключения на MOSFET транзисторе к управлению силовыми реле ВВБ (сигнал Ready).
Питание появляется во время запуска а/м, при включении индикатора READY и пропадает через 2 мин. после выключения.
2 мин. настроил для того, чтобы PC гарантийно сохранил сеанс и завершил работу с запасом по времени.
В BIOS настроил включение при подаче питания ("turn On when AC power loss"), благодаря чему PC включается сразу при запуске а/м.
Кнопку POWER на панели приборов подключил к разъему кнопки включения на мат. плате. В настройках электропитания Windows назначил действие кнопки выключения - Гибернация. Таким образом при выключении Приуса CarPC думает, что нажали кнопку на корпусе и уходит в гибернацию, а при включении - восстанавливается из гибернации и работает с того-же места, что выключился.
Для переключения мультидисплея в режим CarPC я использовал клавишный переключатель (SW 1). Для принудительного включения/выключения PC поставил кнопку без фиксации. Установил в свободную заглушку на панели.
Вместо ультракомпактного блока питания PICO-PSU, пробовал подключать интеллектуальный M2-ATX.
Каких-либо изменений и улучшений в работе PC замена блока не вызвала. Приобретал M2-ATX из праздного интереса. Не смотря на все его навороченные функции настройки таймингов автоматического включения/выключения и стабильность работы в широком диапазоне напряжений (8 - 28 V), вернул обратно свой старый, более компактный и простой PICO-PSU, как более подходящий в данном случае вариант. Напряжение бортовой сети в Приусе достаточно стабильное и за все время эксплуатации CarPC, этот блок не вызвал никаких нареканий.
M2-ATX удобнее и намного проще в подключении, и рассчитан на более жесткие условия эксплуатации, т.к. был создан для классических а/м с учетом их особенностей. Но в моем случае, изначально уже была придумана схема с использованием простого, не интеллектуального БП, проверенная временем.
Из дополнительных "железок" купил:
GPS-ресивер LocoSys на чипе MediaTek MT3329, установленный на блок усилителя руля.
По скольку у меня Приус из США, штатная магнитола имеет нечетную сетку радиочастот и большинство радиостанций попросту не ловит. Радио я практически не слушаю, но из принципа "чтоб всё было", приобрел комбинированный DVB-T + DAB + FM приемник с пультом ДУ и разместил его в кармане под магнитолой. При этом пульт хорошо работает через полупрозрачную крышку. С пульта можно переключать каналы и выбирать источники сигнала (радио, ТВ).
Еще купил компактную беспроводную клавиатуру с тачпадом и подсветкой кнопок. Ее удобно использовать для настройки программ и работы с файловой системой
Для доступа к сети Интернет, например, для получения информации о пробках и погоде, прослушивания интернет-радио и просмотра YouTube, я использую компактный USB WiFi адаптер TP-Link TL-WN725N, использующий WiFi раздачу 3G-интернета через смартфон, либо подключение к домашней сети через WiFi маршрутизатор, для удобного удаленного управления медиафайлами на CarPC с домашнего PC (CarPC можно включить, используя охранную систему с дистанционным запуском).
В центральной консоли заглушку с AUX входом заменил на аналогичную, но с USB разъемом от новых моделей Тойота.
Приятно втыкать флешки в «штатное» гнездо.
Программной основой любого CarPC является так называемый Front End - специальная графическая оболочка, заточенная под использование в автомобиле и рассчитанная на управление системой посредством сенсорного экрана.
В своем проекте на базе Windows 8 я использовал оболочку Centrafuse.
Навигационную программу использую iGO 8.3. Еще есть Навител Навигатор в эмуляторе Win CE, но iGO нравится больше, работает стабильнее и хорошо интегрируется в CF.
Как и задумывал, компьютер включается при запуске автомобиля в режиме «Ready», загружается из гибернации в течение 7 - 10 секунд и продолжает работать с момента выключения. При выключении автомобиля, компьютер сохраняет данные оперативной памяти на жесткий диск (Гибернация) и полностью выключается. PC уходит в гибернацию практически мгновенно, но питание отключается с задержкой в 2 минуты, чтобы гарантийно обеспечить корректное завершение работы в любом случае.
Подключение кнопок на руле
Думал, как прикрутить к CarPC кнопки переключения треков на руле.
Вообще существуют специальные адаптеры для подключения штатных кнопок на руле к PC, типа вот такого
Но, поскольку звук у меня подключен через усилитель магнитолы, то громкость итак регулируется с руля, поэтому покупать такой адаптер только для переключения треков я счел расточительством.
В итоге, на глаза мне попалась старая клавиатура, которая была успешно разобрана. В любой проводной клавиатуре большую часть занимает контактная матрица, подключаемая к маленькой плате со светодиодами, размером 3 х 5 см.
Эта плата и послужила основой.
Подключил плату к домашнему PC и "методом тыка", при помощи программы диагностики клавиатуры, нашел контакты на плате, при замыкании которых нажимаются клавиши F11 и F12, практически не используемые в программах.
К плате клавиатуры припаял три провода. При замыкании одного из двух проводов с общим, нажимается одна из этих клавиш.
Плату соединил с PC ее стандартным проводом и потянул по левому порогу. Сама плата небольшая, ее изолировал и спрятал под накладкой заднего порога.
Разобрал кожух рулевой колонки и руль, нашел три свободных контакта в спиральном кабеле, соединяющем кнопки на руле с проводкой автомобиля, их и использовал.
Далее три провода подсоединил к свободным контактам разъема спирального кабеля в рулевой колонке.
Из блока кнопок на руле выпаял три провода от кнопок переключения треков и подключил их к аналогичным свободным контактам в разъеме спирального кабеля в рулевом колесе.
Таким образом, кнопки на руле, как-бы нажимают клавиши на клавиатуре.
Фото, к сожалению, не сделал, но думаю, принцип понятен.
В оболочке Centrafuse в меню настройки "горячих клавиш", присвоил кнопкам F11 и F12 функции "Предыдущий трек" и "Следующий трек" соответственно.
Вообще этим клавишам можно присвоить любые функции.
Теперь можно не только регулировать громкость, но и переключать медиафайлы, не отвлекаясь от вождения.
Единственное, чем пришлось пожертвовать, отсоединил эти две кнопки от управления штатной магнитолой, перерезав дорожки на плате, но с использованием CarPC счел это незначительной жертвой, т.к. CD диски и "американское" радио я теперь не слушаю.
Эксплуатирую свой CarPC с марта 2012 года. За это время он показал себя достаточно хорошо и работает без нареканий в любых погодных условиях, в т. ч. в мороз.
Конфигурация компьютера в период эксплуатации периодически менялась. Изначально для формирования "правильного" видеосигнала использовался конвертер VGA to RCA, затем замененный на видеокарту ATI Radeon HD 3450 с TV-out, обеспечивающую более высокое качество изображения. Морозо- вибро- ударостойкий 2,5" HDD Hitachi Travelstar Z7K500, уступил свое место более скоростному твердотельному SSD OSZ Vertex 3. GPS ресивер LocoSys был заменен на более качественный GlobalSat BU-353s4
Для организации BT Hands Free использовал USB Bluetooth адаптер + микрофон, который установил в родное место в плафоне освещения. Единственный минус Hands Free через CarPC в том, что громкость телефонного звонка и разговора равна системной громкости, что не удобно при внезапном входящем звонке во время громкого прослушивания музыки. Только по этой причине отказался от этой функции в пользу штатной Hands Free, где громкость разговора настраивается отдельно от основной и звук выводится только на водительский динамик. Теперь микрофон используется в редких случаях, для голосового управления компьютером. Bluetooth адаптер убрал за ненадобностью.
Для диагностики а/м был приобретен полнофункциональный диагностический USB адаптер mini-VCI с ПО TechStream.
Теперь можно диагностировать и кастомизировать Приус прямо на штатном мультидисплее, либо через ноутбук.
Изначально установленная ОС Windows 7 заменена на более шуструю Windows 8, имеющую лучшую скорость загрузки и выключения. Оболочка Centrafuse тоже периодически обновляется.
Для синхронизации системного времени по GPS и раздачи данных о местоположении разным программам, я использую удобную программу GPS-сплиттер XPort.
А началось все с того, что у меня появился Prius.
И первое, что бросилось в глаза — проблемы с обновлением навигации. Следующее — весьма скудные, но местами необходимые возможности устройства с названием «Многофункциональный дисплей» (в простонародье — голова). И это на фоне огромного количества китайских радио с Android на борту, и множеством приятностей. Но их установка на штатное место подразумевает лишение таких «плюшек», как диаграмма распределения энергии и управление климатом.
Родилась идея как-то соединить Android магнитолу с автомобилем более плотно, чем предлагают братья-китайцы. Об этом и статья.
Исходная ситуация
Итак. На борту имеется около 7-дюймовый дисплей с резистивным тач-скрином, соединенный с прочей электроникой линиями TX+ и TX-. И таких пар от головы идет аж 3. В схеме это чудо поименовано AVC-LAN, и выглядит следующим образом:
Часть 1: Осматриваемся внутри
Как видно, голова стоит в разрыве сети, между маршрутизатором и дальнейшей цепочкой из магнитолы, усилителя (он отдельный у меня), и по отдельному каналу следует связь с блоком навигации. Где-то еще болтается блок автопарковки, никак не упомянутый в имеющихся у меня схемах. Ну, что ж… я решил отложить близость с оным до лучших времен. Тем более, что автопарковка — скорее игровая ф-ция, нежели реально нужная.
Убрав все лишнее, получим примерно следующую блок-схему устройств:
Размышления
Была мысль просто заменить блок навигации на что-нибудь андроидное, однако она угасла, когда я глубже разобрался, как они общаются с головой. Помимо AVC-LAN эти модули соединены так же линией GVIF (Gigabit Video InterFace), причем этот самый фэйс у производителей конвертеров может случайно треснуть, если еще и я куплю преобразователь видеосигнала в GVIF за более, чем 100 долл. «Жить без лица — быть может трудно, но..» — прозвучало в голове на мотив известной песни, и решение мне не понравилось.
Встречались в сети решения с установкой китайской магнитолы вместо радиоресивера. Это меня не устроило тем, что два дисплея — необоснованная избыточность. Имхо.
Решение
Родилось следующее решение: заменить целиком голову, и доработать андроид-магнитолу, подружив ее с Prius-ом, для чего:
- Разработать аппаратный конвертер USB <-> AVC-LAN
- Разработать firmware к нему, чтобы он подключался, как USB-HID.
- Сделать его composite, чтобы одна из функций детектировалась, как обычная аппаратная клавиатура (с целью использовать в качестве нативного управления с кнопок на панели)
- Разработать Android-приложение с функционалом, аналогичным (или превосходящим) родной, приусовский
- Согласовать работу задней камеры
- Решить задачи по механической части (установка на штатное место)
Выглядеть это все должно следующим образом:
В качестве аппаратной основы было решено использовать обучающую плату на SM32F103:
заказанную с AliExpress за $2.05.
Чем она мне нравится:
- Аппаратный модуль USB(Device) на борту у процессора
- Адекватный USB-стек от производителя (в отличие от Freescale-овского, не к ночи будь помянут).
- Свободные порты GPIO, которые можно использовать для подключения штатных кнопок по бокам монитора. Возможно, это позволит скрыть под панелью аппаратные кнопки магнитолы. Я пока не знаю, какой она будет
- И на нее можно навесить конвертер AVC-LAN в логические уровни
В любом случае, статей планируется несколько, в разных хабах. Проект получается уж сильно FullStack — от аппаратного подключения до андроид-приложения.
Часть 2: USB, HID, дескрипторы, и все, чтобы получить пилотный прототип
Первым этапом я хотел получить связку устройства и телефона, причем чтобы устройство могло передать пакет на телефон, а тот — отобразить его в приложении.
Как говорил Гагарин: Поехали!
USB HID Composite device на STM32
За что я решил взяться — это адаптировать пример от ST моим задачам, и получить USB устройство, которое опознается хостом, как составное из клавиатуры и «чего-то еще» — RAW HID Device. Первое, как я уже говорил, предназначено для нативного управления андроидом, второе — для прямого обмена AVC-LAN пакетами с программой на устройстве.
Взяв за основу CubeMX от STM, и прочитав много статей о том, как можно реализовать кастомный HID, я обнаружил в сети одну неприятную вещь: практически нет или весьма скудно рассмотрен вопрос создания составных устройств.
USB, Composite, HID
Буквально несколько слов на эту тему. Предполагается, что Вы более или менее знакомы со стандартом USB. Если нет — лучше сначала ознакомится и поэкспериментировать с примерами из CubeMX.
Стек USB от STM и пример реализации мыши. Там у нас настроены какие-то дескрипторы и функциональная конечная точка. Это помимо пары 0x00 и 0x80 для управления устройством целиком.
Для реализации моего проекта требуется, чтобы конечная точка клавиатуры была двунаправленной (не знаю, зачем — пригодится) и еще пара конечных точек, которые будут использованы для обмена данными со второй — RAW — функцией. Добавляем их.
Делаем точку двунаправленной, добавляя в дескриптор точку OUT:
При правке дескриптора следите за индексами и размерами.
(2c5cf968121f0d8fa43a6755c09e15ef3a317791):
И добавляем еще пару точек:
Это был дескриптор конфигурации. Теперь хост будет уверен, что у нас есть некое составное HID-устройство, и во все эти точки можно слать данные. Но это пока не так.
Для того, чтобы это стало правдой:
1. В нашем контроллере есть специально выделенный кусочек памяти, который тактируется вместе с модулями CAN и USB. Учитывая, что модуль USB самостоятельно занимается процессом приема/передачи пакета данных, нужно задать ему буферы в этом кусочке памяти для каждой отдельно взятой конечной точки:
Адреса буферов произвольные, лишь бы не пересекались.
Почему-то стек от ST написан из расчета, что в устройстве будет не более одной двунаправленной конечной точки, потому чуть дорабатываем стек:
Передача
Процедуру USBD_HID_SendReport переименовываем в USBD_HID_SendReportEP, добавляя еще один параметр — номер конечной точки. Процедуру со старым именем оставляем для обратной совместимости, но в теле вызываем USBD_HID_SendReportEP с константой в виде конечной точки. Решение пока не самое эстетичное, но для эксперимента сойдет, и даже если и останется — конкретному проекту это жить мешать не будет.
Теперь для отправки данных все готово, остается лишь в нужный момент вызвать эту функцию.
Финализация
Порядка ради ищем по проекту и вызываем USBD_LL_CloseEP еще раз, но для вновь созданных конечных точек.
Прием
Для того, чтобы конечные точки морально настроились на работу, нужно вызвать для них USBD_LL_PrepareReceive. Рекомендую читателю пробежаться поиском по проекту на предмет этой строки, и адаптировать эти вызовы под свои нужды.
У меня в коде получилась вот такая вот некрасивая каракатица:
Т.е. я исходил из того, что номера конечных точек идут подряд. Это плохо, имхо. Не делайте так. Впрочем, и как ST тоже не делайте.
Дальше остается только сходить в файл usbd_hid.c, а конкретно в функцию USBD_HID_DataOut, и позаботится о том, чтобы вызов обработчика принятых данных соответствовал вашим личным представлениям о прекрасном. У меня получилось тоже не очень, поэтому код и описание получатся длинными и непонятными. Проще сделать самому.
Репорт
Все, в этом месте мы получили композитное устройство, которое способно обмениваться данными через две двунаправленные точки. Последним штрихом «затыкаем» любопытство драйверу HID, описывая такой вот дескриптор репорта:
Этот репорт говорит HID-драйверу: тут будут какие-то 31 байт данных. Не нужно разбираться, что за они — просто отдай их открывшей это устройство программе. В физическом репорте нулевой байт будет равен индексу репорта (REPORT_ID (2)). Соответственно, всего придет 32 байта.
Читайте также: