LowCDC-Win10x64 icon indicating copy to clipboard operation
LowCDC-Win10x64 copied to clipboard

Unknown USB Device (Invalid Configuration Descriptor)

Open Kabron287 opened this issue 4 years ago • 27 comments

timestamp.verisign.com is not reachable now

http://timestamp.comodoca.com/authenticode works for me

Kabron287 avatar Feb 04 '21 08:02 Kabron287

But the device still recognised as unknown with bad descriptor.

Kabron287 avatar Feb 04 '21 08:02 Kabron287

Hello, Vladimir.

timestamp.verisign.com is not reachable now

Thanks for the information, I am supposed to update the repo anyway, have no time to spare though.

But the device still recognised as unknown with bad descriptor.

Not sure if I can help you right now. I haven't updated Windows in years, and am still using version 1903 :/

  • What device are you trying to use? Could you copy VID&PID or, better yet, use USB DeviceTreeViewer or similar software and attach the device report?
  • Are you sure the driver package is all good and installed properly? You could use PnPUtil or DriverStoreExplorer (Rapr) to check whether the driver package is installed.
  • You could also check whether the test certificate is installed using Certificate Manager (certmgr.msc). See #1 for more information.

protaskin avatar Feb 04 '21 12:02 protaskin

Привет Артем. Спасибо за ответ.

  1. Обычный синий Digispark из чипдипа. USB\VID_16D0&PID_0753&REV_0202
  2. Скрипт отработал нормально, inf подхватывается успешно, явно драйвер с диска винда ставить отказывается.
  3. Попробую все проверить. В сети одна-две успешных попыток, а винда продолжает хужать.

Kabron287 avatar Feb 04 '21 15:02 Kabron287

Обычный синий Digispark

Я не пользовался устройствами Digispark, а только своими поделками на ATtiny2313/4313 с самописным фирмварем на основе VUSB и драйвером AVR-CDC для Windows. В какой-то момент ко мне обратились с вопросом поддержки Digispark #2. И такая "поддержка" была с легкостью добавлена, потому что это устройство работает на основе тех же разработок. Собственно, коммит 8f951542ba4c0e1ece14b4557899728955036586. К сожалению, комьюнити Digispark не отличается настойчивостью в решении подобных проблем, и успешная работа было подтверждена только много месяцев спустя.

USB\VID_16D0&PID_0753&REV_0202

Драйвер поддерживает следующие устройства: AVR-CDC (USB\VID_16C0&PID_05E1), Digispark (USB\VID_16D0&PID_087E).

Я удивлен, что вы самостоятельно собрали пакет драйвера, решив возникшие проблемы, но не заметили, что этот USB PID не поддерживается.

Теперь я бы хотел получить от вас как можно больше информации об этом устройстве: ссылку на ЧипДип; ссылку на даташит/описание; репорт UsbTreeViewer/USBDeview/Thesycon USB Descriptor Dumper; ссылку на родной драйвер. Возможно, получится использовать этот драйвер после внесения небольших изменений.

явно драйвер с диска

Я правильно понял, что это при обновлении/установке драйвера через Диспетчер устройств?

винда продолжает хужать

Проблема не в Windows 10, а в драйвере AVR-CDC, который с помощью хуков изменяет правильное поведение usbser.sys на неправильное, но позволяющее работать со слабыми МК. Информацию о драйвере можно найти тут и в архиве с драйвером, который размещен здесь. Соответственно, с новым драйвером usbser.sys это извращение не работает.

protaskin avatar Feb 04 '21 17:02 protaskin

Девайс: https://aliexpress.ru/item/4000375205945.html? https://www.chipdip.ru/product0/8000901979 Родные драйверы: https://github.com/digistump/DigistumpArduino/tree/master/tools Wiki: http://digistump.com/wiki/digispark Отчет: USBView_DigiCDC.txt

Родные драйвера работают с DigiSerial VID_16D0&PID_087E Digispark Bootloader VID_16D0&PID_0753 DigiUSB VID_16C0&PID_05DF

