Depuración del string descriptor y LANGID USB

Cómo depurar fallos del USB string descriptor, fallos en peticiones LANGID, bugs del descriptor de número de serie, nombres de fabricante y producto, números de serie duplicados y problemas de binding de driver.

usb string descriptor, langid, serial number descriptor, manufacturer string, product string, duplicate serial number, diagnóstico USB

Los USB string descriptor parecen inofensivos, pero unos strings mal pueden romper el binding de driver, la identidad del dispositivo, la persistencia del puerto serie, la automatización del laboratorio, las herramientas de actualización de firmware y los flujos de soporte. Los usuarios buscan "USB string descriptor failed", "LANGID descriptor", "USB serial number descriptor missing", "duplicate USB serial number", "USB product string wrong" y "Windows shows unknown USB device name" cuando el dispositivo enumera pero la identidad es inestable.

Bus Scope ayuda porque los fallos de string descriptor pasan durante la enumeración como transferencias de control. El host pide los language IDs soportados y luego pide los strings de fabricante, producto y número de serie. Si algún paso devuelve datos mal formados, el SO puede seguir pero guardar identidad mala.

LANGID descriptor

Antes de pedir strings concretos, el host puede pedir el string descriptor cero. Devuelve los language IDs soportados.

Evidencia típica:

GET_DESCRIPTOR String index 0
LANGID list returned
GET_DESCRIPTOR String index 1
GET_DESCRIPTOR String index 2
GET_DESCRIPTOR String index 3

Si el string descriptor cero falla, las peticiones de string posteriores pueden comportarse de forma inconsistente entre hosts.

Strings de fabricante, producto y serie

Índices de string habituales:

  • iManufacturer.
  • iProduct.
  • iSerialNumber.

Estos campos se referencian desde el Device Descriptor. Si el dispositivo anuncia un índice de string distinto de cero pero falla al devolverlo, el comportamiento del host puede variar.

Síntomas:

  • El dispositivo aparece como "Unknown Device".
  • El nombre de producto sale corrupto.
  • El número de serie está vacío.
  • Windows crea un COM nuevo tras cada enchufado.
  • Las reglas udev de Linux no emparejan de forma fiable.
  • La herramienta de actualización de firmware no puede identificar el target.
  • Varias unidades colapsan en una sola identidad.

Números de serie duplicados

Los números de serie USB duplicados son un problema serio de producción. Dos dispositivos físicos con el mismo VID, PID y número de serie pueden ser tratados como la misma instancia.

Consecuencias:

  • Se carga el calibration data equivocado.
  • La estación de test escribe logs en la unidad equivocada.
  • La asignación de COM cambia de forma impredecible.
  • El licenciamiento o provisioning se ata al hardware que no es.
  • El soporte de campo no puede distinguir dispositivos.

Una captura de paquetes puede demostrar si los bytes del descriptor de número de serie están realmente duplicados o si la capa de display del SO está tapando un problema más profundo.

Falta el número de serie

Algunos dispositivos omiten a propósito el número de serie. Puede ser aceptable para periféricos simples, pero causa problemas cuando importa una identidad estable.

Términos de búsqueda habituales:

  • "USB device new COM port every time"
  • "USB serial number missing"
  • "Windows USB device instance path changes"
  • "Linux udev match USB serial"

Si falta el número de serie, el SO puede identificar el dispositivo por topología de puerto en lugar de por identidad hardware.

Strings UTF-16LE mal formados

Los strings USB se codifican como strings Unicode. Bugs típicos del firmware:

  • Longitud de descriptor incorrecta.
  • Conteo de bytes impar.
  • Falta el descriptor type.
  • Bytes UTF-16LE inválidos.
  • Falta la terminación nula o desajuste de expectativa.
  • Devolver bytes ASCII en lugar del formato USB string.
  • Truncar números de serie largos.

Algunos hosts lo toleran. Otros rechazan el descriptor o muestran texto corrupto.

Timing y reintentos de la petición de string

Los hosts pueden pedir el mismo string varias veces con longitudes distintas. Un dispositivo debería manejar tanto peticiones cortas de prueba como peticiones de longitud completa.

Patrones de fallo:

  • El dispositivo devuelve correctos los primeros 2 bytes pero falla en la petición completa.
  • El firmware asume que wLength siempre es igual a la longitud del descriptor.
  • El endpoint de control hace STALL en peticiones repetidas del string.
  • El dispositivo devuelve un número de serie distinto tras un reset.
  • El bootloader y el firmware de aplicación reportan identidades distintas.

Es habitual en flujos de actualización de firmware.

Impacto en el binding de driver

La selección de driver suele depender de VID/PID/clase, pero los string descriptors afectan a la identidad visible para el usuario y a veces a las herramientas vendor. Los dispositivos compuestos, los CDC serie, las herramientas HID y los DFU bootloaders suelen apoyarse en los strings para soporte y automatización.

Si un ticket dice "nombre de dispositivo USB incorrecto", no lo deseches como cosmético. Puede indicar corrupción de descriptor o confusión de estado del firmware.

Checklist de depuración

