Lawicel CANUSB

CANUSB. Адаптер CAN на базе SJA1000

В предыдущей заметке я уже упоминал этот адаптер от Lawicel. В этой заметке я расскажу про него подробнее, а также рассмотрю возможности программы CAN Monitor Pro 2, которая, в моем случае, обеспечивает взаимодействие с этим адаптером.

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

Внешний вид CANUSB от Lawicel
Внешний вид CANUSB от Lawicel

Адаптер поставляется в пластиковом корпусе с разъемом DB9M, двумя светодиодами, отвечающими за индикацию режимов работы, и USB кабелем, интегрированным в корпус прибора. Длина кабеля 1 метр. Более подробная спецификация доступна на официальном сайте. Внутри корпуса размещена плата с контроллером SJA1000 от NXP, микроконтроллером от Atmel серии Mega и драйвером USB от FTDI FT245RL.

Наличие простого разъема типа DB считаю плюсом, т.к. в таком варианте обеспечивается гибкость возможных подключений: хотите распаиваете OBD и подключаетесь в стандартный автомобильный диагностический порт, а хотите распаиваете два (или три) провода и подключаетесь в любом удобном месте.

Распиновка разъема есть на сайте производителя, но позволю себе продублировать ее у себя.

Распиновка адаптера CANUSB
Распиновка адаптера CANUSB

Подключение внешних источников питания не требуется. Для связи с шиной используется только два пина: 7 — CAN_H и 2 — CAN_L. Кроме этого, в большинстве случаев, не лишним будет подключение и третьего пина CAN_GND, т.к. в адаптере нет опторазвязки. Что касается терминирующего резистора в 120 Ом, то необходимость его установки зависит от того, где будет находится точка подключения адаптера к CAN шине.

С точки зрения программного уровня, есть несколько вариантов взаимодействия с адаптером. Первый, самый простой, режим предполагает использование адаптера в режиме ASCII. В этом случае, все «общение» происходит с помощью команд, отправляемых в виртуальный COM порт. Очевидно, что с помощью такого способа можно работать из любого консольного приложения, например, putty или mxterm. Во втором режиме использование специальной программы становится обязательным, т.к. взаимодействие будет осуществляться через драйвер canusb.dll. Программа CAN Monitor Pro 2 может работать в любом режиме, но я использую вариант работы через драйвер.

Адаптер поддерживает 11 и 29 битные идентификаторы и аппаратную фильтрацию (правда, установить можно только два фильтра, но это лучше чем ничего).

В программе CAN Monitor Pro 2 ничего лишнего: простой и интуитивно понятный интерфейс. Все результаты, при желании, можно сохранить в проект и тогда данные будут доступны в любое время.

Внешний программы CAN Monitor Pro
Внешний программы CAN Monitor Pro

В качестве небольшого рабочего примера, предлагаю попробовать найти посылку, отвечающую за показания датчика уровня освещенности панели приборов. В качестве «генератора» посылок — старый, добрый VCDS. В качестве подопытной — панель приборов 5N0920873F.

VCDS - информация о панели приборов
VCDS — информация о панели приборов

После подключения и запуска CAN Monitor Pro 2 пользователь оказывается на вкладке Monitor, где фиксируются все идентификаторы, которые перехватила программа, а также количество сообщений и период их повторения. Интенсивность обмена в моем случае довольно низкая, т.к. из блоков в этот момент были подключены только гейт и приборка. Следует учитывать, что в этой вкладке всегда отображается последнее принятое сообщение, вне зависимости от того, как давно это сообщение было получено.

Лог обмена по CAN шине
Лог обмена по CAN шине

Очищаем лог, запускаем запрос выбранного параметра в VCDS и практически сразу становится понятно, какое сообщение позволяет получить искомые значения от фототранзистора…

Выборка запросов по CAN
Выборка запросов по CAN

Набираем сообщение (для тех кто не понял, подсказываю, что это сообщение с ID 714), закрываем VCDS и отправляем его уже вручную из программы с помощью кнопки Send. Ответ с ID 77E не заставляет себя долго ждать. Бинго! Меняем освещение и делаем серию запросов. Вот значение при нормальном освещении:

Формирование запроса в CAN Monitor Pro
Формирование запроса в CAN Monitor Pro

А вот результаты того же запроса, но уже при дополнительном освещении:

Изменение значения в CAN Monitor
Изменение значения в CAN Monitor

