"Новый" USB на STM32
Jan. 7th, 2025 04:04 pmРешил я еще в прошлом году "унифицировать" USB, чтобы проще было, если вдруг надумаю какое-то "эдакое" устройство сделать. Выкладываю на гитхаб помаленьку (HID, CDC и эмуляция PL2303). Пока только на F103. Если сегодня допишу составное устройство (7 USB-CDC в одном флаконе), то как-нибудь опробую всю четверку на F072 и F303.
Пока только один непонятный косяк: сразу после подключения неизменно вылезает:
и иногда
Но в дальнейшем проблем нет. ХЗ, что за причина этих ошибок. В отладочном выхлопе вообще проблем нет: пришел запрос — тут же на него ответ ушел. Правда, почему-то дескрипторы запрашиваются хостом по 2-3 раза. И в ответах на строковые дескрипторы wireshark иной раз ZLP показывает, хотя в отладке никаких ZLP не вижу, там что запросили, то и отправилось.
А еще, какой-то другой лютый косяк, который я отметил еще на CDC: хоть я и даю текстовый дескриптор интерфейса, в /dev/ udev не создает симлинк с этим дескриптором (чтобы различать интерфейсы составного устройства). Вижу, что udev мой скрипт проходит, т.к. появляется переменная, а вот симлинк - хрен!
Вот такой скрипт (может, кому пригодится):
(правда, ХЗ, зачем я вообще этот USB_IDS делаю, если есть готовый ID_SERIAL).
Пытаюсь глянуть этот "interface" в
- нет ничего…
Пока только один непонятный косяк: сразу после подключения неизменно вылезает:
string descriptor 0 read error: -75
и иногда
clear tt 2 (82a0) error -32
Но в дальнейшем проблем нет. ХЗ, что за причина этих ошибок. В отладочном выхлопе вообще проблем нет: пришел запрос — тут же на него ответ ушел. Правда, почему-то дескрипторы запрашиваются хостом по 2-3 раза. И в ответах на строковые дескрипторы wireshark иной раз ZLP показывает, хотя в отладке никаких ZLP не вижу, там что запросили, то и отправилось.
А еще, какой-то другой лютый косяк, который я отметил еще на CDC: хоть я и даю текстовый дескриптор интерфейса, в /dev/ udev не создает симлинк с этим дескриптором (чтобы различать интерфейсы составного устройства). Вижу, что udev мой скрипт проходит, т.к. появляется переменная, а вот симлинк - хрен!
Вот такой скрипт (может, кому пригодится):
ACTION=="add", DRIVERS=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}" ACTION=="add", ENV{USB_IDS}=="067b:2303", ATTRS{interface}=="?*", PROGRAM="/bin/bash -c \"ls /dev | grep $attr{interface} | wc -l \"", SYMLINK+="$attr{interface}%c", MODE="0666", GROUP="tty" ACTION=="add", ENV{USB_IDS}=="0483:5740", ATTRS{interface}=="?*", PROGRAM="/bin/bash -c \"ls /dev | grep $attr{interface} | wc -l \"", SYMLINK+="$attr{interface}%c", MODE="0666", GROUP="tty"
(правда, ХЗ, зачем я вообще этот USB_IDS делаю, если есть готовый ID_SERIAL).
Пытаюсь глянуть этот "interface" в
udevadm info --attribute-walk --name=/dev/ttyACM0
- нет ничего…