Сергей Борщ 119 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Делал достаточно много устройств с USB - CDC. Загрузчик обновлял прошивку через этот же виртуальный COM-порт под линухом и виндой, все устраивало кроме того, что для заливки нужна была моя самописная программа для компа. Тут понадобилось сделать устройство с HID, мой загручик уже не подходит, решился на реализацию загрузки через DFU. Вроде как реализовал. Если устройство чистое, только с одним загрузчиком (отдает DFU mode descriptor set) - то оно прекрасно видится и программируется как под линухом так и под виндой. Правда, чтобы работало под виндой пришлось реализовать M$ OS Descriptor но теперь драйвер WinUSB подхватывается автоматом. Если же устройство выполняет приложение и отдает Run-Time DFU Interface и Functional дескрипторы, то dfu-util под линухом его видит и обновляет, а под виндой ну ни в какую не хочет, пишет "Cannot open DFU device <VID>:<PID>". Вот отрывок из dfu-util -l -vvvv: [ 0.267326] [00001730] libusb: debug [init_device] (bus: 1, addr: 2, depth: 1, port: 2): 'USB\VID_16C0&PID_05DC\[email protected]:' [ 0.275436] [00001730] libusb: debug [libusb_get_device_descriptor] [ 0.276590] [00001730] libusb: debug [libusb_get_config_descriptor] index 0 [ 0.277662] [00001730] libusb: debug [libusb_get_device_descriptor] [ 0.278661] [00001730] libusb: debug [libusb_get_config_descriptor] index 0 [ 0.279619] [00001730] libusb: debug [libusb_get_device_descriptor] [ 0.280453] [00001730] libusb: debug [libusb_get_config_descriptor] index 0 [ 0.280970] [00001730] libusb: debug [libusb_get_device_descriptor] [ 0.281509] [00001730] libusb: debug [libusb_get_config_descriptor] index 0 [ 0.282009] [00001730] libusb: debug [parse_configuration] skipping descriptor 0xb [ 0.282517] [00001730] libusb: debug [libusb_open] open 1.2 [ 0.283011] [00001730] libusb: debug [libusb_open] open 1.2 returns -5 Cannot open DFU device 16c0:05dc Причем, что характерно, wireshark показывает, что оно даже не обращается к устройству. Полазил по интернету, везде пишут, что это ошибка libusb и причина - не установленный драйвер на DFU interface. Но у меня он установлен при помощи M$ OS Descriptors, в диспетчере устройств восклицательных знаков нет, драйвер тот же, что и в DFU-mode. Подозреваю, что проблема в дескрипторах, вот они: Bus 003 Device 054: ID 16c0:05e1 Van Ooijen Technische Informatica Free shared USB VID/PID pair for CDC devices Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 239 Miscellaneous Device bDeviceSubClass 2 bDeviceProtocol 1 Interface Association bMaxPacketSize0 64 idVendor 0x16c0 Van Ooijen Technische Informatica idProduct 0x05e1 Free shared USB VID/PID pair for CDC devices bcdDevice 2.00 iManufacturer 1 RRT ltd. iProduct 2 UART to SD card logger iSerial 3 ----@rrt.lv: bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x005d bNumInterfaces 3 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xc0 Self Powered MaxPower 100mA Interface Association: bLength 8 bDescriptorType 11 bFirstInterface 0 bInterfaceCount 2 bFunctionClass 2 Communications bFunctionSubClass 2 Abstract (modem) bFunctionProtocol 0 iFunction 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 2 Communications bInterfaceSubClass 2 Abstract (modem) bInterfaceProtocol 0 iInterface 0 CDC Header: bcdCDC 1.10 CDC Call Management: bmCapabilities 0x00 bDataInterface 1 CDC ACM: bmCapabilities 0x02 line coding and serial state CDC Union: bMasterInterface 0 bSlaveInterface 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 128 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 10 CDC Data bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 254 Application Specific Interface bInterfaceSubClass 1 Device Firmware Update bInterfaceProtocol 1 iInterface 4 DFU interface Device Firmware Upgrade Interface Descriptor: bLength 9 bDescriptorType 33 bmAttributes 9 Will Detach Manifestation Intolerant Upload Unsupported Download Supported wDetachTimeout 0 milliseconds wTransferSize 64 bytes bcdDFUVersion 1.01 can't get device qualifier: Resource temporarily unavailable can't get debug descriptor: Resource temporarily unavailable Device Status: 0x0000 (Bus Powered) Сначала делал строго по спецификации с usb.org - в дескриптор конфигурации добавил еще один интерфейсный дескриптор, прописал в него класс, подкласс и протокол DFU. В линухе работет, в виндовсе - нет. Сделал композитное устройство - те же яйца, только в профиль. Прошу помощи у участников форума. Добавлено: а как вы простыни кода сворачиваете при создании сообщений? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 марта, 2021 Опубликовано 10 марта, 2021 (изменено) · Жалоба Переставить драйвер на НЕ WCID. Проблемы у dfu-util со множеством дескрипторов совместно с DFU начинаются если его номер больше чем девять - переставляем поближе к началу составного устройства. Изменено 10 марта, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Честно говоря я не знаю, что такое "WCID" и Zadig не использую. Без него совсем никак? Хотелось, чтобы работало "из коробки". Тот же самый драйвер в устройстве с одним-единственным интерфейсом DFU mode прекрасно позволяет распознать устройство и обновить его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 марта, 2021 Опубликовано 10 марта, 2021 (изменено) · Жалоба У меня даже единственный с виндами после автоопределения не работает... пока zadig не обработать. WCID это то что позволяет автоустановку провернуть. https://github.com/pbatard/libwdi/wiki/WCID-Devices Изменено 10 марта, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба 32 минуты назад, GenaSPB сказал: WCID это то что позволяет автоустановку провернуть. А, это то, что я реализовал. 37 минут назад, GenaSPB сказал: У меня даже единственный с виндами после автоопределения не работает... пока zadig не обработать. Там есть такая тонкость, что если виндовсу не удалось при первом подключении определить устройсво как это самое WCID, он заносит устройство в "черный список" в регистре HKLM/System/CCS/Control/usbflags и больше не пытается с ним бороться. Надо почистить эту ветку "и сразу польется вода". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Устройство впервые подключается к свежеустанрвленой винде 10ке. Такие условия эксперимента. Ставится винусб 10шны... да хоть какой. Не откликается. Как исправить я писал. Ждём, пока микрософт не поправит. А пока чиним что поставилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба 9 часов назад, GenaSPB сказал: У меня даже единственный с виндами после автоопределения не работает Но у меня же с одним интерфейсом работает. Я что-то делаю не так? 8 часов назад, GenaSPB сказал: Как исправить я писал. Ждём, пока микрософт не поправит или, может, у меня работает потому, что уже поправили? 11 часов назад, GenaSPB сказал: Проблемы у dfu-util со множеством дескрипторов совместно с DFU начинаются если его номер больше чем девять Номер интерфейса или номер дескриптора, считая и все дескрипторы вроде CDC Call Management? Я же не чтоб придраться... У миллионов хомячков обновлялка из примеров STM как-то работает и про замену драйверов в ее описании я при беглом просмотре не нашел ничего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба Оговорился. Номер интерфейса. 5 minutes ago, Сергей Борщ said: меня работает потому, что уже поправили? Как раз это и не работало на update 20H2 свежепоставленой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 13 марта, 2021 Опубликовано 13 марта, 2021 · Жалоба Обновлялке из примеров стм требуется драйвер от производителя. Ставится вместе с соответствующим софтом из инствляшки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 18 мая, 2021 Опубликовано 18 мая, 2021 (изменено) · Жалоба Обновились dfu-util. Теперь работает с автоматически установившимся по WCID WinUSB драйвером в Windows 10 http://dfu-util.sourceforge.net/releases/dfu-util-0.10-binaries.tar.xz зы: речь про проблему отсюда: Изменено 18 мая, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 мая, 2021 Опубликовано 19 мая, 2021 · Жалоба Спасибо, проверим! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 мая, 2021 Опубликовано 19 мая, 2021 · Жалоба ... у меня бинарник не запрограммировать... но хоть опозначать начал. Хотя я сейчас и в этом не уверен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 мая, 2021 Опубликовано 19 мая, 2021 · Жалоба месяц назад у меня 0.10 тоже не работал из-за ошибки 101. Думал более свежее, уже с устраненной ошибкой вышло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 мая, 2021 Опубликовано 19 мая, 2021 · Жалоба Я это получабю на попытке прошить бинарник с 0.10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 29 июня, 2021 Опубликовано 29 июня, 2021 · Жалоба Убрав параметр --device xxxx:xxxx получил возможность шить и читать устройство. Так же, dfu-util 0.10 и обновоишаяся до 21H1 винда теперь ставит WINUSB по WCID и все работает (но пока в случае единственного интерфейса). Compound Drvice по прежнему раьотает тольок после перестановки драйвера на не-WCID. Надо проверять на чистой винде.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться