Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов
Как отлаживать строковые USB-дескрипторы, сбои запроса LANGID, баги дескриптора serial-номера, имена производителя и продукта, дублирующиеся serial-номера и проблемы привязки драйверов.
Строковые USB-дескрипторы выглядят безобидно, но плохие строки могут сломать привязку драйверов, идентичность устройства, постоянство serial-порта, лабораторную автоматизацию, инструменты обновления прошивки и воркфлоу поддержки. Пользователи ищут «USB string descriptor failed», «LANGID descriptor», «USB serial number descriptor missing», «duplicate USB serial number», «USB product string wrong», «Windows shows unknown USB device name», когда устройство перечисляется, но идентичность нестабильна.
Bus Scope полезен, потому что сбои строковых дескрипторов случаются во время перечисления как управляющие передачи. Хост запрашивает поддерживаемые language ID, затем запрашивает строки manufacturer, product и serial number. Если какой-то шаг возвращает искажённые данные, ОС может продолжить, но сохранить плохую идентичность.
LANGID-дескриптор
Перед запросом конкретных строк хост может запросить string descriptor zero. Он возвращает поддерживаемые language ID.
Типичные доказательства:
GET_DESCRIPTOR String index 0
LANGID list returned
GET_DESCRIPTOR String index 1
GET_DESCRIPTOR String index 2
GET_DESCRIPTOR String index 3
Если string descriptor zero падает, последующие запросы строк могут вести себя несогласованно между хостами.
Строки manufacturer, product и serial
Типичные индексы строк:
iManufactureriProductiSerialNumber
Эти поля ссылаются из device descriptor. Если устройство заявляет ненулевой индекс строки, но не может вернуть строку, поведение хоста может отличаться.
Симптомы:
- Устройство появляется как «Unknown Device».
- Имя продукта искажено.
- Serial-номер пустой.
- Windows создаёт новый COM-порт после каждого подключения.
- Правила udev в Linux надёжно не матчатся.
- Инструмент обновления прошивки не может опознать цель.
- Несколько устройств сливаются в одну идентичность.
Дублирующиеся serial-номера
Дублирующиеся USB serial-номера — серьёзная прод-проблема. Два физических устройства с одним VID, PID и serial-номером могут трактоваться как один экземпляр устройства.
Последствия:
- Загружаются неверные калибровочные данные.
- Тестовая станция пишет логи не на тот модуль.
- Назначение COM-порта меняется непредсказуемо.
- Лицензирование или provisioning привязывается к неверному железу.
- Полевая поддержка не различает устройства.
Пакетный захват может доказать, реально ли байты serial-дескриптора дублируются или слой отображения ОС скрывает более глубокую проблему.
Отсутствующий serial-номер
Некоторые устройства намеренно не имеют serial-номера. Это может быть приемлемо для простых периферийных устройств, но вызывает проблемы, когда важна стабильная идентичность.
Частые поисковые запросы:
- «USB device new COM port every time»
- «USB serial number missing»
- «Windows USB device instance path changes»
- «Linux udev match USB serial»
Если serial-номера нет, ОС может идентифицировать устройство по топологии порта, а не по аппаратной идентичности.
Искажённые UTF-16LE строки
USB-строки кодируются как Unicode. Баги прошивок:
- Неверная длина дескриптора.
- Нечётное число байт.
- Пропущенный тип дескриптора.
- Невалидные байты UTF-16LE.
- Рассогласование ожидаемого null-терминатора.
- Возврат ASCII-байт вместо USB-формата строки.
- Усечение длинных serial-номеров.
Часть хостов это терпит. Другие отвергают дескриптор или показывают corrupted текст.
Тайминги запросов строк и ретраи
Хосты могут запрашивать одну и ту же строку несколько раз с разными длинами. Устройство должно корректно обрабатывать и короткие пробные запросы, и полные.
Паттерны сбоев:
- Устройство возвращает правильные первые 2 байта, но падает на полном запросе.
- Прошивка считает, что
wLengthвсегда равна длине дескриптора. - Stall управляющей конечной точки на повторном запросе строки.
- Устройство возвращает другой serial-номер после reset.
- Загрузчик и прикладная прошивка сообщают разную идентичность.
Это часто встречается в воркфлоу обновления прошивки.
Влияние на привязку драйверов
Выбор драйвера обычно зависит от VID/PID/класса, но строковые дескрипторы влияют на видимую идентичность и иногда на вендорные инструменты. Составные устройства, CDC serial-устройства, HID-инструменты и DFU-загрузчики часто опираются на строки для поддержки и автоматизации.
Если в тикете написано «wrong USB device name», не отмахивайтесь как от косметики. Это может быть признак corruption дескриптора или путаницы состояний прошивки.
Чек-лист отладки
Используйте такой процесс:
- Захватите перечисление с момента подключения.
- Изучите string indexes в device descriptor.
- Проверьте string descriptor zero на LANGID.
- Декодируйте manufacturer-строку.
- Декодируйте product-строку.
- Декодируйте serial-номер.
- Сравните два физических устройства.
- Сравните загрузчик и прикладную прошивку.
- Проверьте поведение после reset и переподключения.
- Сохраните сырые байты дескрипторов для фиксов прошивки.
Итоговый диагноз
Проблемы USB string descriptor и LANGID влияют на идентичность устройства, постоянство serial, производственные тесты, полевую поддержку и воркфлоу драйверов. Ключевое доказательство — не метка ОС, а реальные управляющие передачи дескрипторов.
Bus Scope помогает показать LANGID, manufacturer, product, serial number, искажённые строки, дублирующиеся serial-номера и повторы перечисления в одном диагностическом виде.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Проверка USB-контракта для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов»
Краткий ответ: STALL, timeout или reset сам по себе не объясняет причину. Сначала докажите, что provider видит нужный device, затем прочитайте контракт transfer: тип, направление, recipient, wValue, wIndex, заявленная и фактическая длина, status и состояние до/после. Свяжите вывод с первой транзакцией, отличающейся от исправного запуска.
| Граница | Сравнение | Решение |
|---|---|---|
| Платформа | provider, права, Root Hub или usbmon/XHC20 | Records относятся к нужному соединению? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | Host отправил ожидаемый запрос? |
| Data | направление, длина и сохранённые bytes | Payload соответствует контракту? |
| Status | ACK, STALL, timeout или cancellation | Где завершилась транзакция? |
| Состояние | configuration, interface, alternate setting, halt | Device был готов к запросу? |
Начинайте до reset и enumeration, сохраняя descriptors, SET_CONFIGURATION, SET_INTERFACE и command перед отказом. Узкий endpoint filter может скрыть решающий control transfer. В одном опыте выполняйте одно USB-действие и меняйте только firmware, driver, port, cable, host command или timing.
Как написать цитируемый ответ?
Укажите request, setup fields, ответ и предыдущее состояние, затем тест с одной переменной. Не сохранённые из-за retention bytes не доказывают packet loss. Близость command и reset показывает корреляцию, но не причину без повторения или перехода состояния.
Сохраняйте VID/PID, firmware, speed, topology, provider, filter и trigger. Сравнивайте смысловые USB-фазы, а не frame numbers usbmon и USBPcap. Запишите начало, конец, версию, OS, подключение и checksum. Используйте устранение неполадок Bus Scope.
Semrush owners разделены: free USB analyzer принадлежит продукту, best USB protocol analyzer — сравнению, USB descriptor viewer — руководству descriptor. Для этой support-страницы не создаётся выдуманный volume или KD.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Прямой ответ и граница приемки
Краткий ответ по теме «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов»: Как отлаживать строковые USB-дескрипторы, сбои запроса LANGID, баги дескриптора serial-номера, имена производителя и продукта, дублирующиеся serial-номера и проблемы привязки драйверов. Считайте это проверяемым результатом, а не обещанием для любого входа, устройства, проекта или окружения. Полный результат фиксирует исходное состояние, точное действие, видимый выход и условие, подтверждающее завершение задачи в Bus Scope.
Порядок работы от доказательств
Начните с небольшого повторяемого случая до изменения полного проекта. Запишите версию приложения, систему, идентификатор входа или устройства, важные настройки и ожидаемый результат. Выполните одно осознанное действие, сохраните первый неожиданный переход и сравните с исправным случаем, если он есть. Одновременная смена нескольких параметров скрывает условие, создавшее или устранившее проблему.
Контрольная точка 1: Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и пробл
Рассматривайте «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов» как отдельную границу приемки для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 2: Как отлаживать строковые USB-дескрипторы, сбои запроса LANGID, баги дескриптора serial-ном
Сформулируйте для «Как отлаживать строковые USB-дескрипторы, сбои запроса LANGID, баги дескриптора serial-номера, имена производителя и продукта, дублирующиеся serial-но» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 3: LANGID-дескриптор
Рассматривайте «LANGID-дескриптор» как отдельную границу приемки для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 4: Строки manufacturer, product и serial
Сформулируйте для «Строки manufacturer, product и serial» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 5: Дублирующиеся serial-номера
Рассматривайте «Дублирующиеся serial-номера» как отдельную границу приемки для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 6: Отсутствующий serial-номер
Сформулируйте для «Отсутствующий serial-номер» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 7: Искажённые UTF-16LE строки
Рассматривайте «Искажённые UTF-16LE строки» как отдельную границу приемки для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 8: Тайминги запросов строк и ретраи
Сформулируйте для «Тайминги запросов строк и ретраи» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 9: Влияние на привязку драйверов
Рассматривайте «Влияние на привязку драйверов» как отдельную границу приемки для «Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 10: Чек-лист отладки
Сформулируйте для «Чек-лист отладки» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Матрица приемки
| Точка | Сохраняемое доказательство | Критерий успеха |
|---|---|---|
| Отладка USB String Descriptor и LANGID: serial number, производитель, имя продукта и проблемы привязки драйверов | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Как отлаживать строковые USB-дескрипторы, сбои запроса LANGID, баги дескриптора serial-номера, имена производителя и про | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| LANGID-дескриптор | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Строки manufacturer, product и serial | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Дублирующиеся serial-номера | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Отсутствующий serial-номер | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
Изоляция, восстановление и передача
Остановитесь на первой неуспешной границе. Сохраните источник, проект, сеанс или захват, сделайте копию перед разрушающим редактированием и меняйте одну переменную за опыт. Повтор широкого процесса после нескольких изменений может дать иной результат без объяснения причины.
Отличайте отсутствие доказательств от доказательства отсутствия. Пустой экран может означать неверный вход, область, фильтр, права, устройство, период или состояние проекта. Подтвердите получение или импорт до толкования decoder, редактора, отчета или экспорта.
Перед передачей повторно откройте артефакт и проверьте начало, точку решения и конец. Запишите версию, платформу, конфигурацию, ожидание, наблюдение и минимальное воспроизведение. Удалите или скройте чувствительные данные и проверьте полномочия получателя.
Вопросы и ответы
Как надежнее всего начать?
Возьмите минимальный репрезентативный случай, запишите ожидаемый результат и меняйте одну переменную. Подтвердите базовый путь до добавления фильтров, эффектов, правок, автоматизации или большого источника.
Какие доказательства сохранять?
Сохраните идентификатор входа, версию, платформу, настройки, точное действие, первый неожиданный переход и конечный выход. Закройте и повторно откройте проект, сеанс, отчет или экспорт.
Когда повторять процедуру?
После значимого изменения приложения, системы, драйвера, прошивки, модели, источника или процесса. Сохраните предыдущий принятый случай как неизменную основу сравнения.
Когда результат готов к передаче?
Когда другой уполномоченный человек определяет вход, повторяет действие, видит тот же результат, понимает ограничения и открывает артефакт без недокументированного локального состояния.
Связанные руководства
Эти страницы на том же языке описывают соседние этапы, не меняя канонического владельца темы:
<!-- multilingual-blog-closeout:end -->