Итак, после загрузки любого скетча для USBCDC девайс превращается в Неизвестное USB-устройство (недопустимый дескриптор конфигурации) Установка любого драйвера(родного или вашего) путем обновления из девайс менеджера сопровождается сообщением: WinError

Все .inf устанавливаются успешно.

Тестовый режим включен перманентно.

Windows 10 x64 LTSC. 17763.rs5_release

где то скачал ваш готовый драйвер LowCDC-Win10x64-1.0.1.6.zip - без такого же успеха.

Kabron287 avatar Feb 05 '21 06:02 Kabron287

Ага, это все-таки клон Digispark. Другой любопытный факт, на который я не обращал раньше внимания, это отсутствие кварца. Все мои устройства разработаны с использованием кварца 12МГц.

Прошу вас, скачайте и используйте в дальнейшем UsbTreeView, его репорты гораздо подробнее.

Итак, после загрузки любого скетча для USBCDC девайс превращается в Неизвестное USB-устройство (недопустимый дескриптор конфигурации)

  1. Сформируйте репорт в UsbTreeView и укажите ссылку на загруженный скетч.

  2. Залейте другой скетч, с которым устройство определяется (дескриптор корректно считывается), также сформируйте репорт и укажите ссылку на скетч.

protaskin avatar Feb 05 '21 10:02 protaskin

OK UsbTreeView_DigisparkUSB.txt UsbTreeView_USBCDC.txt Прикольно, ВИД-ПИД таки есть

DigisparkCDC.zip не работает DigisparkUSB.zip работает любой пример годится.

Все из установочного пакета для ардуины.

Kabron287 avatar Feb 05 '21 10:02 Kabron287

Прикольно, ВИД-ПИД таки есть

Да, непосредственно МК работает и начинает обмен с USB-хостом.

Попробуйте прочитать дескрипторы устройства с помощью Thesycon USB Descriptor Dumper.

Устройство подключено к USB-порту, размещенному непосредственно на материнской плате (или подключено с помощью пассивного удлинителя)? Порт USB3.x или 2.0?

Залейте один из скетчей DigisparkCDC и попробуйте подключать ко всем доступным портам (в т. ч. через хабы, PCI-карты, если есть), контролируя состояние "Неизвестное USB-устройство (недопустимый дескриптор конфигурации)". Репорты не нужны, просто следите за состоянием.

protaskin avatar Feb 05 '21 12:02 protaskin

Уже пробовал на всех портах и компьютерах. Dumper его находит, но сделать ничего не может. Софтовое отключение-включение не помогает.

Kabron287 avatar Feb 05 '21 14:02 Kabron287

А нет пардон увидел:

Information for device USB\Vendor_16D0_Product_087E:

Connection Information:
------------------------------
Device current bus speed: LowSpeed
Device supports USB 1.1 specification
Device supports USB 2.0 specification
Device address: 0x000A
Current configuration value: 0x00
Number of open pipes: 0

Device Descriptor:
------------------------------
0x12	bLength
0x01	bDescriptorType
0x0110	bcdUSB
0x02	bDeviceClass      (Communication Device Class)
0x00	bDeviceSubClass   
0x00	bDeviceProtocol   
0x08	bMaxPacketSize0   (8 bytes)
0x16D0	idVendor
0x087E	idProduct
0x0100	bcdDevice
0x01	iManufacturer
0x02	iProduct     
0x00	iSerialNumber
0x01	bNumConfigurations

Configuration descriptor and all subsequent descriptors are not available. Error code: 0x00000002

Microsoft OS Descriptor is not available. Error code: 0x00000002

String Descriptor Table
--------------------------------
Index  LANGID  String

------------------------------

Connection path for device: 
xHCI-совместимый хост-контроллер USB
Root Hub
USB\Vendor_16D0_Product_087E Port: 6

Running on: Windows 10 or greater (Build Version 17763)

Brought to you by TDD v2.15.0, Jun  8 2020, 17:18:07

Kabron287 avatar Feb 05 '21 14:02 Kabron287

Уже пробовал на всех портах и компьютерах.

И везде "Неизвестное USB-устройство (недопустимый дескриптор конфигурации)"?

Если не затруднит, напишите модели материнских плат и/или южных мостов.

DescriptorDump_VID16D0_PID087E.txt

Ничего нового. Ну что же, последняя надежда на USBPcap. Может быть получится посмотреть, что же не так с этим дескриптором конфигурации.

  1. Установить Wireshark вместе с USBPcap (установить галочки в процессе установки).
  2. Подключить устройство.
  3. Запустить %ProgramFiles%\USBPcap\USBPcapCMD.exe, найти корневой хаб, к которому подключено устройство, и запомнить его номер.
  4. Отключить устройство. Ввести номер хаба и имя файла, подтвердить права. Снова подключить устройство.
  5. Закрыть программу (Ctrl+C).

На сайте USBPcap тоже самое, но на английском и с картинками.

Дамп сюда, его можно посмотреть в Wireshark.

protaskin avatar Feb 05 '21 15:02 protaskin

log1.zip PC1. Ryzen 7 MSI X570-a pro PC2. Note Acer Aspire A515-5S ХЗ какие такие там мосты. ИМХО дрова все таки не ставятся должным образом.

Kabron287 avatar Feb 06 '21 07:02 Kabron287

На раритетной IBM T30 с хрюшей девайс правильно определяется (Digispark Serial) с вид-пид, но родные дрова не ставятся с ошибкой конфигурации inf файла. Думаю, без экстра затрат вопрос не решаем.

Kabron287 avatar Feb 06 '21 07:02 Kabron287

дрова все таки не ставятся должным образом

Пока Windows не опознает устройство, контроль над устройством не будет передан драйверу высокого уровня. Вы сами видели, что в том же Диспетчере устройств отображается USB\VID_0000&PID_0006\... с соответствующей ошибкой.

Попробуйте повторно снять дамп с помощью USBPcap, но подключать Digispark к корневому хабу, к которому не подключены другие устройства. К использованному подключены 2 других устройства, в том числе приёмник Unifying.

Приведите последние записи из %SystemRoot%\inf\SetupAPI.dev.log с начала экспериментов с Digispark и драйверами. Можете просто выложить весь лог, если считаете, что там нет никакой "чувствительной" информации.

protaskin avatar Feb 06 '21 10:02 protaskin

ОК попробую позже как доберусь до тушки.

Kabron287 avatar Feb 06 '21 11:02 Kabron287

На раритетной IBM T30 с хрюшей девайс правильно определяется

Если у вас есть доступ к этой железке или другой системе, где Digispark определяется, прочитайте дескрипторы устройства с помощью Thesycon USB Descriptor Dumper (если получится, я проверил работу обеих программ в виртуальной машине с WinXP, и утилита от Thesycon не запускается) или UsbTreeView. Первая программа обладает полезной в этом случае функциональностью — указывает на ошибки в дескрипторах.

без экстра затрат вопрос не решаем

Maybe the real Digispark was the friends we made along the way ¯\_(ツ)_/¯

И еще, можете полностью скопировать сюда состояние устройства "Неизвестное USB-устройство (недопустимый дескриптор конфигурации)" в Диспетчере устройств? Для оформления этой issue.

protaskin avatar Feb 06 '21 17:02 protaskin

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

Kabron287 avatar Feb 08 '21 15:02 Kabron287

Что за досадный поворот событий! И все же, прошу вас:

  • Приведите записи из %SystemRoot%\inf\SetupAPI.dev.log, как я описал в сообщении выше.

  • Приложите полный репорт UsbTreeView (File → Save Text Report), желательно отключить все неиспользуемые USB-устройства. Мне нужна подробная информация по USB хост-контроллерам и корневым хабам.

