Перейти к верхней панели

Присвоение уникальных имен USB-Serial адаптерам

Решения комплексных задач робототехники, например SLAM, требует введения в состав робототехнической платформы вычислительного устройства ( Intel Nuc, Edison, Joule, Raspberry Pi, nanoX-BT и тд ) на котором выполняется основная программа управления. Помимо решения главной алгоритмической задачи, система управления должна производить обмен данными с периферийными узлами для считывания показаний датчиков и задания команд изменения пространственного положения исполнительным механизмам.
В большинстве вычислителей общего назначения отсутствуют аппаратные средства обмена данными для использования совместно с промышленными интерфейсами ( RS-485/422/232, CAN ) с применением которых, традиционно, строится архитектура объединяющая электронные узлы робототехнической системы. Разработчик вынужден вводит дополнительные аппаратные средства преобразования интерфейсов ( USB-RS485, USB-CAN ) подключаемые к основному вычислителю с применением наиболее распространенного последовательного интерфейса — USB.

dsc05074

При подключение нескольких подобных устройств операционная система Linux идентифицирует и нумерует их автоматически.

serial_names_lsПри этом, каждый перезапуск системы изменяет последовательность идентификации и нумерации устройств. Существует необходимость в наделения уникальными идентификаторами подключаемые устройства для дальнейшего использования в программах управления. Это позволит избежать постоянных проблем со сменой идентификаторов. Присвоит визуально понятные для пользователя имена каждому устройству.
USB-serial устройство имеет Vendor ID и Product ID которые возможно выяснить с использованием команды lsusb.

serial_names_lsusbК сожалению, при использовании в конструкции адаптера одной и той же микросхемы преобразования интерфейсов ( CP2103, FTDI ) у подключенных устройств данный параметр будет совпадать и нельзя достоверно определить его принадлежность. Соответственно необходимо найти другой уникальный идентификатор устройства.
Одним из способов поиска уникального идентификатора является использование инструмента udevadm, например:

udevadm info -a -n /dev/ttyUSB1 | grep '{serial}'

serial_names_findПосле того, как будет найден уникальный идентификатор необходимо создать udev правило, наделяющее понятными символьными именами устройства.
Необходимо создать файл в директории /etc/udev/rules.d, например 27-usb-serial.rules и разместить следующие строки внутри:

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTG5E7WD", SYMLINK+="robot_main_bus"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTH9NILS", SYMLINK+="robot_sensors"

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

serial_names_final

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.