Pull to refresh

Comments 42

UFO landed and left these words here

Да. Я лично видел как интерфейс CAN используют в автомобилях, в RFID считывателях для шахтёров, в грузовозах, в автобусах, в нано спутниках CubeSat(ах) и даже космических зондах!

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

В связи с этим мне всегда было непонятно как такие системы проектировать: у нас есть N устройств, которые должны в гарантированные промежутки времени (реалтайм же!) "высказаться". Но если их много то как определить успеют ли они это сделать?

Или просто загруженность шины не должна быть выше единиц процентов чтобы эта гарантия соблюдалась?

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

Именно про CAN-шину и вопрос! Где гарантия что все устройства (разложенные по приоритетам и всё такое прочее) успеют высказаться? "Математически" это доказать можно?

Если никто не будет подтверждать пакеты с ID=000 то контроллер при определённой настройке будет спаммить ими без временного интервала. Шина ляжет с этим пакетом на ней. Я проводил такие эксперименты, когда игрался с CANом у STM32.

Если никто не будет подтверждать пакеты с ID=000 то контроллер при определённой настройке будет спаммить ими без временного интервала. Шина ляжет с этим пакетом на ней. Я проводил такие эксперименты, когда игрался с CANом у STM32.

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

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

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

Если никто не будет подтверждать прием пакета с любым CAN ID, то контроллер будет спаммить до переполнения счетчика ошибок передачи 

Это называется CAN BUS-OFF

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

Верно, но более высокий ID теоретически может перебить арбитраж, а 000 никто не перебьёт.

Контроллеры кан-шины не имеют возможности выборочно подтверждать пакеты, как в I2C, например. Любой корректно сформированый пакет аппаратно подтверждается всеми, кто его слышыт.

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

Если устройство одно, то, как правило оно и продолжает долбить шину своим единственным пакетом. Ну и пофиг, всё равно этот пакет никому не нужен в таком случае. С программной стороны это приходится анализировать, ставить какие-то таймауты и всё такое.

"Арбитраж доступа" - это про недопущение одновременного говорения и про вытеснение менее приоритетных более приоритетными

А я говорю о том что в конечном счёте ведь все должны "высказаться" за определённое время, а значит должна быть методика расчёта гарантий того что самое низкоприоритетное устройство всей шины успеет сделать все свои дела за отведённое время

Доказать можно. Например:

Берём интервал, за который устройство должно успеть "высказать" пакет с данным ID. Считаем, какую часть этого интервала может занять передача всех пакетов с бОльшим приоритетом в худшем случае. Если эта часть меньше выбранного интервала (есть запас по скорости), то устройство высказаться успеет. И так для каждого ID.

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

Как определить сколько time quantum (Tq) следует выделить пред делителем для одного CAN бита? 10? 20? 40?
Проще говоря, какое разрешение нужно для одного CAN бита?
Это можно как-то математически рассчитать?

Интересный вопрос, кстати. Я выбираю от 7 до 12, в зависимости от соотношения тактовой частоты и скорости. Мельче смысла не вижу.

Но это я с потолка по факту цифры беру. Может быть в стандарте какие-то рекомендации есть. Также можно посмотреть в исходники CANable, как там считают.

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

https://canhacker.ru/wp-content/uploads/2020/03/CAN-RX-OK.jpg

Меньший ID даёт больший приоритет при передаче. Поэтому более частым сообщениям присваивают меньший ID. На картинке Period - в миллисекундах.

Это понятно. Вопрос в том, как измерить процент загрузки CAN шины? Каким оборудованием?

На глазок - осциллографом)

А если точно надо - также, как и во всех остальных протоколах: взять секундный траффик, хоть в электронную таблицу сохранить. Посчитать, сколько битовых интервалов занято под данные, служебную информацию, необходимые паузы, битстаффинг. Разделить на скорость.

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

А оборудование - кому что нравится. Я пользуюсь простыми устройствами с али, с открытой прошивкой типа CANable, CANtact и софтом can-utils. Кому-то адаптеры OBD2 ближе, или кан-хакер жаба не душит купить. CAN-FD я пока не пробовал, но тоже какие-то решения для сливания траффика есть.

Можно метафорично сказать, что CAN - это нервная система автомобиля.

Вот не нужно так говорить.

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

В пакете самое важное это 8 байт (64 бит) полезных данных. Мы это называем сообщением.

Кстати, CAN сообщение может быть и без данных, но от этого оно не перестанет быть CAN сообщеним.

GD32C103CB два канала CAN-FD. Цена - копейки.
Запускаем портированный CANact и больше ничего не надо (кроме компьютера/телефона/планшета конечно)

--Каким переходником с USB на CAN-FD можно отлаживать интерфейс CAN-FD? Какое для этоно нужно ПО?

Peak Can FD

Как взламывать CAN трафик в иномарках? Какой пакет CAN шины отвечает за скорость автомобиля?

Захватываем трафик анализируем долго думаем. Тем более обычно есть два способа, из порта ODB, и напрямую с шины которая может её в RAW передавать. Надо только знать что она может передаваться и в оборотах колеса в минуту.

Как найти в CAN трафике легкового автомобиля пакет, который показывает количество пассажиров в автомобиле?

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

Как измерить процент загрузки CAN шины трафиком в реальном времени?

Peak Can FD показывает и график рисует.

Захватываем трафик анализируем долго думаем. 

Проблема в том, что в UDS захватывать нечего. Без запроса ECU не ответит. Надо знать, что спрашивать.
Если нет команд UDS, то ничего кулибину и не узнать будет.

Если нет команд UDS, то ничего кулибину и не узнать будет.

Всё так и не так. Там обычно шин то несколько они сходятся в "свич" на котором сидит ODB. Думаю вам об этом известно и так. Так вот до ODB там может быть всё что угодно и оно совсем может быть и не UDS. Это вопервых.

Во вторых если ECU знает скорость, то видимо он ей с кемто делится, ну например с дисплеем на котором спидометр рисуется(InstrumentCluster вроде бы зовется). Ну вот они между собой должны общаться что в логе можно и выловить.

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

Это был вопрос шутка. Нет в автомобилях датчиков количества пассажиров. Правильный ответ: никак.

Если бы Вас попросили найти в CAN трафике Renault Logan данные о цвете глаз водителя Вы бы тоже всех своих знакомых стали в автомобиль по очереди сажать и как медвежатник взламывать CAN шину?

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

Мне если честно абсолютно не интересно есть оно там или нет. А датчики наличия пассажиров на сиденьях вполне могут стоять. Да я понимаю, что сейчас услышу мол а вдруг на одно сиденье два человека сели итд. Но сама суть не меняется.

Если бы Вас попросили найти в CAN трафике Renault Logan данные о цвете глаз водителя вы бы тоже всех своих знакомых стали в автомобиль по очереди сажать и как медвежатник взламывать CAN шину?

Если бы там был датчик которые регистрирует цвет глаз водителя и шлёт на CAN, и это где то отображается, что можно убедится что это работает, да я бы так и сделал.

А что собственно удивляет?

В сиденьях есть датчики которые «видят» сидит кто то или нет, например для индикации непристегнутого ремня безопасности

Подушки так же не взорвутся, если увидят непристёгнутый ремень безопасности. Привет адептам заглушек "чтоб не пищало", которым эта подушка гарантированно свернёт шею, ибо она работает именно в паре с ремнём (ремень удерживает тело, подушка голову и все расстояния просчитаны очень точно).

У меня при дтп водительская и пассажирская сработали, хотя на пассажирском кресле ни кто не сидел, а я (водитель) был не пристегнут

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

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

Я использую кан хакер, очень удобный девайс. Там у них не очень очевидно, что, как и откуда надо установить. Но в остальном он очень удобный. И цена приемлемая. До этого использовал буржуйский пик кан, больше не пользуюсь этой хренью.

Спасибо автору за труд - занавес слегка приоткрыт. Но до ликбеза конечно тут ещё далеко. Вот например, чем отличается can classic и can2.0, да ещё А и В? Про стандарты ничего не сказано. А ещё есть стандартные идентификатор пакетов - для автодиагностики полезно знать. Есть онлайн калькуляторы пакетов. А ещё и шнайдер пошалили и can open "подарили миру".

Рассказывать про CAN и ни разу не привести как это расшифровывается. Только в конце маленькая табличка акронимов... Это фиаско, братан.

CAN это Controller Area Network, и вот уже не надо придумывать метафоры про нервную систему автомобиля, правда?

PS Забавный факт: can в английском может переводиться как жестяная банка (консерва). Применение в автомобилях символично.

В английском очень много слов на 3 буквы.
Поэтому их тексты всегда лаконичные и компактные.
Люди быстрее обмениваются инфой и, как следствие, быстрее делают дела.
Наверное поэтому они такие развитые.

Sign up to leave a comment.

Articles