Не получено подтверждение отправки can пакета через lan
Антивирусы непомогают,искать несколько файлов в system 32 я ненашёл,в реестре всё норм,винду переустанавливал,advarom проверял,а пакеты так и не принимает(0!). чё делать. раньше всё было норм лазил в инете и тд.
Антивирусы непомогают,искать несколько файлов в system 32 я ненашёл,в реестре всё норм,винду переустанавливал,advarom проверял,а пакеты так и не принимает(0!). чё делать. раньше всё было норм лазил в инете и тд.
ПОМОГИТЕ.
А можно поподробнее. Какие пакеты куда не отправляются, от куда не принимаются, какие файрволлы/антивирусы стоят, что за винда (ведь Windows?). Пока что могу лишь посоветовать переобжать кабель и отключить все файрволлы/антивирусы на время тестирования.
Не забудь привести результаты ipconfig /ALL
Какой же русский не любит быстрой езды - бессмысленной и беспощадной!
Нет такой чистой и светлой мысли, которую бы русский человек не смог бы выразить в грязной матерной форме.
Еще никто так, как русские, не глушил рыбу! (в Тихом океане - да космической станцией!)
А можно поподробнее. Какие пакеты куда не отправляются, от куда не принимаются, какие файрволлы/антивирусы стоят, что за винда (ведь Windows?). Пока что могу лишь посоветовать переобжать кабель и отключить все файрволлы/антивирусы на время тестирования.
Не забудь привести результаты ipconfig /ALL
Пакеты вообще не отправляются,стоит винда сп2,касперский стоял,однако после переустановки ничё не стояло и всё равно не работало,файрвол стандартный,как привести результаты??ТОЛЬКО ОТПРАВЛЯЕТ ПАКЕТЫ.
Наводящие вопросы:
какой комп?
какая сеть?
какой адрес у твоего компа?
какие адреса у других компов?
и менее сумбурно, пожалуйста.
Какой же русский не любит быстрой езды - бессмысленной и беспощадной!
Нет такой чистой и светлой мысли, которую бы русский человек не смог бы выразить в грязной матерной форме.
Еще никто так, как русские, не глушил рыбу! (в Тихом океане - да космической станцией!)
Ну вообщето стоит один комп,выделенная сеть,Pentium 4 3.2ggc>>>1gb ddr2>>>256mb gef 6600gt
Какое подключение к сети? VPN/просто ethernet без доп. настроек и т.д.
какой адрес у твоего компа?
какие адреса у других компов?
Какие файлы ты в System32 искал? Там что вообще файлов нет? Тогда переустанавливай систему. А ещё лучше переходи на Linux (серъёзно).
Как определяется, что пакеты только отправляются?
Что делается для того, чтобы "пакеты ходили по сети"?
валерьянки бы ему. Может курить отправим?
Какой же русский не любит быстрой езды - бессмысленной и беспощадной!
Нет такой чистой и светлой мысли, которую бы русский человек не смог бы выразить в грязной матерной форме.
Еще никто так, как русские, не глушил рыбу! (в Тихом океане - да космической станцией!)
К сожалению, на этом форуме, я например телепатов не встречал.
У тебя не принимаются вх. пакеты, а только отправка. А с чего ты взял, что отправка вообще происходит. Может компьтерные проги пишут - отправляю пакеты, а на самом деле пакеты никуда не отправляются.
Что бы починить автомобиль, нужно знать его устройство и как минимум понять где не работает. Вот ответь, что нужно починить в автомобиле, когда тебе говорят что он сломался. При этом уточняют, что автомобиль - мерседес. И с чего начать ремонтрование? С двигателя? Можно, но мож у авто просто колеса скрутили - тогда чего спрашивается в двигатель лезть?
Правда я глупость полную написал? Вот такую же мы видим и здесь про пакеты. Нужна дополнительная информация. Без нее никто ничем не поможет.
Кароче в warcrafte я немогу хостить=),стоит один компьютер ip такой 10.36.0.6*
Уже лучше. Нажим ПУСК --> Выполнить. Там набери cmd и нажми ОК. в черном окошке набери
ipconfig /all
результат скопируй в буфер (в названии окна через контекстное меню изменить --> пометить, мышкой выделяешь кусок информации и жмешь Enter ) в выложи сюда.
З.Ы. Уточни, что значит хостить в варкрафте.
Настройка протокола IP для Windows
Имя компьютера . . . . . . . . . : devilish-bb9776
Основной DNS-суффикс . . . . . . :
Тип узла. . . . . . . . . . . . . : неизвестный
IP-маршрутизация включена . . . . : да
WINS-прокси включен . . . . . . . : да
Подключение по локальной сети - Ethernet адаптер:
DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : Realtek RTL8139 Family PCI Fast Ethe
rnet NIC
Физический адрес. . . . . . . . . : 00-19-21-3C-74-1B
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : 10.36.0.63
Маска подсети . . . . . . . . . . : 255.255.0.0
Основной шлюз . . . . . . . . . . : 10.36.0.1
DNS-серверы . . . . . . . . . . . : 87.255.192.76
82.115.52.75
C:\Documents and Settings\DeviL.DEVILISH-BB9776>
Попробуем так.
Опять открываем cmd и набираем там
и еще
ping 87.255.192.76
Чтобы хостить в Варкрафте нужно иметь какой-то другой ip адрес,не как у мя
Наверное, имеется ввиду иметь в наличии "белый" ip-адрес. Он нужен, если надо организовать подключение из инета к тебе. Хостить в варкрафте - это типа сделать у себя сервер игры, так?
помогиите плиз. очень хочу научиться схостить в варкрафте. я просто нуб тута, можно все подробнее?? очень прищнателен.
помогиите плиз. очень хочу научиться схостить в варкрафте. я просто нуб тута, можно все подробнее?? очень прищнателен.
Помогите!Проблема как у DeViLа.сетевой адаптер NVIDIA nForce Networking Controller(родной,встроенный) не подключает к локалке,выдает "неопознанная сеть".При подключении через адаптер Realtek RTL8139/810x Family Fast Ethernet никаких проблем нет.
система windows wista home basik 32-разрядная
intel® Pentium®Dual CPU @ 2.20GHz 2.20GHz
Microsoft Windows [Версия 6.0.6000]
© Корпорация Майкрософт, 2006. Все права защищены.
Настройка протокола IP для Windows
Имя компьютера . . . . . . . . . : ppgoa
Основной DNS-суффикс . . . . . . : lesnoy.info
Тип узла. . . . . . . . . . . . . : Гибридный
IP-маршрутизация включена . . . . : Нет
WINS-прокси включен . . . . . . . : Нет
Порядок просмотра суффиксов DNS . : lesnoy.info
Ethernet adapter Подключение по локальной сети 2:
DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : NVIDIA nForce Networking Controller
Физический адрес. . . . . . . . . : 00-1E-90-99-3A-FB
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Локальный IPv6-адрес канала . . . : fe80::1cf9:b80d:c2f7:afeb%12(Основной)
IPv4-адрес. . . . . . . . . . . . : 10.0.9.35(Основной)
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . : 10.0.9.1
DNS-серверы. . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBios через TCP/IP. . . . . . . . : Включен
Туннельный адаптер Подключение по локальной сети*:
Состояние носителя. . . . . . . . : Носитель отключен
DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : isatap. 0F9>
Физический адрес. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Туннельный адаптер Подключение по локальной сети* 2:
Состояние носителя. . . . . . . . : Носитель отключен
DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
Физический адрес. . . . . . . . . : 02-00-54-55-4E-01
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Туннельный адаптер Подключение по локальной сети* 6:
Туннельный адаптер Подключение по локальной сети* 7:
Выполнение поиска устройства. Редактирование CAN-адресов
ПО RusGuard поддерживает два типа подключения устройств:
• | CAN-USB – подключение контроллеров по шине CAN через конвертер USB-CAN; |
• | CAN-LAN – подключение контроллеров к серверу по сети Ethernet. |
Схемы подключения контроллеров RusGuard :
В режиме CAN-LAN контроллеры могут объединятся в сеть двумя способами:
• | каждый контроллер подключается непосредственно к сети Ethernet; |
• | группа контроллеров объединяется по шине CAN; последний\первый подключается к сети Ethernet. |
Варианты объединения контроллеров RusGuard в сеть:
Соответственно, предусмотрено два режима поиска для каждого типа подключений.
Также, для CAN-LAN устройств, помимо широковещательного поиска, предусмотрена функция поиска по IP-адресу, она позволяет находить устройства, находящиеся за пределами локальной сети (разделенные шлюзами, и т.д.).
Поиск устройств, подключенных по USB
Для того чтобы выполнить поиск CAN-USB устройства:
2. | Нажмите на кнопку ![]() в верхней панели управления. |
Откроется окно Поиск устройств (при первом запуске окно пустое) (см. рис. 16).
Примечание : При повторном запуске поиска система предложит сначала очистить окно.
Рисунок 16 - АРМ RusGuard. Модуль Конфигурация оборудования. Окно поиска
3. | Оставаясь в текущей вкладке USB устойства , нажмите на кнопку ![]() в панели управления. |
Загрузится список серверов оборудования.
4. | Выберите тот сервер, на котором требуется выполнить поиск. Нажмите на кнопку ![]() . |
Примечание : Поиск может быть выполнен с любого сервера, находящегося в системе, обслуживаемой ПО RusGuard.
Система выполнит поиск и отобразит его результаты (см. рис. 17).
Рисунок 17 - АРМ RusGuard. Модуль Конфигурация оборудования. Результаты широковещательного поиска
Данные о найденных устройства загрузятся в основное окно поиска. Сначала в верхней части окна (список USB-конвертеры ) отобразится список найденных USB-конвертеров и краткая информация о них, включая статус подключения.
6. | Щелкните мышью по нужному устройству, чтобы загрузить ниже список подключенных к нему контроллеров. |
В списке Подключенные устройства загрузится список контроллеров и краткая информация о каждом из них, включая текущий статус подключения.
Ниже, в области Дополнительно , отображаются статусы операций поиска. При отсутствии в системе ошибок выводятся общая информация. При обнаружении конфликтов в системе в окне отображается информация об ошибках.
Внимание : Если в процессе поиска обнаружены ошибки, дальнейшее добавление устройств в систему невозможно.
• | совпадают CAN адреса у устройств на шине. Необходимо изменить CAN-адрес одного из них. |
• | попытка добавления устройства с SID, который уже есть в БД с другим адресом CAN. Для устранения ошибки необходимо изменить CAN-адрес в соответствии с адресом в БД, выйти из окна поиска, удалить устройство из БД и выполнить операцию повторно. |
Широковещательный поиск (LAN-устройства)
Для того чтобы найти CAN-LAN устройства (широковещательный поиск):
2. | Нажмите на кнопку ![]() в верхней панели управления. |
Откроется окно Поиск устройств
4. | Нажмите на кнопку ![]() . |
Система выполнит поиск, сообщая о процессе в отдельном окне. Затем загрузится список найденных конвертеров. При щелчке мыши в строке с информацией об определенном конвертере ниже загружается список подключенных через него контроллеров (см. рис. 18).
Обратите внимание, что при поиске LAN устройств в списке результатов также указывается способ выполнения поиска.
Рисунок 18 - АРМ RusGuard. Модуль Конфигурация оборудования. Результат широковещательного поиска CAN-LAN устройств
Используя список контроллеров, пользователь может редактировать CAN-адреса контроллеров.
Для того чтобы найти устройство по IP-адресу:
2. | Нажмите на кнопку ![]() в верхней панели управления. |
Откроется окно Поиск устройств
Откроется окно для ввода IP-адреса (см. рис. 19).
Рисунок 19 - АРМ RusGuard. Модуль Конфигурация оборудования. Окно ввода IP-адреса для поиска
5. | Введите IP-адрес и нажмите на кнопку ![]() . |
Отобразится окно для выбора сервера.
6. | Выберите нужный сервер и нажмите на кнопку ![]() . |
Система приступит к поиску. В случае успешного результата, данные об устройстве будут выведены в окне результатов.
CAN-адреса присваиваются устройствам в интервале от 1 до 255. В редких случаях адреса устройств, установленные по умолчанию, совпадают. В таком случае необходимо изменить CAN-адрес одного из них.
Для того чтобы отредактировать CAN-адрес:
1. | Выполните поиск USB или LAN устройства. В списке результатов выделите нужный контроллер в списке Подключенные устройства окна Поиск устройств . |
2. | Щелкните по строке с данными о контроллере дважды правой кнопкой мыши, либо нажмите на кнопку ![]() в верхней панели экрана. |
Откроется окно, со списком доступных номеров CAN (от 1 до 255, минус уже занятые адреса) (см. рис. 20).
Рисунок 20 - АРМ RusGuard. Модуль Конфигурация оборудования. Редактирование CAN-адреса
Шина CAN (Controller Area Network) стала стандартом в автомобилестроении: все новые автомобили обязаны поддерживать CAN (с 2001 в Европе и с 2008 в США). Кроме автомобилей, CAN применяется и в широком ряде других устройств. Производители диагностического оборудования для CAN рекламируют его применение, кроме разнообразной автомобильной техники, в мотоциклах, автопогрузчиках, судах, шахтных поездах, батискафах, беспилотных самолетах и пр. Давайте разберемся, что из себя представляет CAN.
В автомобилях используется несколько CAN; например, в Ford Focus таких шин четыре — три высокоскоростных (500 kbps) для управления мотором, тормозами, приборной панелью и т.п., и одна низкоскоростная (125 kbps) для управления дверьми, фарами, подушками безопасности, аудиосистемой, кондиционером и всем прочим. Подключившись к CAN, можно имитировать сигналы от любых устройств в автомобиле — например, управлять кондиционером с приложения на телефоне или накручивать одометр без движения автомобиля. Подключив к шине Arduino и реле, можно управлять с приборной панели дополнительной парковочной камерой. Даже стартапы, работающие над беспилотными автомобилями, такие как Voyage, начинают создание прототипа с того, что в обычном серийном автомобиле подключаются к CAN и учатся имитировать сигналы от педалей и руля.
Для подключения к CAN в автомобиле обычно возле руля имеется разъем OBD-II (On-Board Diagnostics).
Адаптеры OBD2-USB для подключения компьютера к CAN стоят от $5, и позволяют отслеживать весь трафик внутри автомобиля. Иногда разъем OBD-II защищен «аппаратным фаерволом», позволяющим принимать пакеты от устройств, подключенных к CAN, но не позволяющим передавать пакеты обратно на шину. В этом случае достаточно вывинтить разъем, и подключиться к проводам CAN вместо него.
Каждый пакет, передаваемый по шине CAN, состоит из ID передающего устройства (11 либо 29 бит), и до 8 байт передаваемых данных. Трафик, проходящий по шине при включении зажигания, может выглядеть как-то так:
Для анализа трафика CAN существует большое число инструментов — как коммерческих, так и OpenSource. Пакет can-utils для Linux включает утилиту cansniffer , которая отображает для каждого CAN ID только последний отправленный пакет, и тем самым позволяет отслеживать изменения показаний каждого датчика на шине:
Для реверс-инжиниринга трафика CAN сингапурские исследователи, из доклада которых я взял этот трейс, записали на видео приборную доску подопытного автомобиля, и затем соотнесли изменения на приборной доске с одновременными изменениями в трафике. Определив таким образом CAN ID датчика скорости и формат передаваемых им данных, они научились «подделывать» его пакеты, передавая на спидометр и на тахометр показания, не соответствующие действительности.
Надо понимать, что параллельно с передачей «поддельных» пакетов по шине продолжают передаваться и настоящие сигналы от датчика скорости. Чтобы тахометр показывал сфабрикованные показания, надо отслеживать передачу по шине настоящих показаний, и каким-либо образом их подавлять — например, сразу после обнаружения передачи CAN ID датчика скорости физически «глушить» шину, закорачивая линии данных. Более простой, чисто программный метод подавления настоящих показаний — сразу же после их передачи, пока тахометр еще не успел отреагировать, передавать «поддельные» пакеты. Например, следующий простой шелл-скрипт отслеживает передачу с CAN и сразу же после нее передает сфабрикованный пакет при помощи утилиты cansend из состава все тех же can-utils:
Даже хотя все устройства в автомобиле подключены к CAN, далеко не все их функции управляются через CAN. Например, на CAN в Ford Escape передаются сигналы о степени нажатия педалей газа и тормоза — но используются эти сигналы только блоком ABS, тогда как приводы дроссельной заслонки и тормозов соединены с педалями напрямую, минуя CAN.
C точки зрения безопасности ни о какой уязвимости в докладе сингапурцев речи не идет, потому что для передачи «поддельных» CAN-пакетов нужен физический доступ к шине. Кроме того, пакеты могут быть защищены контрольной суммой — например, в автомобилях Toyota последний байт каждого пакета должен равняться сумме всех предыдущих (по модулю 256). Кроме этого, в Toyota для защиты от нежелательных пакетов используется фильтрация получателем — например, игнорируются повороты руля более чем на 5% от текущего значения.
Тем не менее исследователям безопасности удавалось получить к CAN и удаленный доступ: вначале на небольшом расстоянии — через уязвимости в Bluetooth-модуле, подключенном к той же самой шине; а затем через сотовую сеть Sprint, через которую внедорожники нескольких американских производителей получали данные о пробках на дорогах. Исследователи, продемонстрировавшие перехват управления Jeep Cherokee с расстояния в несколько миль, получили от Управления перспективных исследовательских проектов Министерства обороны США (DARPA) вознаграждение в 80 тысяч долларов. С тех пор многие автопроизводители объявили о собственных bounty-программах, обещающих выплаты от $1500 за каждую обнаруженную уязвимость. Таким образом, реверс-инжиниринг трафика на шине CAN может не только добавить вашему автомобилю новые возможности, но и существенно пополнить ваш кошелек.
Протокол UDS
Unified Diagnostic Services (UDS) - это диагностический протокол, используемый в электронных блоках управления (ЭБУ) автомобильной электроники. Протокол описан в стандарте ISO 14229-1 и является производным от стандарта ISO 14230-3 (KWP2000) и ныне устаревшего стандарта ISO 15765-3 (Diagnostic Communication over Controller Area Network (DoCAN)). Более подробно в википедии.
Диагностические данные от двигателя по протоколу UDS (Skoda Octavia A7)
Разбор UDS пакета в формате Single Frame
Пример запроса и ответа температуры моторного масла:
Запрос температуры моторного масла:
7E0 - Адрес назначения (ЭБУ двигателя)
Байт 0 (0x03) - Размер данных (3 байта)
Байт 1 (0x22) - SID идентификатор сервиса (запрос текущих параметров)
Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
Байт 4, 5, 6, 7 (0x55) - Заполнитель до 8 байт
Ответ температуры моторного масла:
7E8 - Адрес источника (Диагностический прибор)
Байт 0 (0x05) - Размер данных (5 байт)
Байт 1 (0x62) - Положительный ответ, такой SID существует. 0x22 + 0x40 = 0x62. (0x7F) - отрицательный ответ
Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
Байт 4, 5 (0x0B 0x74) - значение температуры моторного масла (20.1 °C формулу пока что не смог подобрать)
Байт 6, 7 (0x55) - Заполнитель до 8 байт
Первая версия мобильного приложения VAG Virtual Cockpit умела подключаться только к приборной панели по UDS.
VAG Virtual Cockpit - экран с данными от приборной панели по протоколу UDS
Физическая связь
В первую очередь попытаемся разобраться как наш микроконтроллер связывается с CAN-шиной.
Трансивер в виде отдельной микросхемы является необходимостью. Объясняется это, прежде всего, высокими требованиями к его надежности и рабочим характеристикам, поскольку работает он с цепями, физически выходящими за пределы устройства (в данном случае это сама шина CAN). А условия, в которых находятся эти цепи, зачастую не определены: например, сильные магнитные поля или пролегающие рядом силовые высоковольтные цепи. Более того, при необходимости гальванической развязки ее удобнее всего осуществлять именно между трансивером и контроллером CAN-сети.
Данный материал посвящен больше программной части, поэтому более подробно о "железной" составляющей проекта, о видах трансиверах и вариантах их использования, я опишу в отдельной статье.
Мобильное приложение VAG Virtual Cockpit
Для разработки мобильного приложения подключаемого к автомобилю требовалось:
Сниффером собрать трафик от диагностической утилиты VCDS
Изучить работу протоколов UDS, VW TP 2.0, KWP2000
Настроить диагностический сканер ELM327 на работу с UDS и VW TP 2.0
Изучить новый для меня язык программирования Swift
В итоге получилось приложение, которое сочетает в себе функции отображения точных данных панели приборов и диагностика основных параметров двигателя и трансмиссии.
Пару слов про точность данных. Штатная панель приборов не точно показывает скорость - завышает показания на 5-10 км/ч, стрелка охлаждающей жидкости всегда на 90 °C, хотя реальная температура может быть 80 - 110 °C, стрелка уровня топлива до середины идет медленно, хотя топлива уже меньше половины и при нуле на самом деле топливо еще есть в баке. Производитель это делает для удобства и безопасности водителя.
На данный момент приложение показывает следующие параметры:
Приборная панель
Двигатель
Трансмиссия (температура)
1) Какая дверь открыта
2) Скорость
3) Обороты
4) Температура масла
5) Температура ОЖ
6) Топливо в баке в л.
7) Запас хода в км.
8) Средний расход
9) Время в машине
10) Пробег
11) Температура за бортом
1) Обороты
2) Массовый расход воздуха
3) Температура забора воздуха
4) Температура выхлопа (рассчитанная)
5) Критический уровень масла
6) Уровень масла
7) Наддув турбины (реальный)
8) Наддув турбины (ожидаемый)
9) Пропуски зажигания в цилиндрах
10) Углы откатов зажигания в цилиндрах
1) ATF AISIN (G93)
2) DSG6 (G93)
3) Блок управления DSG6 (G510)
4) Масло диска сцепления DSG6 (G509)
5) Мехатроник DSG7 (G510)
6) Процессор DSG7
7) Диск сцепления DSG7
Я стремлюсь чтобы приложение поддерживало как можно больше моделей автомобилей. Пока что поддерживаются производители: Volkswagen, Skoda, Seat, Audi. На разных комплектациях могут отображаться не все параметры, но это поправимо.
Сейчас я провожу тестирование версии 3.0. Приложение доступно только на iOS, после релиза 3.0 перейду к разработке версии для Android.
VW Transport Protocol 2.0
Volkswagen Transport Protocol 2.0 используется в качестве транспортного уровня, а данные передаются в формате KWP2000. Keyword Protocol 2000 - это протокол для бортовой диагностики автомобиля стандартизированный как ISO 14230. Прикладной уровень описан в стандарте ISO 14230-3. Более подробно в википедии.
Диагностические данные от двигателя по протоколу KWP2000 (Skoda Octavia A5)
Разбор протокола VW TP 2.0 на примере подключения к первой группе двигателя:
200 01 C0 00 10 00 03 01
Настраиваем канал с двигателем. Байт 0: 0x01 - двигатель, 0x02 - трансмиссия. Байт 5,4: 0x300 - адрес источника
201 00 D0 00 03 40 07 01
Получили положительный ответ. Байт 5,4: 0x740 - к двигателю обращаемся по этому адресу
740 A0 0F 8A FF 32 FF
Настраиваем ЭБУ на отправку сразу 16 пакетов и выставляем временные параметры
300 A1 0F 8A FF 4A FF
Получили положительный ответ
740 10 00 02 10 89
Отправляем команду KWP2000 startDiagnosticSession. Байт 0: 0x10 = 0b0001 - последняя строка данных + 0x0 счетчик отправляемых пакетов 0 (0x0 - 0xF)
Получили первый ACK
300 10 00 02 50 89
Получили положительный ответ. Байт 0: 0x10 - cчетчик принимаемых пакетов 0
Мы отправили первый ACK, что получили ответ
740 11 00 02 21 01
Делаем запрос. Байт 0: 0x11 - счетчик отправляемых пакетов 1. Байт 3: 0x21 - запрос параметров. Байт 4: 0x01 - из группы 1
Получили второй ACK
300 22 00 1A 61 01 01 C8 13
Байт 0: 0x22 - 0b0010 (не последняя строка данных) + 0x02 (cчетчик принимаемых пакетов 2). Байт 1,2: 0x00 0x1A длина 26 байт. Байт 3,4: 0x61 0x01 - положительный ответ на команду запроса параметров 0x21+0x40=0x61 из 0x1 группы. Байт 5: 0х01 - Запрос RPM (соответсвует протоколу KW1281). Байт 6,7: (0xC8 * 0x13)/5 = 760 RPM (формула соответствует протоколу KW1281)
300 23 05 0A 99 14 32 86 10
Байт 1: 0x05 - запрос ОЖ. Байт 2,3: (0x0A * 0x99)/26 = 57.0 C. Байт 4: 0x14 = запрос лямбда контроль %. Байт 5,6: 0x32*0x86; Байт 7: 0х10 - двоичная настройка
300 24 FF BE 25 00 00 25 00
0x25 0x00 x00 - Заполнитель, до 8 параметров
300 15 00 25 00 00 25 00 00
Байт 0: 0x15 - 0b0001 (последняя строка данных) + 0x5 (счетчик принимаемых пакетов 5)
Отправляем ACK. Прибывляем к нашему предыдущему ACK количество полученных пакетов 0xB1 + 0x4 = 0xB5
Запрос KeepAlive, что мы еще на связи
740 A1 0F 8A FF 4A FF
Мы разрываем связь
ЭБУ в ответ тоже разрывает связь
Во второй версии мобильного приложения VAG Virtual Cockpit появилась возможность диагностировать двигатель и трансмиссию по протоколу VW TP 2.0.
VAG Virtual Cockpit - экран с данными от двигателя по протоколу VW TP 2.0
Программная часть
Поняв как это все работает физически, приступим к рассмотрению программной части.
Программную часть можно разделить на несколько частей:
Вдобавок нужно также предусмотреть обработку ошибок CAN, но сделаем это в отдельной статье, так как для первого запуска и понимания работы с шиной этого будет достаточно.
Разберем теперь каждый этап подробнее.
Настройка порта
Приведу пример настройки портов и инициализации CAN шины в микроконтроллере STM32F103
Следует обратить внимание на то, что если в Вашем микроконтроллере несколько CAN устройств, то настройка переадресации, как и настройка CAN в целом, может немного отличаться.
Далее в процедуре инициализации мы включаем тактирование альтернативных функций, CAN-шины и порта, на котором будет "висеть" наша шина, иначе у нас ничего не заработает, так как контроллер не будет знать, что эту периферию нужно активировать.
Затем настраиваем ножки контроллера:
Для CAN RX настраиваем режим работы как GPIO_Mode_IPU - вход с подтяжкой к питанию,
а для CAN TX настраиваем режим работы как GPIO_Mode_AF_PP - выход с двумя состояниями (Push-Pull) для альтернативных функций.
Если у нас включена переадресация, то компилятор добавит в код еще и команду ремапинга портов шины.
В принципе это вся настройка пинов, теперь нам осталось сделать инициализацию самого устройства.
Инициализация CAN
Определяем структуру описания CAN, затем "отключаем" его для настройки.
Нам необходимо задать несколько параметров протокола, а также режим работы и тайминги.
Здесь мы немного подробнее рассмотрим настройки инициализации.
Начнем с параметров работы CAN:
Для первого запуска и тестирования устройства нам будет достаточно включить режим "CAN_NART". При подключении осциллографа к шине, если устройство нормально функционирует, мы увидим всплески активности в зависимости от того, как часто передаем данные по шине.
Если же "CAN_NART" выключен, то при включенном параметре "CAN_ABOM" будет предпринято всего 128 попыток передать пакет, а потом микроконтроллер отключит модуль Can (если Вы не будете обрабатывать ошибки и сбрасывать счетчики ошибок). При выключенном "CAN_ABOM" автоматического отключения модуля Can не произойдет.
Если же устройство не будет получать подтверждение о получении пакетов, то осциллограф нарисует "расческу", так как устройство будет бесконечно пытаться передать пакеты, пока не получит подтверждения.
Следующий параметр CAN_Mode определяет в каком режиме контроллер будет работать с CAN-шиной:
Повторюсь, если Вы только начинаете работать с CAN и у Вас нет готового устройства с трансивером, Вы можете научится работать с шиной на любой отладочной плате с микроконтроллером STM32, который поддерживает CAN. Для этого достаточно выбрать при настройке режим работы CAN_Mode_Silent_LoopBack или CAN_Mode_LoopBack. В этих режимах Вы сможете отправлять пакеты данных и принимать их же на одном устройстве.
Настройка таймингов
Синхронизация и тайминги в CAN — отдельный, важный и сложный вопрос. Однако, благодаря сложности и продуманности становится не так важна возможная рассинхронизация и нестабильность тактовых частот узлов сети, и связь становится возможной даже в тяжёлых условиях.
Всё время делится на кванты длиной t_q, и номинальная длительность бита равна 1+BS1+BS2 квантов. Захват значения бита происходит на границе BS1 и BS2. В процессе приёма приёмник определяет, в какой из временных периодов произошёл перепад сигнала (т.е. начало приёма нового бита). В норме перепад должен произойти на границе SYNC и BS1, если он произошёл раньше — контроллер уменьшает BS1, если позже — увеличивает BS2 на величину SJW (от 1 до 4 квантов времени). Таким образом, происходит постоянная пересинхронизация с частотой других приёмников.
В нашем примере мы настраиваем тайминги с учетом того, что перефирия настроена на частоту 8MHz. С помощью калькулятора таймингов, выбираем оптимальные под нашу шину и микроконтроллер.
Скорость шины настраивается с помощью прескалера. При указанных параметрах тайминга и CAN_Prescaler равным 50 - скорости передачи по шине составит 10 Кбит.
Для изменения скорости передачи, в нашем примере достаточно изменить CAN_Prescaler, например при значении равном "1", скорость передачи составит 500 Кбит, при "2" - 250 Кбит, ну и так далее. В примере кода, предоставленном во вложении к данной статье, расписаны все значения CAN_Prescaler, доступные для данного проекта. В принципе можно добится скорости вплоть до 1 Мбита.
За настройку таймингов при инициализации CAN устройства отвечают четыре параметра:
Параметр | Расшифровка | Пояснение |
---|---|---|
CAN_SJW | Размер SJW | SJW (reSynchronization Jump Width) определяет максимальное количество квантов времени, на которое может быть увеличено или уменьшено количество квантов времени битовых сегментов. Возможные значения этого показателя от 1-го до 4-х квантов. |
CAN_BS1 | Длина сегмента фазы 1 | BS1 (Bit Segment 1) - определяет местоположение точки захвата (Sample Point). Он включает в себя Prop_Seg и PHASE_SEG1 стандарта CAN. Его продолжительность программируется от 1 до 16 квантов времени. |
CAN_BS2 | Длина сегмента фазы 2 | BS2 (Bit Segment 2) - определяет местоположение точки передачи. Он представляет собой PHASE_SEG2 стандарта CAN. Его продолжительность программируется от 1 до 8 квантов времени. |
CAN_Prescaler | Множитель | Множитель, из значения которого рассчитывается размер кванта времени. Рассчитывается исходя от частоты работы периферии микроконтроллера. Важно не путать с частотой работы самого контроллера! |
Для тестирования достаточно будет использовать параметры настройки таймингов, предложеные в примере. Более подробно о том что такое тайминги, а также как их правильно выставить описано в отдельной статье (STM32. Настройка таймингов работы CAN).
Настройка фильтрации пакетов CAN
В рамках данной публикации я не буду подробно описывать настройку работы с фильтрами, это материал для отдельной статьи (см. Почтовые ящики. Фильтры пакетов CAN). Скажу лишь, что для начала достаточно установить фильтры без ограничений, а впоследствии можно самостоятельно их настроить под свои требования.
С прерываниями дела обстоят ни чуть не сложнее, чем со структурой инициализации. Для начала надо настроить и проинициализировать контроллер прерываний (NVIC — Nested vectored interrupt controller). В архитектуре STM32 каждому прерыванию можно выставить свой приоритет для случаев, когда возникает несколько прерываний одновременно. Поэтому NVIC представляет нам несколько вариантов формирования приоритетных групп. Я не буду вдаваться в подробности, в нашем случае это не актуально, так как у нас на данный момент настроено лишь одно прерывание на обработку пакетов CAN/
Следует обратить внимание, что прерывание для CAN шины и USB одно и тоже. Если Вы будете использовать оба устройства в своей разработке, то необходимо более тщательно подойти к обработке прерываний от них. Могут возникнуть проблемы вплоть до полного отказа одного из устройств.
В параметре "NVIC_IRQChannel" мы указываем, какое именно прерывание мы инициализируем. Константа "USB_LP_CAN1_RX0_IRQn" обозначает канал, отвечающий за прерывания, связанные с CAN1. Найдя ее определение в файле stm32f10x.h, вы увидите еще множество констант (ADC1_IRQn, TIM1_TRG_COM_TIM17_IRQn и др.), обозначающих прерывания от других периферийных устройств.
Следующими двумя строками мы указываем приоритет прерываний (максимальные значения этих двух параметров определяются выбранной приоритетной группой). Затем указываем, что прерывание активно.
Последняя строка, собственно, включает использование прерывания.
На этом настройку CAN можно считать законченной. Мы учли все основные моменты, которые могут возникнут на начальном этапе изучения возможностей CAN шины. В зависимости от моделей контроллеров код может несколько меняться, но общие принципы работы остаются и легко портируются на разные семейства микроконтроллеров.
Получение данных из шины
Для получения данных из шины CAN используется прерывание.
Затем проверим формат кадра: Если стандартный, то проверяем параметр "StdID", но а если расширенный, то данные команды будут в параметре "ExtId".
Отправка данных в шину
Для отправки тестового пакета в шину напишем отдельную функцию, которая будет вызываться из основного цикла программы несколько раз в секунду.
Здесь все просто: объявляем переменную TxMessage, заполняем данные для отправки и выполняем команду передачи данных в шину.
Хочется еще раз обратить внимание на параметр формата кадра "IDE". Если мы выбираем "CAN_Id_Standard", то заполнять должны параметр"StdId", а "ExtId" - должен быть равен нулю. Соответственно если выбираем "CAN_Id_Extended" , то обнуляем "StdId", а заполняем "ExtId" .
Стандартный формат кадра имеет длину в 44 бита, а формат расширенного кадра - 64 бита. Но полезная нагрузка одного пакета выше у расширенного, так как на 64 бита он имеет 29 бит полезной информации, а в стандартном на 44 бита всего 11 бит полезной нагрузки.
Заключение
В этой статье я постарался подробно описать как настроить CAN на микроконтроллере STM32F103. Чтобы не очень перегружать информацией, часть материала с более подробным материалом оформил в отдельных статьях.
Во вложениях к статье приведен полный код программы, рассматриваемый в статье. Код протестирован в режимах Silent_LoopBack и Normal - полностью рабочий.
Если у Вас есть какие либо замечания по статье или предложения - прошу в коменты.
Мобильное приложение VAG Virtual Cockpit
Я продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках.
По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.
Программный сниффер VCDS
Программный сниффер VCDS: CAN-Sniffer
Чтобы узнать по какому протоколу общаются электронные блоки я использовал специальную версию VCDS с программным сниффером в комплекте. В этот раз никаких железных снифферов на Arduino или RPi не пришлось изобретать. С помощью CAN-Sniffer можно подсмотреть общение между VCDS и автомобилем, чтобы затем телефон мог прикинуться диагностической утилитой и отправлять те же самые запросы.
Я собрал некоторую статистику по использованию диагностических протоколов на разных моделях автомобилей:
VW/Skoda/Seat (2006-2012) - приборная панель UDS. Двигатель и трансмиссия VW TP 2.0
Audi (2006-2012) - приборная панель VW TP 2.0. Двигатель UDS. Трансмиссия VW TP 2.0
VW/Skoda/Seat/Audi (2012-2021) - везде UDS
Диагностический адаптер ELM327
Для меня некоторое время было вопросом, как получить данные из CAN шины и передать на телефон. Можно было бы разработать собственный шлюз с Wi-Fi или Bluetooth, как это делают производители сигнализаций, например Starline. Но изучив документацию на популярный автомобильный сканер ELM327 понял, что его можно настроить с помощью AT команд на доступ к CAN шине.
Копия диагностического сканера ELM327 Не все ELM327 одинаково полезны
Оригинальный ELM327 от компании elmelectronics стоит порядка 50$, в России я таких не встречал в продаже. У нас продаются только китайские копии/подделки, разного качества и цены 10-30$. Бывают полноценные копии, которые поддерживают все протоколы, а бывают и те которые умеют отвечать только на несколько команд, остальные игнорируют, такие адаптеры не имеют доступ к CAN шине. Я например пользуюсь копией Viecar BLE 4.0, который поддерживает 100% всех функций оригинала.
Последовательность ELM327 AT команд для работы с UDS по CAN шине:
Для работы с протоколом KWP2000 через ELM327 нужно только указать адреса назначения и источника.
Последовательность ELM327 AT команд для работы с VW TP 2.0 по CAN шине:
STM32. Реализация протокола CAN на базе МК STM32F103
По реализации работы CAN протокола на МК STM32 публикаций в интернете достаточно много. Но довольно тяжело настроить готовый код под свое устройство, особенно если пытаемся это сделать впервые.
В рамках данной статьи я постараюсь максимально подробно разобрать программный код и подробно описать "подводные камни", с которыми может впервые столкнуться новичок.
Поиск ошибок
В режиме Silent_LoopBack работоспособность легко проверить с помощью отладчика, установив брикпоинты на функции отправки данных и в процедуре обработки прерывания на получение пакета.
В обычном режиме - желательно иметь под рукой осциллограф, так как достаточно сложно без него определить откуда вылезла ошибка - железо или код. Также стоит обратить внимание на устройство, на котором выполняется тестирование: Если это STM Discovery, то есть вероятность того, что на пинах CAN висит дополнительная обвязка отладочной платы, которая может искажать обмен данных с трансивером. Лучше всего использовать отладочные платы с минимальным "обвесом".
Так же стоит обратить внимание и на тайминги. Например при подключении парсера к автомобильной сети, нужно настроить тайминги в соответствии с тем, как они настроены в автомобиле, иначе пакеты из CAN шины автомобиля Ваше устройство просто не будет получать.
Для своих сетей Вы можете настраивать тайминги на свой вкус и требования "скоростного режима", главное не отходить от стандарта и следить, чтобы на всех устройствах тайминги были одинаковыми.
Читайте также: