Comments 54
Как по мне, так это просто шикарная работа!
Обожаю изящные решения и подход «не навреди, но добавь» одобряю безмерно.
Отличная работа. Я видел похожу наработку, тоже для mazda, интегрировали радар-детектор таким образом. В той статье еще говорилось что кнопки на руле тоже шлют сообщения в CAN шину.

Хочу себе подобное, но не получилось найти ничего по сообщениям CAN в Lexus
Спасибо за отзыв!

К сожалению, кнопки на руле не «транслируются» в CAN-шину (хотя я на это очень надеялся и даже пытался «выловить» их). Все «точки над i» расставила принципиальная схема, на которой видно, что блок кнопок подключается к магнитоле.

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

Привожу два сообщения, которые что-то выводят на дисплей (это первая и вторая часть строки, выводимые на дисплей авто):
0x290	192	65	85	88	32	32	32	32	
0x291	135	32	32	32	32	32	32	32

Первый столбец — это идентификаторы сообщений, остальные — собственно данные.

Дешифруйте?

Понятно, что тут я уже очень сильно все упростил (показываю только нужные данные), но принцип, думаю, будет понятен.
Даже слишком. Длина сообщения фиксирована — 8 байт. 32, понятное дело, пробельный символ для того, чтобы затереть то, что было в ячейке, но ничего не вывести. Таблицы символов, скорее всего, по стандарту HD44780.

Первая команда выводит «AUX», вторая очищает экран, если так можно выразиться. При этом немного напрягают первые байты сообщения C0 и 87. Было бы 0C — это управляющий символ очистки экрана. А так C0 — кастомный символ, который может быть чем угодно (например, ">"). 87 — это знак «x». Т.е. это либо AUX и чистый экран, либо что-то вроде ">AUX" и «x». Еще версия — 1 байт в сообщении — команда контроллеру. Т.к. C0, например, это по даташиту HD44780 сдвиг курсора влево до упора, что логично, но опять не понятно, при чем тут 87.
Все верно, только полная строка — 12 символов, поэтому две посылки (первая и вторая часть)… первые байты — никогда не меняются (как раз что-то кастомное, зависящее от машины, любое другое значение и команда просто игнорируется). Кодирование — просто ASCII.

Эта посылка выводит скромное сообщение «AUX», которое как раз и являлось в моей машине практически постоянным (слушаю музыку через блютус) без изменений и навевало скуку — поэтому и решил вывести что-то более информативное.

Кстати, кнопка на магнитоле, которая включает этот режим называется «MEDIA», поэтому в прошивке я вывод «AUX» поменял на «MEDIA» (просто «для порядка»).
Теперь понятнее! Возможно, это расширенный протокол с адресацией. Встречал такое не раз на другого рода девайсах. Тем более, устройство подключено к CAN шине. Т.е. эти байты — адрес устройства, которому предназначена посылка. Видимо в прошивке, ограничивающей или реализующей тот или иной функционал, в зависимости от модели заложены разные адреса устройств, являющиеся константами.
Можно еще вопрос — правильно ли я предполагаю, что обращение к дисплею идет как к двухстрочному, при физически последовательном расположении строк друг за другом?

0х290 1-8 байт
0х291 9-12 байты и 4 байта пробелов?
Да, примерно так и есть. Только я чуть иначе для себя это интерпретирую:
На дисплее есть «знакоместа» (для основной части), которые задаются тремя посылками (каждая по 8 байт).
Первая (0x28F) — отвечает за надписи над основной строкой (DISK IN, AF и т.п. — см.фото). Без этой посылки дисплей остальное игнорирует.
Вторая (0x290) — за первые 7 символов в строке (первый байт — «специальный» и не меняется)
Третья (0x291) — за оставшиеся 5 символов (больше просто нет на дисплее) — там первый байт тоже «специальный»… а «лишние» байты разработчики решили добить «пробелами» (туда можно что угодно посылать — реакции никакой).

Блок «климата» на дисплее — там тот же принцип, но не было нужды его декодировать (его идентификатор я привел в статье).
Сам знаю что вы провели огромный труд.
Я думаю стоит не останавливаться и развивать проект.
У меня дома валяются камера, пара микросхем что бы прикрутить камеру к штатной магнитоле, есть готовое решение. Но никак не могу выкроить время.
А тут такая работа проведена! Восхищен. Надо продолжать дело и продолжать ставить на поток!
Если не секрет какие трудозатраты на все это без учета продакшина?
«Ставить на поток» можно только при наличии спроса, а его (особенно в текущей экономической ситуации) просто нет. Пытался пообщаться с установщиками и сервис-менами — всем интересно, но никто не заинтересован.

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