Между тем я нашел PCIe-карту с USB3.0, воспроизвел и изучаю проблему. Да, на моей материнской плате 0 (ноль) USB3.0 портов.

protaskin avatar Feb 09 '21 13:02 protaskin

Просю:.. Кстати, попробовал шить в погорельца их родной t85_default.hex - также плохой дескриптор, хотя чип вполне себе живой. Digispark.zip

Kabron287 avatar Feb 09 '21 16:02 Kabron287

Пришлось потратить больше времени, чем хотелось бы, на адаптацию пакетного файла к последнему новшеству от MS — включению номера версии в путь к исполняемым файлам SDK/WDK.

Заменил timestamp-сервис на DigiCert, который используется в примерах на портале Windows Hardware Developer, bbc0272d91bd83d6c4bfcd8b75ccb56e95a0ff98. Рекомендую вам в будущем создавать для каждой проблемы отдельную issue.

Я тут обратил внимание, что UsbTreeView предоставляет возможность открыть отчет, что было бы очень удобно для оценки топологии USB. Вас не затруднит еще раз сформировать и приложить полный отчет в формате XML (File → Save XML Report)? Желательно отключить все неиспользуемые USB-устройства.

protaskin avatar Feb 16 '21 13:02 protaskin

Внимательно изучив записи в приложенном setupapi.dev.log, могу сделать следующие выводы:

  • Вы успешно установили пакет драйвера LowCDC-Win10x64 в Driver Store на момент написания https://github.com/protaskin/LowCDC-Win10x64/issues/5#issuecomment-773120721.

  • Plug and Play не работает, пока Windows не опознает устройство.

  • Поиск драйвера "не работает", пока Windows не опознает устройство и не присвоит ему идентификатор (ИД) оборудования или совместимые ИД:

         ndv:      Recursively searching directory 'D:\Down\Arduino\Digispark\LowCDC-Win10x64-master'
         dvi:      {Build Driver List} 11:13:12.525
         dvi:           Searching for hardware ID(s):
         dvi:                usb\configuration_descriptor_validation_failure
         dvi:           Searching for compatible ID(s):
         dvi:                usb\configuration_descriptor_validation_failure
         dvi:      {Build Driver List - exit(0x00000000)} 11:13:12.530
    

    Например, ваша попытка подсунуть пакет драйвера с VID_0000&PID_0006, созданный с помощью Zadig, не увенчалась успехом:

         ndv:      Searching single INF 'C:\Users\vlady\usb_driver\Неизвестное_USB-устройство_(недопустимый_дескриптор_конфигурации).inf'
         dvi:      {Build Driver List} 09:29:05.806
         dvi:           Searching for hardware ID(s):
         dvi:                usb\configuration_descriptor_validation_failure
         dvi:           Searching for compatible ID(s):
         dvi:                usb\configuration_descriptor_validation_failure
         dvi:      {Build Driver List - exit(0x00000000)} 09:29:05.813
    !    ndv:      No matching drivers found in single INF
    

    Поиск драйвера для опознанного устройства:

         ndv:      Searching directory 'C:\Users\User\LowCDC-Win10x64_v1.0.1.6-20210213'
         dvi:      {Build Driver List} 03:44:04.078
         dvi:           Searching for hardware ID(s):
         dvi:                usb\vid_16c0&pid_05e1&rev_0100
         dvi:                usb\vid_16c0&pid_05e1
         dvi:           Searching for compatible ID(s):
         dvi:                usb\class_02&subclass_02&prot_01
         dvi:                usb\class_02&subclass_02
         dvi:                usb\class_02
         sig:           {_VERIFY_FILE_SIGNATURE} 03:44:04.137
         sig:                Key      = lowcdc.inf
         sig:                FilePath = c:\users\user\lowcdc-win10x64_v1.0.1.6-20210213\lowcdc.inf
         sig:                Catalog  = c:\users\user\lowcdc-win10x64_v1.0.1.6-20210213\lowcdc.cat
    !    sig:                Verifying file against specific (valid) catalog failed.
    !    sig:                Error 0x800b0109: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
         sig:           {_VERIFY_FILE_SIGNATURE exit(0x800b0109)} 03:44:04.494
         sig:           {_VERIFY_FILE_SIGNATURE} 03:44:04.494
         sig:                Key      = lowcdc.inf
         sig:                FilePath = c:\users\user\lowcdc-win10x64_v1.0.1.6-20210213\lowcdc.inf
         sig:                Catalog  = c:\users\user\lowcdc-win10x64_v1.0.1.6-20210213\lowcdc.cat
         sig:                Success: File is signed in Authenticode(tm) catalog.
         sig:                Error 0xe0000242: The publisher of an Authenticode(tm) signed catalog has not yet been established as trusted.
         sig:           {_VERIFY_FILE_SIGNATURE exit(0xe0000242)} 03:44:04.612
         dvi:           Created Driver Node:
         dvi:                HardwareID   - USB\VID_16C0&PID_05E1
         dvi:                InfName      - c:\users\user\lowcdc-win10x64_v1.0.1.6-20210213\lowcdc.inf
         dvi:                DevDesc      - Virtual Communications Port
         dvi:                Section      - DriverInstall.NTamd64
         dvi:                Rank         - 0x00ff0001
         dvi:                Signer Score - Authenticode
         dvi:                DrvDate      - 09/02/2017
         dvi:                Version      - 1.0.1.6
         dvi:      {Build Driver List - exit(0x00000000)} 03:44:04.641
    

