Меню

andipanda.dev

CAN Box: что это такое и зачем он нужен самодельной магнитоле

Когда занимаешься разработкой собственной автомобильной магнитолы, рано или поздно сталкиваешься с вопросом её взаимодействия с электроникой автомобиля.

Как правильно организовать включение и выключение питания? Откуда получать информацию о включении задней передачи? Как определить состояние освещения или обработать кнопки на руле?

Для решения этих задач можно разработать собственный контроллер, подключиться к автомобильной CAN-шине и самостоятельно обрабатывать необходимые сообщения.

Но, как оказалось, существует гораздо более простое решение — готовый CAN Box.

Именно об этом небольшом устройстве я и хочу рассказать.

Немного предыстории

Первая версия моего проекта CaRadio, построенная на Raspberry Pi, до сих пор используется в автомобиле.

За время её эксплуатации и дальнейшей разработки мои представления о том, какой должна быть самодельная магнитола, заметно изменились.

Одним из важных этапов стала работа над проектом CaRaBack — собственным решением для работы с CarPlay.

Серия статей о разработке CaRaBack находится в процессе написания и регулярно дополняется.

Работа над CaRaBack позволила по-новому взглянуть на архитектуру CaRadio. В частности, стало понятно, что для реализации магнитолы вовсе не обязательно использовать Raspberry Pi. Вычислительной платформой может стать и другое устройство, подходящее по производительности, интерфейсам и стоимости.

Параллельно я продолжал искать оптимальный способ организации питания будущей магнитолы.

Именно в ходе этих экспериментов у меня появилась китайская Android-магнитола, предназначенная для автомобилей Volkswagen.

Подробности о самой магнитоле оставим для отдельной серии статей. Сейчас нас интересует другое устройство, которое оказалось в комплекте с ней.

Это был CAN Box.

Первое знакомство с CAN Box

На первый взгляд CAN Box представляет собой небольшую пластиковую коробочку с разъёмом для подключения проводки.

На корпусе моего экземпляра указана модель G-VW-RZ-58. Устройство предназначено для автомобилей Volkswagen, Skoda и Seat.

Интересно, что в полученном комплекте CAN Box не был подключён к магнитоле через UART.

Возможно, комплект проводки предназначался для другой модели магнитолы. Не исключено и то, что CAN Box использовался только для формирования отдельных управляющих сигналов, например ACC и включения камеры заднего вида.

Это ещё предстоит проверить.

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

Разобрал корпус, изучил схемотехнику, начал искать информацию о микроконтроллере, прошивках и протоколах обмена.

Информация в интернете нашлась, но оказалась довольно разрозненной.

Можно найти обсуждения совместимости CAN Box с китайскими магнитолами, отдельные распиновки и описания протоколов. Однако подробных материалов, объясняющих устройство и принципы его работы, оказалось не так много.

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

Что такое CAN Box

В современных автомобилях электронные блоки обмениваются информацией через цифровые шины.

Одна из наиболее распространённых — CAN (Controller Area Network).

Она позволяет различным электронным блокам автомобиля обмениваться сообщениями без необходимости прокладывать отдельный провод для каждого сигнала.

Например, информация о состоянии зажигания, включении освещения или задней передачи может передаваться по CAN-шине.

При этом важно понимать, что CAN — это прежде всего протокол обмена данными.

Сам по себе он не определяет, какое именно сообщение означает включение зажигания или нажатие определённой кнопки.

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

Поэтому простого подключения к CAN-шине недостаточно.

Необходимо знать, какие сообщения передаются в автомобиле и как правильно их интерпретировать.

Именно здесь на помощь приходит CAN Box.

Как работает CAN Box

CAN Box представляет собой электронный модуль, который получает сообщения из автомобильной CAN-шины, анализирует их и преобразует в сигналы или команды, понятные подключённому устройству.

В типичном случае внутри находятся:

  • Микроконтроллер с прошивкой для обработки сообщений.
  • CAN-трансивер для физического подключения к шине.
  • Цепи питания и защиты.
  • Интерфейсы связи с магнитолой.
  • Выходные каскады для формирования управляющих сигналов.

Принцип работы достаточно простой.

Автомобиль передаёт сообщения по CAN-шине. CAN Box принимает их, определяет интересующие события и формирует соответствующие команды.

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

При включении освещения — сообщить о необходимости изменить яркость экрана.

А при изменении состояния зажигания — сформировать сигнал ACC.

При этом возможности конкретного устройства зависят от его аппаратной реализации, прошивки и поддерживаемого автомобиля.

CAN Box и китайские Android-магнитолы

В китайских Android-магнитолах CAN Box часто используется как посредник между электроникой автомобиля и самой магнитолой.

Один из распространённых вариантов взаимодействия — последовательный интерфейс UART.

CAN Box получает сообщения автомобиля, преобразует их в собственный протокол и передаёт магнитоле.

Магнитоле уже не нужно самостоятельно разбираться в особенностях автомобильной CAN-шины.

Она получает готовые команды, которые может обработать программное обеспечение.

Например:

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

Разумеется, далеко не каждый CAN Box поддерживает все перечисленные функции.

Кроме того, UART-протоколы различных производителей могут отличаться.

