CAN Filter

  • Автор темы Автор темы eloev
  • Дата начала Дата начала

eloev

Участник форума
Форумчанин
26 Окт 2023
72
7
В некоторых ситуациях необходимо применить устройства блокирующие передачу определенных сообщений по линии CAN. В обиходе - "CAN фильтр". Например его можно поставить для разблокировки видео в движении, если, конечно, нельзя этот вопрос решить по другому. Ну и для других целей :) суть которых изменить информацию передаваемую по цифровой шине.
Изготовителей много. Цены разные. От дешевых "китайцев", до супердорогих (видел даже за 500 евро
030.gif
007.gif
) типа "брендовых". Устройство, практически одинаковое. Как правило (есть исключения, не меняющие сути) выполнены на процессоре xxxF105. Имеют на борту 1 или 2 стабилизатора напряжения. Для понижения напряжения с 12 до 3 вольт. Применение 2х более предпочтительно, поскольку понижение сразу с 12 (реально с 14...16) до нужных 3.3 достаточно тяжелый режим для линейного стабилизатора. Поэтому "менее жадные" ставят два. Сначала до 5в, потом до 3. Ну и бонусом можно использовать 5вольтовые драйверы CAN. Есть еще те, которые можно устанавливать внутр блока (только). Питать их нужно от 5в. Отличия конечно же в софте и возможностях. Есть "автоматы", которые сами определяют скорость и тип CAN. Есть мультибренды, их можно использовать не только на МЕРСЕДЕС... Переключение режимов может осуществляться переключателями или перемычками. В общем "зоопарк" не большой, но содержательный.
Под практическое исследование попали два "китайца". Один из низшего ценового. (но не самый плохой по изготовлению) с гордой надписью 18in1. Другой, предназначенный для работы с более менее новыми кузовами ( w213, 447 ... ) Стоимость его в 3 раза больше стоимости "старого".
Схемотехника одинаковая. (разные только в расположение деталей и надписи.
004.gif
) Простое сканирование показало, что оба работают одинаково. А именно изменяют часть сообщения по двум PID. Это относится к 204 и 212 и, скорее всего, к какому то еще старому кузову. Ну уж никак не к 213му.
Соответственно - работать на нем не будет. Не ведитесь - потеряете напрасно время и деньги.
Если есть желание обсудить данную тему, а так же известные PIDs и данные - давайте обсудим.
 
У 212, 166, 204 и проч частота шины 125, у 205, 213 и проч - 500, если нет автоопределения частоты и определения pid, который надо блокировать, то и не работает на другой частоте, если есть - будет работать. У меня есть фильтры, в которые я сам пишу прошивку либо 125 либо 500 либо автоопределение. Так и работает фильтр. А использовать его можно для чего угодно вообще, хоть другой вин подсовывать, хоть скрипты в кане запускать, например активация карплея или прошивка моторника прошивкой без адблю.
Только обсуждать тут особо нечего и тема умрет за три дня, потому что это не тот форум немного
 
Согласен с Вами. Забыл упомянуть про скорость. Области применения действительно очень широкие, просто я не стал сильно раздувать сообщение. Так что обсуждать можно, и можно много чего... Но это ИМХО. Возможно (или скорее всего) Вы правы - тема умрет поскольку форум не профильный. Но информация останется и, опять же - возможно, кому то окажется полезной. Хотя бы о том, что не стоит надеяться на китайскую поделку " ...for new models xxx"
002.gif