Usa este proceso:

  1. Captura la enumeración desde el plug-in.
  2. Inspecciona los índices de string del Device Descriptor.
  3. Comprueba el string descriptor cero para LANGID.
  4. Decodifica el string de fabricante.
  5. Decodifica el string de producto.
  6. Decodifica el string de número de serie.
  7. Compara dos unidades físicas.
  8. Compara bootloader y firmware de aplicación.
  9. Comprueba el comportamiento tras reset y reenchufado.
  10. Conserva los bytes de descriptor en crudo para los fixes de firmware.

Diagnóstico final

Los problemas de USB string descriptor y LANGID afectan a la identidad del dispositivo, la persistencia del puerto serie, los tests de fabricación, el soporte de campo y los flujos de driver. La evidencia clave no es la etiqueta del sistema operativo sino las transferencias de control reales del descriptor.

Bus Scope ayuda a mostrar LANGID, fabricante, producto, número de serie, strings mal formados, seriales duplicados y reintentos de enumeración en una sola vista de diagnóstico.

<!-- bus-scope-localized-transaction-foundation-v1:start -->

Prueba del contrato USB para «Depuración del string descriptor y LANGID USB»

La respuesta directa es que STALL, timeout o reset no explica por sí solo la causa. Primero demuestra que el proveedor observa el dispositivo correcto; después lee el contrato de transferencia: tipo, dirección, recipient, wValue, wIndex, longitud declarada y real, status y estado anterior y posterior. En «Depuración del string descriptor y LANGID USB», relaciona la conclusión con la primera transacción que difiere de un caso bueno.

Límite Qué comparar Decisión útil
Plataforma proveedor, permiso, Root Hub o usbmon/XHC20 ¿Llegan records de la conexión correcta?
Setup bmRequestType, bRequest, wValue, wIndex, wLength ¿El host envía la petición prevista?
Data dirección, longitud y bytes retenidos ¿El payload cumple el contrato?
Status ACK, STALL, timeout o cancellation ¿Dónde termina la transacción?
Estado configuration, interface, alternate setting, endpoint halt ¿El dispositivo estaba preparado?

Empieza antes de reset y enumeración y conserva descriptors, SET_CONFIGURATION, SET_INTERFACE y el comando previo al fallo. Un filtro estrecho de endpoint puede ocultar el control transfer decisivo. Ejecuta una sola acción USB documentada por prueba y cambia solo firmware, driver, puerto, cable, comando o timing.

¿Cómo se escribe una respuesta citable?

Indica la petición observada, sus campos setup, la respuesta y el contexto anterior; propone después una prueba con un solo cambio. Bytes no retenidos por el límite de captura no prueban packet loss. La proximidad entre command y reset demuestra correlación, no causa sin repetición o transición de estado.

¿Cuándo vale una comparación?

Mantén VID/PID, firmware, speed, topología, proveedor, filtro y trigger. Compara fases USB semánticas y no frame numbers entre usbmon y USBPcap. Anota inicio, final, versión, OS, conexión y checksum. Revisa la solución de problemas de Bus Scope.

Los propietarios Semrush siguen separados: free USB analyzer en la página de producto, best USB protocol analyzer en la comparación y USB descriptor viewer en la guía de descriptors. Esta página de soporte no recibe volumen o KD inventado.

<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

Respuesta directa y límite de aceptación

La respuesta breve a «Depuración del string descriptor y LANGID USB» es: Cómo depurar fallos del USB string descriptor, fallos en peticiones LANGID, bugs del descriptor de número de serie, nombres de fabricante y producto, números de serie duplicados y problemas de binding de driver. Trate esa frase como un resultado que debe comprobarse, no como una promesa para cualquier entrada, dispositivo, proyecto o entorno. Un resultado completo registra estado inicial, acción exacta, salida visible y condición que demuestra que la tarea terminó en Bus Scope.

Procedimiento basado en evidencia

Empiece con un caso pequeño y repetible antes de cambiar un proyecto completo. Anote versión de la aplicación, sistema operativo, identidad de entrada o dispositivo, ajustes relevantes y resultado esperado. Ejecute una acción deliberada, conserve la primera transición inesperada y compárela con un caso conocido cuando exista. Cambiar varios controles a la vez oculta qué condición creó o corrigió el problema.

Punto de control 1: Depuración del string descriptor y LANGID USB

Trate «Depuración del string descriptor y LANGID USB» como una puerta de aceptación independiente para «Depuración del string descriptor y LANGID USB». Registre el estado inicial, el primer cambio visible y el estado final. Si el resultado no coincide con el objetivo descrito, vuelva al último punto confirmado en lugar de continuar sobre suposiciones.

Punto de control 2: Cómo depurar fallos del USB string descriptor, fallos en peticiones LANGID, bugs del descr

Convierta «Cómo depurar fallos del USB string descriptor, fallos en peticiones LANGID, bugs del descriptor de número de serie, nombres de fabricante y producto, » en una afirmación de aprobado o fallo que otra persona pueda repetir. Incluya qué debe aparecer, qué debe estar ausente y qué recuperación es segura. Mantenga intacto el proyecto o captura original hasta que la copia corregida pase la misma prueba.

Punto de control 3: LANGID descriptor

