Вопрос

Управление дверными замками по шине CAN

Я пытаюсь понять, как запирать и отпирать двери Toyota RAV4 2010 года выпуска с помощью шины CAN через порт OBD-II. У меня есть микроконтроллер, подключённый через CAN-контроллер и CAN-приёмник, и я написал прошивку для захвата и воспроизведения сообщений.



Если я открываю двери с помощью брелока или дверной кнопки, то получаю шквал сообщений на безмолвном в остальном автобусе (ключ вне машины). Однако при их повторном воспроизведении ничего не происходит. Я предположил, что это может быть связано с какой-то проблемой аутентификации, поэтому попробовал что-то менее чувствительное — фары. Интересно, что при повторном воспроизведении сообщений о включении фар на приборной панели ненадолго загорается индикатор фар, но сами фары ничего не делают.



Думаю, у меня есть несколько вопросов:



1) Возможно ли это через шину CAN, подключённую к порту OBD-II? Я видел источники, в которых говорится, что двери управляются по другой, более медленной шине, но я также видел рекламу устройств, которые блокируют двери при достижении определённой скорости.



2) Подвергаются ли другие автобусы какой-либо опасности?



3) Есть ли способ узнать значение записанных мной сообщений, не платя Toyota огромные деньги?



Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/6493/controlling-door-locks-via-can-bus

13 Комментариев

  1. То, что вы хотите сделать, возможно. У меня был похожий опыт и желание сделать то же самое с моей Camry 2010 года выпуска. По моему опыту, чтение сообщений с порта OBD-II ни к чему не приводило. Как будто сообщения CAN были лишь реакцией на мои действия по управлению автомобилем вручную.



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



    Вам нужно приобрести разветвитель OBD-II и копию Toyota Techstream с «мини-кабелем VCI» . Это позволит вам считывать сообщения, которые программа Techstream отправляет через порт OBD-II.



    Вы должны уметь:



    1. Блокировка и разблокировка водителя/всех дверей



    2- Попсовый багажник



    3. Включите ближний и дальний свет, а также поворотники



    4. Посигналь



    5. Поднимите и опустите окна



    6. И т. д.



    ...или, по крайней мере, у меня всё получилось!!



    YMMV и удачи! :D



    (Я не несу ответственности за ущерб, причиненный мне или моей машине.)


  1. Даже если вы подключитесь к нужной шине и отправите правильное сообщение CAN, вы всё равно столкнётесь с проблемой передачи сообщения CAN, которое уже отправляется другим ЭБУ.



    Принцип работы CAN заключается в том, что каждое сообщение имеет идентификатор арбитража, также называемый идентификатором сообщения. При нормальной работе ни один ЭБУ не будет транслировать сообщение с таким же идентификатором на той же шине. Если вы сделаете это. Теоретически вы сможете заблокировать или разблокировать дверь, передав на шину нужное сообщение, но я бы не стал использовать этот метод в продукте, так как злоупотребление шиной будет мешать работе ЭБУ, которые транслируют сообщения с более низким приоритетом.



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



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



    Подсказка: поищите в интернете распиновку разъема OBD в вашем автомобиле.




    1) Возможно ли это через шину CAN, подключённую к порту OBD-II
    ? Я видел источники, в которых говорится, что двери управляются с помощью
    другой, более медленной шины, но я также видел рекламу устройств, которые
    блокируют двери при достижении определённой скорости.




    Да, это возможно, но вам нужно знать распиновку OBDII в вашем автомобиле, которая, скорее всего, не является общедоступной информацией. Однако вы можете определить, какие контакты вам нужны, исключив стандартные контакты OBDII.




    2) Подвергаются ли другие автобусы какой-либо опасности?




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




    3) Есть ли способ узнать значение записанных мной
    сообщений, не платя Toyota огромные деньги?




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



    Это потребует немало времени и взлома.


  1. Если бы я был разработчиком электроники, я бы сделал так, чтобы это было невозможно сделать через CAN-шину, просто потому что для OBD2 есть Bluetooth-адаптеры, с которыми может соединиться кто-то, стоящий снаружи автомобиля, и отправить команду на разблокировку.



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


  1. Обычно шина OBD CAN «подключается» к другим шинам CAN автомобиля, чтобы упростить диагностику электронных блоков управления на других шинах. Однако мост может передавать только диагностические сообщения :( На каждой платформе это происходит по-разному.



    С точки зрения протокола — это классическая задача реверс-инжиниринга. Вам нужно записать несколько фрагментов активности CAN при нажатии кнопки разблокировки и выяснить, каков формат сообщений. Пример с фарами может указывать на то, что существует несколько шин, и у вас есть доступ только к одной из них (которая в данном случае идёт к приборной панели, а не к фарам)



    Что касается дверных замков, то вполне возможно, что там используется какой-то механизм «запрос-ответ», который останавливает вашу простую «повторную атаку».


  1. Маккой, я пытаюсь сделать в точности то, о чём вы написали. Я установил Techstream, и у меня есть USB-адаптер, подключённый к моей Corolla 2012 года, но, похоже, он не выполняет никаких настроек. Не могли бы вы рассказать, как вам удалось достичь этой цели? Спасибо
  1. Возможно, вы правы, но на практике несколько ЭБУ не передают одно и то же сообщение с одним и тем же идентификатором одновременно по одной и той же шине. Но если вы просто копируете данные с ключа, то вам нужно просто копировать поступающие от него сообщения и следить за тем, какие биты меняются или когда отправляется сообщение, если оно основано на событиях.
  1. Передача данных и коллизии не являются проблемой. Обо всем этом заботится контроллер CAN — для этого он и нужен. У меня есть схема электропроводки автомобиля, и в ней указана только одна шина. У меня есть ключ, который запирает двери на определенной скорости (около 8 км/ч), и он отправляет сообщение «запереть дверь» один раз. Похоже, это довольно легко воспроизвести.
  1. @mac - действительно так
  1. Вполне возможно, что сами фары даже не подключены к шине CAN, а управляются с помощью отдельной проводки и реле, в то время как индикатор фар подключен к шине CAN вместе с остальными приборами.
  1. Это пугающая мысль. К вашему сведению: существуют адаптеры OBD-ii с поддержкой Wi-Fi, и радиус их действия достаточно велик.
  1. Bluetooth-адаптеры бесполезны, если у вас нет доступа к автомобилю для подключения Bluetooth-приёмника. Тем не менее, оказывается, это возможно.
  1. Если вы используете AutoCommander (бесплатный инструмент для Linux), вы можете делать снимки, воспроизводить звук, находить коды (он анализирует данные, чтобы найти нужный код) и т. д. Я использовал его для того, чтобы делать именно то, что делаете вы.
  1. Удалось ли вам подключить его через OBD-II или вам пришлось пойти другим путём?
Вы уже ответили на этот вопрос