2017-01-13 9 views
1

Резюме

Я разработки встроенного программного обеспечения и тестовое приложение PC для устройства пользовательского USB, используя STM32F072 Discovery board. Устройство содержит Microsoft Windows Compatible IDs (WCIDs) to enable automatic installation драйвера WinUSB на ПК.для Windows 10 - вычистить USB перечисления/драйвер хлам

Устройство правильно перечислено на других хостах Windows 10, но не на моем компьютере с ОС Windows 10. Мой ПК разработки ранее пытался перечислить устройство, когда он имел ту же комбинацию VID/PID, но с различными дескрипторами/метаданными. Если я изменю PID на какой-то другой номер (новый для моего ПК разработки), то он делает правильно перечисляем.

Вопросы

  1. Как я могу получить эту работу с моей желаемой VID/PID комбо на моем компьютере разработки?
  2. Является ли Windows кэширование USB-метаданных причиной неудачной нумерации на этом одном ПК?
  3. Каковы наилучшие практики на ПК (Windows) для тестирования/разработки прошивки USB-устройства во время этапа, когда дескрипторы устройств и метаданные находятся в потоке? Можно ли избежать жевать PID только для того, чтобы избежать кэширования Windows?

Подробности

Из-за особенностей ОС Windows кэширует USB дескрипторы и т.п. от предыдущих перечислений, во время разработки встроенного программного обеспечения, я приращением устройство Product ID (PID) в прошивке после каждый раз, когда я сделал другие изменения , чтобы гарантировать, что Windows не кэширует вещи из предыдущих итераций дескрипторов и не вмешивается в работу, которая в противном случае работала бы.

Теперь я получил устройство для успешного перечисления на ПК с Windows 7, 8 и 10 в качестве устройства WinUSB, и я установил связь. Но когда я сменил прошивку на использование VID/PID, с которой я начал, а затем подключить устройство к моему компьютеру разработки, он отображается в диспетчере устройств в разделе «Другие устройства» с значком ошибки. I думаю, что это потому, что мой (Windows 10) ПК разработки ранее видел эту комбинацию VID/PID как имеющую разные дескрипторы, поэтому ее путают некоторые плохие кэшированные вещи.

Я искал regedit, чтобы удалить ключи реестра этого устройства в HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy, но проблема остается. (Кроме того, я получаю сообщение об ошибке, потому что он не может удалить подпапки VID_xxxx&PID_yyyy\zzzzzzzzzzzzz\Properties.) Я также попытался использовать USBDeview для удаления старых итераций устройства, но это тоже не изменило ситуацию.

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

Error enumerating shown in Device Manager

Device Manager Code 28 - no compatible drivers

Device Driver properties

+1

Я начал бы отключать устройство, [конфигурируя диспетчер устройств, чтобы показать его в любом случае] (http://www.thewindowsclub.com/show-non-present-devices-windows) и удалив драйвер с помощью вариант «удалить полностью». Затем проверьте реестр на какие-либо ссылки, если у вас есть проблемы с разрешениями, вам может потребоваться запустить regedit в локальном системном контексте. ** Вам также нужно будет проверить 'c: \ windows \ inf' и удалить любые копии ваших старых файлов inf и любых файлов oem * .inf, которые ссылаются на устройство. ** Могут быть и другие места, но те это те, о которых я знаю. И, конечно, вам нужно будет перезагрузиться. :-) –

+0

@HarryJohnston, 'удаление драйвера с опцией« удалить полностью »- вы имеете в виду флажок« Удалить драйвер программного обеспечения для этого устройства »в диалоговом окне« Подтвердить удаление устройства »? –

+0

Да, это я имел в виду. –

ответ

0

есть инструменты для удаления скрытых следов USB устройств, как USBOblivionhttp://www.thewindowsclub.com/usboblivion-remove-usb-traces-windows, USBDeview ...

источники USBOblivion здесь: https://sourceforge.net/projects/usboblivion/ (https://www.openhub.net/p/usboblivion)

http://www.techerator.com/2010/05/how-to-remove-hidden-duplicate-copies-of-usb-device-drivers-in-windows/

+0

Это не решило мою проблему самостоятельно, но список разделов реестра на USBOblivion дал мне подсказки о том, где искать ключи для удаления, что привело меня к разрешению проблемы. –

2

Попробуйте удалить все соответствующие ключи реестра вида:

HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr 

В статье MSDN Microsoft OS Descriptors for USB Devices говорит:

Операционная система создает запись реестра с именем osvc в этом разделе реестра, которая указывает, поддерживает ли устройство дескрипторы операционной системы Microsoft. Если устройство не предоставит действительный ответ в первый раз, когда операционная система запрашивает его для дескриптора строк операционной системы Microsoft, операционная система не будет отправлять дальнейшие запросы для этого дескриптора.

+0

Кроме того, я также удалил разделы реестра из 'HKLM \ ControlSet001 \ Control \ usbflags \ vvvv *' и 'HKU \ .DEFAULT \ Software \ Microsoft \ TelemetryClient \ ThrottleStore \ watson \ generic \ generic \ pnpdeviceproblemcode \ * vid _ ??? ? * ', чтобы заставить его работать. Я не уверен, что оба они были необходимы. Вы знаете об этом? Кроме того, любой ввод по моему вопросу №3? –

+0

Я рад, что вы смогли заставить его работать. Я не знаю многого о тех других флагах, за исключением, конечно, 'ControlSet001', вероятно, сделан из копии' ControlSet'. Материал 'pnpdeviceproblemcode' выглядит соответствующим.У меня не так много, чтобы сказать по вопросу №3: обычно удалить все соответствующие узлы устройств в Диспетчере устройств Windows достаточно, чтобы протестировать новые дескрипторы (не забудьте удалить любые составные родительские узлы для составных USB-устройств). Но также не забудьте очистить эти ключи реестра, если у вас есть проблемы. –

+0

Спасибо. На данный момент моя проблема решена (и я подтвердил этот ответ), но я не согласен принять ее без каких-либо формальных (полный список разделов реестра и Q # 3), которые, как представляется, никто не делает. Мысли? Кажется справедливым? Re Q # 3, я чувствую, что должен быть режим «отключить дескриптор кэширования». Похоже, на этот этап разработки устройства не было много мысли. –