Таким образом, непосредственно с пакетом драйвера LowCDC-Win10x64 проблем нет. Нужно продолжать исследовать вопрос совместимости устройств AVR-CDC и Digispark с USB хост-контроллерами и USB-стеком Windows 10.

protaskin avatar Feb 16 '21 13:02 protaskin

также плохой дескриптор, хотя чип вполне себе живой

Сегодня появилась похожая проблема.

Device Description       : Unknown USB Device (Device Descriptor Request Failed)
Device ID                : USB\VID_0000&PID_0002\7&4E1EB02&0&2
Hardware IDs             : USB\DEVICE_DESCRIPTOR_FAILURE

Не уверен, что послужило причиной данного изменения. Вчера я оставил устройство подключенным в USB3.0-порт на несколько часов. Сегодня включил ПК с подключенным устройством в том же порте. В USB2.0-порте работает без проблем.

К счастью, я еще несколько дней назад записал журнал событий при подключении устройства с состоянием Unknown USB Device (Invalid Configuration Descriptor), так что эта проблема не должна повлиять на ход исследования.

Апдейт. Ошибка будто пропадает и возвращается сама собой.

Несколько раз удалось устранить проблему удалением дерева USB-устройств до моего устройства (хост-контроллер, корневой хаб и устройство AVR-CDC) в Диспетчере устройств, выключением ПК со снятием напряжения с блока питания на пару минут.

Занятно, что в случае появления ошибки Device Descriptor Request Failed при подключения устройства AVR-CDC, все доступные мне USB1.1-устройства, в том числе Full-Speed (CH341A Mini Programmer), не определяются с такой же ошибкой.

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

protaskin avatar Feb 16 '21 13:02 protaskin

Внезапно наступили трудо-выебудни, так что до выходных.

Kabron287 avatar Feb 17 '21 11:02 Kabron287

Как я и ожидал, проблема заключается в объявлении конечных точек типа Bulk в дескрипторе конфигурации.