P.S. соседи, наблюдая меня почти все новогодние каникулы сидящим в машине, уже начали интересоваться, все ли в порядке у меня в семье («жена выгнала?!»).
Пятый год пытаюсь найти специалиста который смог бы прикрутить AUX в штатную магнитолу Opel Corsa D, но безуспешно, а ведь наверняка там всё также логично!
К сожалению, не всегда так.

Пример: В Peugeot можно было активировать Aux (хотел bluetooth подключить). Делается это диангостическим компом — т.е. даже никакой «железячной» доработки. Подключились, посмотрели и не смогли включить. Оказалось, что бывают две версии магнитолы. Мне — не повезло.
Более того, там не всегда понятна логика включения/отключения опций по названию чекбоксов. У меня 307 дорестайл, и мне надо было активировать круиз-контроль. Я больше часа катался, пока мастер, сидящий рядом со мной, опытным путём искал нужную комбинацию на компьютере.
В Volvo S40, например, нужно подпаять два провода к усилителю, а с другой стороны припаять обычный 3.5 разъем. Скорее всего, не только на S40, но и на других Volvo тех лет без AUX. Там еще альтернативный вариант был, с подключением специальной штуки в оптический разъем для CD-чейнджера, тогда еще и кнопки на руле работают, но он дорогой.
Может, первый вариант и для Corsa прокатит?
Может быть и припоять 3.5 к разъему можно, там по схеме разъема даже есть необходимые контакты, но в меню магнитолы просто нет режима AUX. Читал на форумах, что некоторые умельцы реализовали AUX через режим радио диапазона AM или через CD, но в Екатеринбурге таких спецов не встретил…
Нужно найти схему (распиновку) магнитолы/усилителя. К примеру, на моей mazda если просто подпаять «джек» для AUX — ничего не заработает (в магнитоле не появится соответствующий вход), но если один из «соседних» (по разъему) контактов подключить к «земле» — вход чудесным образом появляется.
Насчет S40 деталей уже не помню, по-моему перемычек там не было, а AUX-вход работал как бы вместо CD, т. е. жмешь кнопку CD, включаешь музыку на AUX — играет музыка.
У корсы все сложнее я погуглил. Там еще прошивку менять менять надо, чтобы магнитола знала про аукс. Либо колхозить реле. У корсавдов на форуме все есть.
AUX вообще много где можно припаять. В bmw 750 2007(?) он припаивается на радио, в саабах до 97 на касетник. Есть еще всякие модные штуки которые из 6 дискового чейнджера делают 7 дисковый и 7 диск это AUX. Видел даже такой у которого даже переключение треков с руля работало.
Спасибо за статью, сам люблю такой же тюнинг, когда добавляется новый функционал не нарушая заводскую концепцию авто.
Для часов хочу посоветовать батарею ER2450 (ссылка на характеристики) ее минимальная рабочая температура -55 С. Думаю хватит с запасом. Такие батареи ставят на датчики давления в колесах авто. Но у нее один минус — купить в России практически не реально (у меня не получилось), помогут только иностранные интернет — магазины.

Знатная штука получилась! Механизм настройки порадовал. Вспомнился анекдот про программиста и заглохший автомобиль: «А давайте все выйдем, а потом снова сядем».
Подобным способом прописываются новые ключи в Фиатах, например. Там тоже нужно сделать последовательность действий (типа):

1. Вставить мастер-ключ в замок.
2. Повернуть в положение ACC 3 раза.
3. Вставить чистый ключ-болванку.
4. Повернуть в положение ACC 2 раза.
5. Педалью газа ввести пин-код с карточки, прилагаемой к мастер-ключу (с завода). Количество нажатий равно цифре пин-кода. Пауза между вводом цифр — 2 секунды.
6. Вставить мастер-ключ.
7. Повернуть в положение ACC 3 раза.

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

P.S. Схема прописывания ключа взята из головы, но, принцип тот же.
Это, право слово, фейерично! Просто МЕГАтруд, результат меня поразил абсолютно, как будто «Концерн Мазда объявил о начале выпуска новых модулей», в общем, это далеко за уровень домашнего DIY, спасибо за статью.
Единственное что ждал, что после надписи «STOP» на дисплее появится бегущая строка «Теперь выйдите и посмотрите что вы натворили.»
У меня даже машины нет в настоящее время, но не удержался — прочитал. Автор — молодец!
Спасибо очень интересный пост! Единственное что мне не хватило в ней — это схема подключения к самой шине. Я как человек далёкий от автомобильной начинки не совсем понял — это врезка в провода, или есть разъемы есть куда можно без колхоза подключиться, или ещё как-то? И кончено хотелось бы скачать плату, чтобы на неё более детально посмотреть и попробовать реализовать подобное для своей машины (у меня kia ceed sw). На исходники, понятное дело, не расчитываю, но на плату очень надеюсь. :)
На kia seed это будет работать (когда искал данные, встречались заметки, где владельцы seed-ов тоже выводили информацию на дисплей). Только надо «отработать особенности» конкретного авто.