Написать собственный софт для примитивного фильтра не сложно. Сделать более "продвинутое" устройство немного труднее, но не катастрофически. Проблема только в наличии информации. На данном этапе жизни мне приходится работать и разрабатывать устройства "немного" более сложные, о существовании которых все знают, но 99,99% видели только в кино. Но это не означает, что мне неинтересно заходить на форумы и узнавать для себя что либо новое. Еще интересно наблюдать за юзерами, которые придя на ресурс не могут отличить CAN от LIN. Но за несколько лет превращаются в "гуру" (с их точки зрения, хотя все еще не отличают CAN2.0 от CANFD). В этом бы не было ничего плохого, если бы вымышленная "корона не давила сильно на мозг" не давая адекватно воспринимать информацию, что мир не крутится вокруг единственной темы. Я мог бы Вам привести несколько ярчайших примеров таких особей. Но не буду портить себе карму упоминанием всуе...
Поэтому я пишу на этом форуме, хотя отдаю себе отчет, что " ... это не тот форум немного" <c>
002.gif
Зато здесь комфортно и, возможно, родится общение и тема проживет больше 3х дней.
Вот Вы же ответили...
002.gif
 
кстати... Что вы имели ввиду под:
Если "автопределение частоты" это понятно и естественно, то "определения pid" не могу себе представить. Каким алгоритмом вы можете заставить устройство найти нужный? Или что Вы имели ввиду под этим?
 
Определив 125 блокировать, к примеру, 00000204, определив 500 блокировать, к примеру, 00000071, смотря для каких целей фильтр, например скрыть или изменить ВИН
 
А вот Вы о чем... Ну, это решение жизнеспособное и надежное, но не всегда. Например множество моделей имеет скорость 500, но разные PID для одних и тех же целей. В этом случае, естественно, не сработает. Нужно применять другие свичи, но это по моему мнению.
Интересно другое. Ответа на этот вопрос - я не знаю. Вернее теория понятна, но хочется услышать практическое подтверждение. (если конечно знаете) На 213 можно установить фильтр, который может останавливать одометр, но при этом скорость и пр. работает.
Т.е. метры стоят, а скорость измеряется. Мне всегда думалось, что информация о скорости является основной, а дистанция это уже производная, которая вычисляется в панели. Во всяком случае, практически во всех устройствах о которых я упоминал выше, так и происходит. Это логично.
Ну, либо наоборот, передается расстояние, из него считается скорость. Менее правильно, но тоже логично. Здесь же получается, что передаются отдельные данные о скорости и дистанции. Сами же вычисления происходят в другом блоке. Что скажете по этому поводу?
 
Автоопределение частоты не самое лучшее решение, каждый CAN модуль должен быть сконфигурирован под определенные нужды. Самое правильное решение писать прошивку под конкретный контроллер самому, лично я китайцем не доверяю в этом деле.

Причем тут профильный или не профильный форум? Форум это платформа, где можно обсуждать ту или иную тему. Этот форум вполне может подойти для обсуждение данной темы. А какие форумы считаются профильными по CAN шине? Ткните пальцем если не сложно. Другие форумы ничем не лучше этого. ИМХО.
 
"Щук Тальпиот" писал:Только обсуждать тут особо нечего и тема умрет за три дня
28.11 - 4.12 RIP
 
неужели нет альтруистов которые поделятся исходниками?) ну исходя из вышесказанного, что это все уже изучено и есть коды которые посылаются, можно ведь на али собрать самому если будет гайд. я бы собрал, если кто подсказал как собрать железо для VIM на ntg 2.5
 
Если Вам нужно в единичном экземпляре, то в качестве базы проще использовать готовый китайский, как основу. Т.е саму "железяку". На сегодняшний день ее стоимость ~ 10 евро на известном китайском сайте. Дешевле вряд ли получится. Написать простецький софт для тривиального фильтра - не сложно.
Самый простой путь (не самый правильный, но требующий МИНИМАЛЬНЫХ знаний в программировании контроллеров) - используйте STM32Cube. Он практически все сделает за вас.
Если в двух словах: инициализируете оба CAN в контроллере на нужной скорости. В callback функции (там где обрабатываются прерывания CAN) перенаправляете принятые данные из КАН1 в передатчик КАН2, и наоборот, из приемника КАН2 в передатчик КАН1. Вот собственно и весь "фильтр". Правда пока он еще ничего не фильтрует, а гонят данные прозрачно.
Чтобы сделать " фильтрацию", то нужно добавить анализ данных, например такой; "если пришло сообщение с ID=ххх, тогда 5-й байт этого сообщения нужно сбросить в 0." И после передать. Тогда получатель этого сообщения (блок, которому предназначалось сообщение с id=xxx) будет уверен, что например скорость авто равна 0.
Это "на пальцах" если. В сети очень много подробного описания работы с КУБом и пр. Нет смысла повторяться.
 