UsbUcx:Dispatch URB_FUNCTION_CONTROL_TRANSFER_EX - Type: Standard, Request: GET_DESCRIPTOR(DEVICE)
UsbUcx:Complete URB_FUNCTION_CONTROL_TRANSFER_EX - Type: Standard, Request: GET_DESCRIPTOR(DEVICE)
UsbUcx:Dispatch URB_FUNCTION_CONTROL_TRANSFER_EX - Type: Standard, Request: GET_DESCRIPTOR(CONFIGURATION)
UsbUcx:Complete URB_FUNCTION_CONTROL_TRANSFER_EX - Type: Standard, Request: GET_DESCRIPTOR(CONFIGURATION)
UsbHub3:Descriptor validation failed for the device for the following reason: DescriptorValidationErrorBulkEndpointAtLowSpeed
UsbHub3:Descriptor validation failed for the device for the following reason: DescriptorValidationErrorBulkEndpointAtLowSpeed
UsbHub3:Validation Failure of Configuration Descriptor

Похоже, что в стеке драйверов USB3.0, который был добавлен в Windows 8, реализована более строгая валидация дескрипторов. Я полагаю, что "виноват" драйвер корневого хаба UsbHub3.sys, который непосредственно выполняет энумерацию подключенных устройств. Таким образом, если подключить устройство AVR-CDC в любой USB-порт (даже USB2.0) корневого хаба, входящего в состав хост-контроллера xHCI, то определяться и работать оно не будет.

Ликбез со страницы описания драйвера LowCDC:

CDC is a class that defines various communications over USB. The RS-232C procedure is included in CDC-ACM (Abstract Control Model) subclass. It uses two bulk transfer pipes for data, and one interrupt pipe for message, besides a control pipe. The mechanism that configures terminal settings (baudrate, parity bit, etc) to device is defined too. In the USB standard, low-speed (1.5Mbps) device is allowed to have two interrupt pipes only. In the case of using bulk transfer or using exceeded number of pipes, some host controller or hub transmits packets at critical intervals, and the V-USB device fails to respond. To reduce this trouble, a small patch driver assists the protocol operations on Windows.

Я посмотрел исходные коды драйвера LowCDC и пришел к выводу, что эту проблему не получится обойти. Можно было бы попробовать использовать конечные точки типа Interrupt вместо Bulk в дескрипторе конфигурации, но для этого необходимо вносить изменения в код драйвера, чтобы как-то иначе определять каким каналам нужно восстановить тип Bulk. Разумеется, нет никаких гарантий, что это заработает.

Возможные решения:

  • Использовать стек драйверов USB3.0 для Windows 7 от производителя чипсета (южного моста) или PCIe-карты расширения. Я установил пакет драйверов VIA_XHCI_Driver_V4.70C_AP.zip для моей PCIe-карты с xHCI хост-контроллером VL800, и устройство AVR-CDC корректно определяется и работает. Недостатки очевидны: эти драйверы не обновлялись с 2014 года и, вероятно, не тестировались с Windows 10.

  • Использовать PCIe-карту расширения с хост-контроллером EHCI и портами USB2.0.

protaskin avatar Feb 23 '21 20:02 protaskin

Hello, @jaromaz.

I'm investigating this Invalid Configuration Descriptor problem and have come to the conclusion that there are compatibility issues with USB3.0 driver stack introduced in Windows 8.

I remember that you have successfully connected a Digispark CDC device to your laptop with Windows 10. Could you save UsbTreeView reports using that laptop and attach them here? I'm interested in the information regarding USB host controllers, (root) hubs, topology and used drivers.

To save reports, follow these steps:

  1. Unplug unused USB devices.
  2. Run the UsbTreeView program.
  3. Plug your Digispark device into a USB port.
  4. Save reports in text and XML formats (File → Save Text Report, Save XML Report).

If you are curious about the results of the investigation so far, read https://github.com/protaskin/LowCDC-Win10x64/issues/5#issuecomment-779824874 and https://github.com/protaskin/LowCDC-Win10x64/issues/5#issuecomment-784500352.

Thanks in advance!

protaskin avatar Feb 23 '21 21:02 protaskin

Решение так и не нашлось? На работе компы обновили и все стенды на атмегах на...сь. Не охота всё переписывать и пререразводить.

XRay3D avatar Oct 24 '23 12:10 XRay3D