Но здесь есть интересный момент.

Если китайская Android-магнитола способна получать и обрабатывать такие команды, то почему этого не может делать собственное устройство?

Для этого совершенно не обязательно использовать Android.

Достаточно подключиться к соответствующему интерфейсу и реализовать обработку протокола.

Это может быть Raspberry Pi, другой одноплатный компьютер или микроконтроллер.

CAN Box как альтернатива собственному контроллеру питания

Именно здесь я обнаружил наиболее интересную для себя возможность.

При разработке автомобильной магнитолы на Raspberry Pi одной из задач становится правильная организация питания.

В отличие от обычной магнитолы, одноплатный компьютер работает под управлением операционной системы.

Для корректного завершения работы Linux желательно предусмотреть время между получением команды выключения и фактическим отключением питания.

В первой версии CaRadio эта задача уже решена: Raspberry Pi автоматически выключается при извлечении ключа из замка зажигания.

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

После знакомства с CAN Box стало понятно, что во многих случаях собственный контроллер может вообще не понадобиться.

Готовый CAN Box способен определять состояние зажигания по сообщениям автомобиля и формировать сигнал ACC.

Этот сигнал можно использовать для управления питанием магнитолы.

Если требуется корректное завершение работы Linux, достаточно передать изменение состояния ACC компьютеру и предусмотреть небольшую задержку отключения силового транзистора.

Например, на 20–30 секунд.

Реализовать такую задержку можно сравнительно простой электронной схемой, без разработки отдельного программируемого контроллера.

При этом стоит отметить, что на практике устройства на Raspberry Pi способны годами работать даже при непосредственном отключении питания.

Однако жёсткое выключение во время записи данных всё же создаёт риск повреждения файловой системы.

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

Конечно, перед использованием CAN Box необходимо проверить, как именно конкретная модель формирует ACC и как ведёт себя при выключении зажигания.

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

А стоит ли разрабатывать собственный CAN-контроллер?

С технической точки зрения разработка собственного устройства вполне возможна.

Понадобятся микроконтроллер, CAN-трансивер, схема питания, защитные элементы и соответствующее программное обеспечение.

Затем необходимо исследовать сообщения автомобильной CAN-шины, определить нужные идентификаторы и разобраться в формате передаваемых данных.

Это интересная задача, особенно если целью является изучение автомобильных протоколов.

Но если задача заключается исключительно в получении нескольких управляющих сигналов, возникает вопрос экономической целесообразности.

Готовый CAN Box уже содержит необходимую электронику и прошивку для поддерживаемых автомобилей.

Вместо самостоятельной разработки аппаратной части и декодирования CAN-сообщений можно использовать его готовые выходы или исследовать значительно более простой протокол обмена с магнитолой.

С учётом стоимости компонентов, изготовления платы и времени на разработку покупка готового CAN Box может оказаться существенно выгоднее.

Разумеется, это справедливо при условии, что приобретённый декодер совместим с автомобилем и предоставляет необходимые функции.

Что находится внутри

Вернёмся к моему CAN Box.

Как я уже упоминал, устройство досталось мне вместе с китайской Android-магнитолой.

На корпусе указана модель G-VW-RZ-58, а также информация о версиях аппаратного и программного обеспечения.

После вскрытия корпуса удалось рассмотреть электронную плату и основные компоненты.

Несмотря на небольшие размеры, устройство содержит всё необходимое для взаимодействия с автомобильной CAN-шиной и передачи обработанных данных внешнему оборудованию.

Отдельный интерес представляет прошивка микроконтроллера.

Именно она определяет, какие CAN-сообщения устройство распознаёт и каким образом преобразует их в управляющие сигналы.

Поэтому два внешне похожих CAN Box могут существенно отличаться по функциональности.

Неожиданный вывод

После изучения устройства я пришёл к довольно неожиданному выводу.

Подобный CAN Box прекрасно подошёл бы ещё для первой версии CaRadio.

С его помощью можно было бы получать сигнал ACC непосредственно из автомобильной CAN-шины и использовать его для автоматического управления питанием.

А при подключении UART — получать дополнительные события автомобиля, которые обычно обрабатываются китайскими Android-магнитолами.

И всё это без необходимости самостоятельно разрабатывать CAN-контроллер.

Возможно, если бы я раньше знал, как устроены подобные декодеры и какие возможности они предоставляют, я просто приобрёл бы CAN Box отдельно.

И не исключено, что необходимость перехода на китайскую Android-магнитолу вообще не возникла бы.

Впрочем, именно благодаря этим экспериментам я и познакомился с CAN Box.

А теперь появилось желание разобраться в его работе более подробно.

Что дальше

В следующей части попробуем перейти от теории к практике.

Подключим CAN Box к автомобильной CAN-шине и посмотрим, как он реагирует на различные события.

Проверим формирование ACC, реакцию на включение задней передачи и освещения.

Также попробуем исследовать обмен данными через UART и выяснить, какие команды CAN Box способен передавать магнитоле.

Главная цель — понять, насколько просто можно использовать готовый автомобильный декодер в собственных электронных проектах, не привязываясь к конкретной модели Android-магнитолы или вычислительной платформе.