eloev,
Хорошая идея.
Вот нашел еще идею по прошивке данного модуля с китая на прошивку с софтом для удобного конфига. правда прошивка стоит 20-30 евро, но если ее получится извлечь у тех кто купил такой девайс то выйдет дешевле.
https://www.drive2.ru/b/622845850418173001
 
002.gif

В очередной раз убеждаюсь, что если что-то приходит в голову и есть желание это развить - нужно поискать в интернете, скорее всего это уже кто-то сделал...
004.gif

Интересный проект. Неплохо обставленный. Спасибо за ссылку.
Особо не вникал, нет возможности, но доки поглядел. Через пару дней вернусь в теплый кабинет - обязательно полюбопытствую еще.
Единственное замечание (на вскидку) - слишком много "обвесов". Как средство отладки и экспериментов - отлично, а вот в качестве рабочего устройства, на постоянное использование, мне кажется не годится. Отказоустойчивость устройства обратно пропорциональна его сложности и универсальности.
Если нужно прострелить мишень в виде бутылки - не нужно разворачивать ракетную установку. (Если нужно подменить одно сообщение в в шине, то ...)
Но, ИМХО, идея очень жизнеспособная. "Отламывать" (извлекать прошивку) устройство нет смысла, ввиду его стоимости. (Автор очень правильно поступил на мой взгляд). Очень адекватно. К тому же, судя по картинкам, есть привязка к номеру контроллера. Т.е. просто переписать на другой не получится. Можно конечно "отучить", но зачем? Намного проще написать свой софт и "винить во всех проблемах только себя"
002.gif
 
eloev,
Помню его устройство продавалось на доске объявлений около 50 евро стоило, пол года назад.
Пока поверхностно изучал эту тему, был приятно удивлен возможностям ИИ. весь код со всеми подсказками мне написал чат gpt)) ему конечно не нравится слово can hacker, он сразу начинает учить морали, что взломы это не хорошо. но это можно обойти путем нехитрых манипуляций с правильной постановкой вопроса. это к слову о том, что даже не имею знания в программировании, сегодня вполне реально самому собрать такую штуку.
Желание собрать есть, но каждый раз останавливает тот факт, что магнитола расположена на уровне ручки акпп, очень не удобно смотреть там видео.
Но если идея с VIM сомнительная в моем случае, то идея с добавлением одного значения из данных по кан например в приборную панель, думаю стоит заморочиться. например как тут, где добавили температуру масла в акпп
mini_1699137798_izobrazhenie_2023-11-05_014248783.png
 
Это за комплект, железо плюс софт? Вполне адекватно...
С "ИИ" тоже баловался. :) Правда давненько уже. Посмотрел код который он пишет. Улыбнуло. "Правильная постановка вопроса - уже половина ответа." Пока он понял, что я от него хочу - клавиатуру сломать можно :) Но все течет и меняется... Думаю, что вполне вероятно, можно будет пользоваться и таким способом. Главное, чтобы он не пошел по пути "пакистанских программистов", когда на задачу типа "Hello, World" требуется шесть листов исходников и четыре библиотеки... :)
Насчет VIM: всегда думал, что это для пассажиров. Смотреть видео и управлять одновременно, мне кажется не совсем правильно :) Вот если в машине ребенок, то мультики самое то... Хотя признаюсь, сам грешен, на дальних дорогах бывает старое кино - вполне "заходит". Но я больше слушаю. Хотя у меня на обоих мб мониторы стоят нормально. Хотя 211й мне всегда нравился. Когда он появился - это был "писк" совершенства (ИМХО). Экстерьер, салон даже сейчас выглядят очень достойно. 213й хоть и приятен, но как-то "растворяется" среди корейцев и прочего хлама. "Верните прицел на капот, изверги!!!"
007.gif