Как видно на последнем скриншоте, уровень освещения стал больше, что, в общем-то, логично.

При желании, можно попробовать изменить запрос, изменив само сообщение, но в результате, мы увидим знакомую комбинацию цифр, которая говорит о том, что данная команда не поддерживается. Уверен, многие из тех, кто работал с VCDS видели подобное сочетание =)

Ошибочный запрос
Ошибочный запрос

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

Трассировка обмена по CAN
Трассировка обмена по CAN

Конечно, каждый раз вводить сообщение и жать кнопку Send неудобно, особенно в тех случаях, когда команда вам хорошо известна. Для того чтобы автоматизировать процесс отправки известных Вам сообщений есть вкладка Predefined Messages/Triggers.

Автоматизация обмена
Автоматизация обмена

Как видно на скриншоте процесс добавления таких предопределенных сообщений максимально прост: вводим сообщение и указываем тип триггера. В рассмотренном примере сообщение будет отправляться автоматически с интервалом в 500 мс.

Но, иногда, сообщение нужно отправлять не с заданным интервалом, а в ответ на другое сообщение. В этом случае, достаточно поменять тип триггера на Message и указать ожидаемое сообщение или заполнить маску.

Настройка триггера типа Message
Настройка триггера типа Message

Есть и третий вариант триггера: горячая клавиша.

Настройка триггера типа "Горячая клавиша"
Настройка триггера типа «Горячая клавиша»

Как я уже говорил в начале записи, адаптер поддерживает аппаратную фильтрацию сообщений. Для работы с аппаратной фильтрацией предназначена одноименная вкладка Hardware. Если вы работаете с программой CAN Monitor Pro 2, то настройку фильтра для конкретных ID программа может произвести в автоматическом режиме. Однако, для тех кто собирается работать через терминал, придется разобраться с процедурой формирования соответствующих значений ACR и AMR. Наглядный пример доступен на сайте производителя адаптера как для 11-битных, так и для расширенных 29-битных идентификаторов.

Настройка аппаратной фильтрации
Настройка аппаратной фильтрации

Для любителей хардкора, есть возможность задать фильтры самостоятельно.

Ручная настройка фильтров
Ручная настройка фильтров

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

Настройка визуализации лога
Настройка визуализации лога

После настройки программных фильтров и включения цветовой раскраски, лог обмена становится максимально наглядным (обратите внимание на значение 0x4FD8 в ответном сообщении 77E, это то самое число k, равное 20440).

Лог обмена при опросе через VCDS
Лог обмена при опросе через VCDS

Программный фильтр «активен» не только на вкладке Trace, но и на вкладке монитор. Как можно заметить на скриншоте, после активации фильтра соответствующая раскраска и комментарии появились и в этом окне.

Фильтр в логе сообщений
Фильтр в логе сообщений

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

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

Однако, обзор был бы неполным, если бы мы не попробовали поработать с адпатером в терминальном режиме. Для этого нужно активировать режим Virtual Com Port (VCP) в настройках драйвера в диспетчере задач Windows.

Настройка CANUSИ для работы в терминальном режиме
Настройка CANUSИ для работы в терминальном режиме

После этого в системе появится COM порт, который можно открыть в любой терминальной программе. Я буду использовать putty. При открытии COM порта можно указать любую скорость, но важно включить режим echo. Запускаем putty, открываем порт и для проверки связи пробуем узнать версию прошивки, отправив команду V.

Консольное приглашение CANUSB
Консольное приглашение CANUSB

Как видим, в моем случае адаптер имеет версию 1011. Это значит, что канал связи с адаптером работает, можно пробовать идти дальше.

Устанавливаем скорость CAN на 500Кб/сек и открываем канал связи. Для этого последовательно отправляем команды: S6 и O. На каждую команду, в случае успеха, адаптер возвращает 0x13 — в терминале это выглядит как перевода строки.

В моем случае все команды были успешно выполнены, самое время отправить найденную нами команду запроса уровня освещенности с датчика в приборной панели. Тут все просто, набираем t71480322224D55555555 и видим знакомое сообщение с ответом…

Ввод команд в терминальном режиме
Ввод команд в терминальном режиме

Вот на этом, действительно все.

Если у Вас есть вопросы, можете задавать их на форуме или написать мне, через форму обратной связи.

В следующий раз, я напишу небольшой обзор про сверхпопулярный ELM327.

Не переключайтесь…