По поводу подключения:
Для «слушать» — можно ничего не резать, а подключиться к диагностическому разъему.
Для финальной установки — раскидать часть салона, найти провода CAN-шины, идущие к дисплею, разрезать их (и в разрез подключить мою плату).

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

К вопросу о подходах к реверс-инжинирингу… Если искать что-то больше, чем 1 бит, то появляется много интересных проблем:

  • У данных бывает множитель;
  • Данные бывают «размазаны» по нескольким байтам;
  • Данные могут изменяться очень редко.


Было пара задач в этой области.
небольшая картинка про экстерьеры автомобилей
image


Было написана небольшая программа в помощь, которая:

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

Это помогло достаточно шустро решить все проблемы нахождения данных, кроме одной — уровень топлива в бензобаке.
Да, все верно. Для примера я привел самый простой вариант. Те же скорости/потребления/обороты — закодированы двумя байтами (причем, некоторые данные были в одном сообщении, но в разных байтах). Но найти можно (при желании).

Специально программу с вашим функционалом не писал — просто в скетч добавлял по ходу исследования необходимые условия и вывод отладочных сообщений.
Тот случай, когда тачку прокачивают _уменьшением_ количества дисплеев.
Ух, класс! Поставил себе в Yeti мультируль, но вот незадача: у него два блока кнопок, слева для магнитолы(они работают), а справа для управления расширенным БК т.н. Maxidot, которого у меня нет(есть обычный БК управляемый кнопками с правого подрулевого рычага) и правый блок кнопок не работает.
Интересно, можно их как-то задействовать? А то не комильфо :)
Наверняка. Они, скорее всего, резистивные (надо задействовать всего-то один аналоговый вход). И использовать их для чего-нибудь полезного.
Они, скорее всего, резистивные

Так и есть. У меня есть предположение, что их нажатия транслируются подрулевым блоком в CAN, где их слушает Maxidot и он может их переделывать в сообщения магнитоле (т.к. этими кнопкам можно делать операции и на магнитоле в зависимости от режима на maxidot), а простой БК слушает только кнопки подрулевого рычага. Вот и появилась мысль, что если попробовать перехватывать кнопки руля и переделывать в сообщения кнопок подрулевого рычага. Правда я в «железе» не бум-бум :)
Надо «слушать». Но может оказаться как у меня в Mazda — блок кнопок от руля подключается напрямую к магнитоле (куда круиз подключен — не выяснял, схема не попалась).
Даже если напрямую, ничто не мешает прицепить их к своей схеме, которая будет транслировать эти кнопки в CAN
Пока читал статью думал зачем две MCP, когда какой-нибудь STM32 на АРМе будет иметь два CANа на борту и будет дешевле и шустрее этого набора.
Безусловно, использование профессиональных инструментов могло бы помочь реализовать необходимый функционал быстрее/лучше/более оптимально (нужное подчеркнуть), но для «проекта выходного дня» это может быть избыточно.
Но дисклаймер про ардуино все прояснил :D
Невероятно просто! Очень понравилось!
Нет желания поковыряться в машине постарше в Питере? Дам свою для опытов! :)
С приложения хабра для айфона не видно с какого вы города. :(
Но я так понимаю, не из Питера.

Тем не менее, работа потрясающая! Я очень впечатлен! С удовольствием бы пожал вам руку за такой подход к делу! Очень круто!
«Включение/выключение функций/сообщений — ручником» — эта пять! :)
Если есть возможность напиши в личку.
Есть CITROËN C4 2012г хотелось бы то же попробовать так сделать.
ramzes.ru@mail.ru
Если что получится чиркани, тоже подключусь к раскопкам. Пока дико нет времени, но интересно. У меня ds4. Хочу вытащить на дисплей температуру движка и заюзать левую торцевую кнопку.
О_о Неужели вам настолько нужна была функция отображения? Покупал в Китае парктроник за 600 рублей специально без дисплея. Только с пищалкой. Установил за час без лишних проблем. Исправно работает уже несколько лет. И дисплей мне не нужен, т.к. при движении задним ходом смотрю назад или в зеркала.

А вот камера заднего вида в придачу к парктронику была бы кстати.
Скучно и не спортивно. Ваш парктроник двери на скорости тоже запирает?

А вообще ответ на Ваш вопрос: «Потому, что я хочу и могу».
Резистор в 120 Ом — это не для дисплея, это терминальный резистор CAN-шины. С каждой стороны шины по одному такому стоять должно.
Only those users with full accounts are able to leave comments. Log in, please.