Прошу прощения за 4 строчки оффтопа.
Когда то на гитхабе встречал проект, где чел. на подобной панели (кажется на 203) и модуля собранного из "г... и палок" выводит на экран все что угодно. Чуть ли не в "DOOM" играет. (шутка, конечно)
002.gif

В любом случае, ход Ваших мыслей мне нравится.
У меня, например, давно есть желание сделать эмулятор радарного датчика. Один сдох (вспучило, как обычно) - пришлось выключить всю систему, пока. Цена на новый - конская. (с учетом того, что без этой системы авто ездит ничуть не хуже). Но если поставить эмулятор, то будет работать хотя бы одна сторона. Просто для ЧСВ приятно. Вполне вероятно на "Рождественских" займусь, пока будет время.
 
eloev,
Речь про Ashcon, сильный программист https://github.com/rnd-ash
Это кстати спидометр был с его 5.5 компрессора, он теперь на нем.
Еще кстати как вариант, можно c китайских сайтов по изготовлению плат, например https://www.pcbway.com/, брать недорогие исходники находить через автора статью на гитхабе и собирать те же can bus фильтры и не только.
 
Изготавливаете плату на контроллере имеющую две CAN шины, например STM32F105RC, с помощью CUBE инициализируете CAN1, CAN2, USB, для начала с использованием HAL библиотеки, перекидываете RxCAN1 на TxCAN2, RxCAN2 на TxCAN1, соединяете модуль в разрыв CAN шины и через USB выдаете пакеты CAN1 и CAN2 на терминал, после чего начинаете анализировать пакеты и записывать те, которые интересуют. Далее модификацией ПО подмениваете нужные PID-ы. Это любительский подход. Если хотите сделать более быстродействующее и надежное устройство, то используйте библиотеку LL или CMSIS. Если для кого то это темный лес, то лучше начинать не с CAN фильтра, а с изучения контроллеров, схемотехники и физического уровня CAN шины. Готовых решений нет, а если и есть, то в виде готового устройства, типа купить-поставить в автомобиль.
 
Это в том случае если Вы хотите получить анализатор. Для простого CAN фильтра поднимать USB не нужно. Это будет вносить только дополнительные задержки. К анализатору нужен еще софт на стороне хоста. Разгребать пакеты в терминале - еще то "удовольствие". Так что тут лучше использовать готовое устройство, коих более чем предостаточно. В том числе и условно бесплатных. Сам же фильтр можно делать и на HAL и даже на "регистрах в ручную". Хотя костыли HAL всегда можно подчистить. После инициализации контроллера их не так много. На время инициализации можно "забить". Абсолютно не важно, если контроллер стартанет на десяток микросекунд позже. Вообще тема поднималась не об этом, а об информации которую нужно отфильтровывать. В первом посту я писал о том, что фильтрует китайский фильтр. (какие ID и данные), с моей точки зрения это более интересно.
Прислал мне товарищ еще один фильтр, который был демонтирован с какого то мерседеса. (Он не помнит точно с какого). Анализ показал интересные результаты. Данные не просто сбрасываются в 00, а изменяются по определенному закону (по формуле, если хотите). Т.е. в зависимости от исходных значений изменяются выходные. И формула там не просто сложение (или другая элементарная функция), а что-то более интересное. Приеду домой - прикреплю лог, для тех кому интересно. На память - меняется содержимое 2,3,4-го байта. Скорость 500 кб/с
Может кто-то из знающих заранее предположить, что это может быть за алгоритм?
 
а об информации которую нужно отфильтровывать.
На память - меняется содержимое 2,3,4-го байта. Скорость 500 кб/с
Вот по этому я и затронул USB, ведь самое важное это знать что и когда подменивать. Если речь идет о VIM, то там не 500кб/с, фильтр надо ставить на салонную шину 83.333кб/с. Если ваш фильтр от мерседеса, и известно от какой модели, напишите PID и байты которые он фильтрует, может получится понять, что он делает.