CANable AZSMZ-USB2CAN |
![]() |
Добавил(а) microsin |
Вчера получил посылку с AliExpress, где было 2 адаптера CANable (AZSMZ-USB2CAN) [1]. Оба адаптера построены на основе STM32F042C6T6, и отличаются только коннекторами USB. С адаптерами поставляется программа CANact [7], которая позволяет конфигурировать адаптер, подключаться к нему, просматривать трафик и передавать единичные пакеты. CANtact-app это открытое ПО, предназначенное главным образом для работы с адаптерами CANable AZSMZ-USB2CAN, однако оно может работать с любым устройством, поддерживающим протокол LAWICEL (см. [8, 9, 10]). [Перемычки] На адаптерах есть 2 перемычки - BOOT и TERM. Перемычка BOOT разрешает обновление ПО через USB по протоколу DFU [3]. Перемычка TERM включает терминирование физической линии CAN резистором 120 Ом. BOOT: если эта перемычка установлена ближе к коннектору CAN, то загрузчик DFU запрещен, и плата работает как обычно. Если же перемычка установлена в сторону микроконтроллера, то адаптер работает как устройство USB DFU, позволяя обновить свое программное обеспечение [3, 4]. TERM: если эта перемычка установлена ближе к коннектору CAN, то подключен терминирующий резистор 120 Ом. [Драйвер] Linux и Mac: для этих операционных систем драйвер не требуется. Адаптер CANable появится как устройство USB CDC: /dev/ttyACMX или /dev/ttyUSBX на Linux, или /dev/cu.usbmodemXXXX на Mac. Windows: может понадобиться накатить .inf-файл (его можно скачать в ZIP-архиве https://canable.io/utilities/windows-driver.zip, или по ссылке [15]). Драйвер устанавливается стандартным образом, двойным кликом на inf-файле, либо через менеджер устройств, Update Driver с выбором .inf-файла. На моей системе Windows 10 Pro x64 устройство определилось сразу, установка драйвера не потребовалась. Стоковая прошивка slcan (исходный код для неё см. по ссылке [16]) установит драйвер виртуального COM-порта (USB CDC). В менеджере устройств Windows появится новое устройство COMx. [cantact-app] Это GUI-утилита для Windows и Mac, написанная на Java [7]. Дает самый простой способ познакомиться с основными возможностями адаптера CANable AZSMZ-USB2CAN. Утилита cantact-app позволяет просматривать трафик шины CAN в реальном времени и отправлять пакеты CAN. Утилита подключается напрямую с виртуальному последовательному порту (USB CDC) устройства CANable (или CANtact), и не требует никаких других драйверов. Примечание: cantact-app запускается на Linux, но в настоящий момент не может сама обнаружить последовательные порты. [Cangaroo] На Windows можно использовать программу Cangaroo, если в адаптер CANable записана альтернативная прошивка candlelight [2] (см. далее). Программа позволяет принимать и передавать трафик CAN систем адресации standard и extended. Также поддерживается парсинг файла DBC, но эта функция все еще находится на стадии beta-тестирования. Cangaroo можно запустить на Linux, если Вы скомпилируете её самостоятельно. [SocketCAN] Эта программа работает в среде Linux через socketCAN-совместимый интерфейс, предоставляемый адаптером CANable через утилиту slcand. Это дает возможность использовать все стандартные Linux утилиты для CAN, такие как candump, cansniffer и даже wireshark. Скорость шины CAN задается параметром "-s": -s0 = 10k Просто запустите slcand с правильными аргументами для установки скорости шины CAN, и в системе должно появиться новое устройство CAN. После запуска slcand не забудьте активировать это устройство с помощью ifconfig! Теперь можно использовать стандартные утилиты Linux CAN для взаимодействия с шиной. Убедитесь, что выбрали правильный порт TTY, что можно проверить командой dmesg после подключения в разъем USB адаптера CANable. sudo slcand -o -c -s0 /dev/ttyACM0 can0 sudo ifconfig can0 up sudo ifconfig can0 txqueuelen 1000 cansend can0 999#DEADBEEF # отправка фрейма на ID 0x999 с полезной нагрузкой 0xdeadbeef candump can0 # показать весь трафик, принятый can0 canbusload can0 500000 # вычислить процент загрузки шины на can0 cansniffer can0 # показать трафик в стиле утилиты top cangen can0 -D 11223344DEADBEEF -L 8 # генерация сообщений CAN с фиксированными данными [Программирование на Python] Существует библиотека python-can [11], позволяющая довольно просто реализовать обмен по шине CAN на языке Python. Библиотека поддерживает прямое подключение к устройствам адаптеров CANable/CANtact через последовательное соединение под управлением Windows или Linux, и также может напрямую работать с устройствами socketcan на Linux, если в них установлена прошивка candlelight. Простой пример: import can # Прошивка Candlelight, работа в среде Linux:
#bus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)
# Стоковая прошивка slcan, работа в среде Linux: bus = can.interface.Bus(bustype='slcan', channel='/dev/ttyACM0', bitrate=500000) # Стоковая прошивка slcan, работа в среде Windows: bus = can.interface.Bus(bustype='slcan', channel='COM0', bitrate=500000) msg = can.Message(arbitration_id=0xc0ffee, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=True) try: bus.send(msg) print("Отправлено сообщение через {}".format(bus.channel_info)) except can.CanError: print("Сообщение НЕ отправлено") Примечание: ранее для использования вместе с CANable рекомендовалась библиотека CANard [12]. CANard все еще доступна, но в новых проектах её лучше не использовать. [Альтернативное firmware: candleLight] Это порт прошивки candleLight USB CAN для адаптера CANable. Порт хорошо работает в среде Linux с использованием драйвера gs_usb. Прошивка candleLight не использует последовательный протокол slcan, и поэтому не является взаимозаменяемой со стоковой прошивкой. Однако с прошивкой candleLight адаптер CANable в среде Linux появляется как родной интерфейс CAN, нормально работает в среде Windows с программой Cangaroo (см. далее), и поддерживает очень высокую загрузку шины CAN. Обновить прошивку CANable на candlelight можно с помощью сайта CANable Updater [4]. Также см. далее раздел "Обновление прошивки". Имейте в виду, что на ядрах Linux версии ≤ 4.9 в драйвере gs_usb есть баг. Сейчас в основной линейке ядер существует патч, однако если Вам нужно скомпилировать отдельный модуль, то можете использовать исправленную версию [13]. С прошивкой candlelight просто подключите адаптер CANable в порт USB, и устройство пройдет энумерацию как can0. Установите скорость, активируйте интерфейс следующей командой, и все будет готово к работе: ip link set can0 up type can bitrate 500000 Правила udev. Если в одной системе используются несколько адаптеров CANable с прошивкой candleLight, то возможно понадобится настройка правил udev для привязки к каждому фиксированному имени устройства (can0, can1, и т. д.) определенного серийного номера. Это предотвратит смену имени между перезагрузками и подключениями/отключениями устройства. Для настройки нового правила udev создайте файл наподобие следующего: /etc/udev/rules.d/99-candlelight.rules В этом файле будет содержаться Ваше правило привязки. Поместите в него серийный номер своего устройства (для этого просмотрите вывод команды dmesg после подключения адаптера, или используйте команду usb-devices), и используйте в этом файле нужное имя устройства. Никакие другие значения менять не нужно. Для каждого устройства, которое хотите сконфигурировать, добавьте в этот файл отдельную строку. Рекомендуется назначать имена начиная с can3 и далее, поскольку устройства без назначенных правил udev все еще будут проходить энумерацию как can0, can1, и т. д. SUBSYSTEM=="net", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="606f", ATTRS{serial}=="000C8005574D430A20333735", NAME="can5" SUBSYSTEM=="net", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="606f", ATTRS{serial}=="000D8005574D430A20333735", NAME="can6" SUBSYSTEM=="net", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="606f", ATTRS{serial}=="000E8005574D430A20333735", NAME="can7" Для активации правил перезагрузите систему, или выполните следующие команды, и отключите и снова подключите устройство к порту USB. sudo udevadm control --reload-rules && sudo systemctl restart systemd-udevd && sudo udevadm trigger Готовые сборки можно скачать по ссылке [14]. [Заводская версия firmware CANable] В адаптерах, которые я купил на AliExpress, была прошивка slcan (cantact-fw-master, https://github.com/normaldotcom/cantact-fw). В ней протокол LAWICEL реализован лишь частично. Можно даже сказать, что это своя, облегченная версия этого протокола. В ней не выдается символ перевода строки \r в ответ на посылку этого символа, не поддерживаются команды F, N, команда V выдает версию по-другому (без префикса V, и добавляется ссылка на github). Подробнее см. врезку ниже. # CANable Firmware Этот repo (https://github.com/normaldotcom/cantact-fw) содержит исходный код slcan CANable firmware, основанный на CANtact firwmare. Это firmware все еще должно компилироваться и работать на железе CANtact. ## Поддерживаемые команды `O` - Open channel (открыть канал CAN) Примечание: перед открытием канала должны быть отправлены конфигурации канала (S, M, A). Перед отправкой фреймов CAN канал должен быть открыт (команда O). Это firmware в настоящий момент не выдает обратную связь ACK/NACK для последовательных команд (приходящих через RS-232). ## Как компилировать Сборка firmware осуществляется с помощью GCC. В частности, нужен пакет gcc-arm-none-eabi, доступный для Windows, OS X и Linux на [Launchpad](https://launchpad.net/gcc-arm-embedded/+download). Загрузите этот тулчейн в свою систему и добавьте папку `bin` тулчейна в переменную PATH. Ваш дистрибутив Linux может также содержать предварительно скомпилированный пакет для `arm-none-eabi-gcc`, проверьте репозитории своего дистрибутива, чтобы узнать, есть ли в там готовая сборка тулчейна. - Если у Вас устройство CANable, то компилируйте проект командой `make`. ## Прошивка с помощью Bootloader-а Установите перемычку BOOT в соответствующее положение и подключите CANable в порт USB (на CANable Pro отпустите кнопку boot после подключения в порт USB). Затем выполните команду `make flash`, и CANable будет обновлен последним скомпилированным firmware. Отключите/подключите устройство после возврата перемычки BOOT в исходное рабочее положение, CANable запустится и начнет работать. ## Отладка Отладка вместе с прошивкой программы может быть осуществлена на плате разработчика STM32 Discovery (она может работать и как программатор, и как отладчик st-link). Также Вы можете использовать другие инструменты/утилиты, поддерживающие SWD. Для использования STM32 Discovery запустите [OpenOCD](http://openocd.sourceforge.net/) с использованием файла конфигурации stm32f0x.cfg: `openocd -f fw/stm32f0x.cfg`. При запущенной системе OpenOCD для загрузки кода и отладки может использоваться arm-none-eabi-gdb. ## Разработчики - [Ethan Zonca](https://github.com/normaldotcom) - новые функции, интеграция/обновление HAL updates, исправления Makefile, оптимизация размера кода, обновления для CANable ## Лицензия См. LICENSE.md [Пример работы с CANable (прошивка slcan/cantact-fw) на языке C#] Это утилита для передачи firmware загрузчику через соединение CAN на скорости 250 килобит/сек, пакетами со стандартными ID (11 бит). Утилита используется для перепрошивки систем, снабженным интерфейсом CAN и соответствующим bootloader-ом. Алгоритм работы самый простой - нажатии на кнопку "Передать прошивку" открывается файл прошивки, и он последовательно передается пакетами по 8 байт, без всякого управления потоком и ожидания подтверждения от загрузчика. Корректность передачи проверяется по её окончании на стороне загрузчика - он проверяет контрольную сумму кода. Утилита была создана на основе проекта http://svn.code.sf.net/p/canusb/code/trunk/, написанного на Visual Studio C# (см. папку ExampleProgram). Проект реализует стандартную, полную версию протокола LAWICEL [8], и поэтому не совместим с упрощенной версией прошивки CANable slcan/cantact-fw [16]. Для адаптации кода для работы с CANable были внесены следующие основные изменения: 1. Удалены классы, работающие с устройством виртуального последовательного порта USB CDC через драйвер/библиотеку FTDI. Все обращения к виртуальному COM-порту реализованы теперь через класс SerialPort от Microsoft. [Обновление прошивки] Переставьте перемычку BOOT в сторону микроконтроллера, и подключите адаптер CANable к компьютеру через USB. Web App. С помощью онлайн-приложения [4] можно легко перепрограммировать адаптер CANable. На момент написания этой статьи на сайте были доступны 3 варианта прошивки: slcan (1205aa6 4/10/19), candlelight (a8a0757), slcan (1b8f8b8 4/14/20) BETA. ST DFU Tool. Запустите на Windows утилиту [3] от компании ST, и следуйте указаниям для установки драйвера устройства DFU, генерации файла DFU и перепрошивки устройства. dfu-util на Linux и Mac. Установите программу dfu-util с помощью менеджера пакетов Linux или из brew на OSX. Для прошивки своего устройства запустите команду: sudo dfu-util -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D canable-firmware.bin После прошивки верните перемычку BOOT в исходное состояние (переставьте её в сторону коннектора шины CAN), отключите и снова подключите устройство. [Ссылки] 1. Getting Started site:canable.io - быстрый старт, как работать с адаптерами CANable AZSMZ-USB2CAN. |