Trate «LANGID descriptor» como una puerta de aceptación independiente para «Depuración del string descriptor y LANGID USB». Registre el estado inicial, el primer cambio visible y el estado final. Si el resultado no coincide con el objetivo descrito, vuelva al último punto confirmado en lugar de continuar sobre suposiciones.

Punto de control 4: Strings de fabricante, producto y serie

Convierta «Strings de fabricante, producto y serie» en una afirmación de aprobado o fallo que otra persona pueda repetir. Incluya qué debe aparecer, qué debe estar ausente y qué recuperación es segura. Mantenga intacto el proyecto o captura original hasta que la copia corregida pase la misma prueba.

Punto de control 5: Números de serie duplicados

Trate «Números de serie duplicados» como una puerta de aceptación independiente para «Depuración del string descriptor y LANGID USB». Registre el estado inicial, el primer cambio visible y el estado final. Si el resultado no coincide con el objetivo descrito, vuelva al último punto confirmado en lugar de continuar sobre suposiciones.

Punto de control 6: Falta el número de serie

Convierta «Falta el número de serie» en una afirmación de aprobado o fallo que otra persona pueda repetir. Incluya qué debe aparecer, qué debe estar ausente y qué recuperación es segura. Mantenga intacto el proyecto o captura original hasta que la copia corregida pase la misma prueba.

Punto de control 7: Strings UTF-16LE mal formados

Trate «Strings UTF-16LE mal formados» como una puerta de aceptación independiente para «Depuración del string descriptor y LANGID USB». Registre el estado inicial, el primer cambio visible y el estado final. Si el resultado no coincide con el objetivo descrito, vuelva al último punto confirmado en lugar de continuar sobre suposiciones.

Punto de control 8: Timing y reintentos de la petición de string

Convierta «Timing y reintentos de la petición de string» en una afirmación de aprobado o fallo que otra persona pueda repetir. Incluya qué debe aparecer, qué debe estar ausente y qué recuperación es segura. Mantenga intacto el proyecto o captura original hasta que la copia corregida pase la misma prueba.

Punto de control 9: Impacto en el binding de driver

Trate «Impacto en el binding de driver» como una puerta de aceptación independiente para «Depuración del string descriptor y LANGID USB». Registre el estado inicial, el primer cambio visible y el estado final. Si el resultado no coincide con el objetivo descrito, vuelva al último punto confirmado en lugar de continuar sobre suposiciones.

Punto de control 10: Checklist de depuración

Convierta «Checklist de depuración» en una afirmación de aprobado o fallo que otra persona pueda repetir. Incluya qué debe aparecer, qué debe estar ausente y qué recuperación es segura. Mantenga intacto el proyecto o captura original hasta que la copia corregida pase la misma prueba.

Matriz de aceptación

Punto Evidencia que conservar Condición de aprobado
Depuración del string descriptor y LANGID USB Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado
Cómo depurar fallos del USB string descriptor, fallos en peticiones LANGID, bugs del descriptor de número de serie, nomb Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado
LANGID descriptor Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado
Strings de fabricante, producto y serie Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado
Números de serie duplicados Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado
Falta el número de serie Estado inicial, una acción y estado resultante Otra persona reproduce el resultado declarado

Aislamiento, recuperación y entrega

Deténgase en el primer límite que falla. Conserve fuente, proyecto, sesión o captura, duplíquelo antes de una edición destructiva y cambie una variable por experimento. Repetir un flujo amplio después de varios cambios puede dar otro resultado sin explicar la causa.

Separe ausencia de evidencia de evidencia de ausencia. Una vista vacía puede indicar entrada, alcance, filtro, permiso, dispositivo, intervalo o estado equivocado. Verifique adquisición o importación antes de interpretar el decoder, editor, informe o exportación.

Antes de entregar, reabra el artefacto y revise inicio, punto de decisión y final. Registre versión, plataforma, configuración, expectativa, observación y reproducción mínima. Elimine o redacte datos sensibles y confirme que el destinatario está autorizado.

Preguntas y respuestas

¿Cuál es la forma fiable más rápida de empezar?

Use el caso representativo más pequeño, escriba el resultado esperado y cambie una variable. Confirme el recorrido básico antes de añadir filtros, efectos, ediciones, automatización o una fuente mayor.

¿Qué evidencia debe guardarse?

Conserve identidad de entrada, versión, plataforma, ajustes, acción exacta, primera transición inesperada y salida final. Cierre y reabra cualquier proyecto, sesión, informe o exportación antes de considerarlo duradero.

¿Cuándo debe repetirse el procedimiento?

Repítalo después de cambios relevantes en aplicación, sistema, driver, firmware, modelo, fuente o flujo. Preserve el caso aceptado anterior como referencia sin modificar.

¿Cuándo está listo para entregar?

Cuando otra persona autorizada identifica la entrada, repite la acción, obtiene el mismo resultado, entiende los límites restantes y abre el artefacto sin depender de estado local no documentado.

Guías relacionadas

Estas páginas en el mismo idioma cubren etapas contiguas sin cambiar el propietario canónico del tema:

<!-- multilingual-blog-closeout:end -->