Depuración serie USB CDC ACM: line coding, control line state y datos faltantes
Cómo depurar dispositivos serie virtuales USB CDC ACM inspeccionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints bulk y el comportamiento del firmware.
Los dispositivos USB CDC ACM se usan para puertos serie virtuales, consolas de dispositivo, herramientas de firmware, telemetría, fixtures de test y diagnóstico embebido. Desde la aplicación parecen simples: "abres un COM o un /dev/ttyACM*, ajustas el baud rate, lees y escribes bytes. Por debajo, el host y el dispositivo siguen intercambiando class-specific requests USB y bulk transfers."
Cuando un dispositivo CDC enumera pero no se mueven datos, la captura puede enseñar si el problema está en el layout de descriptores, el line coding, el control line state, el tráfico de endpoints o el buffering del firmware.
CDC ACM tiene interfaces de control y de datos
Un dispositivo CDC ACM típico expone una interfaz de comunicación y una interfaz de datos. El host puede enviar class-specific requests antes de que empiece la transferencia de datos.
Evidencia importante:
- Descriptor de la interfaz de comunicación.
- Descriptor de la interfaz de datos.
- Functional descriptors CDC.
- Notification endpoint.
- Endpoint bulk IN.
- Endpoint bulk OUT.
SET_LINE_CODING.GET_LINE_CODING.SET_CONTROL_LINE_STATE.
Si esas peticiones no llegan, puede que el host no haya enlazado el driver CDC esperado.
El baud rate suele ser señal, no UART físico
En muchos dispositivos CDC USB, el baud rate no es físicamente significativo como lo sería en un UART. Pero el host sigue enviando line coding. El firmware puede usarlo para configurar un bridge, ignorarlo o validarlo.
Preguntas para la captura:
- ¿Mandó el host
SET_LINE_CODING? - ¿Qué baud rate, paridad, bits de stop y bits de datos se pidieron?
- ¿Aceptó el firmware la petición?
- ¿Puso el host DTR o RTS con
SET_CONTROL_LINE_STATE? - ¿Espera el firmware a DTR antes de transmitir?
Muchos problemas de "no sale nada por el serie" son en realidad "el firmware espera DTR y el host nunca lo ha asserted" o "la aplicación abrió el puerto pero no lo configuró como se esperaba".
Los endpoints bulk demuestran el movimiento de datos
Tras el setup, los datos CDC suelen moverse por endpoints bulk. Si las escrituras del host aparecen en bulk OUT pero no llega respuesta en bulk IN, puede que el firmware no esté enviando. Si llegan datos bulk IN pero la aplicación no los enseña, el problema puede estar en la propia aplicación.
Inspecciona:
- Dirección del endpoint.
- Longitudes de transferencia.
- Comportamiento repetido de NAK o timeout.
- Bytes reales del payload.
- Estado de las transferencias.
- Orden relativo a las peticiones de line state.
Así es como una captura USB resulta más útil que una captura de pantalla del terminal.
Dónde encaja Bus Scope
Bus Scope debería ayudar a los equipos de firmware a mantener descriptores, class requests y datos de endpoint en una sola sesión. Para depurar CDC ACM, debería responder:
- ¿El host enlazó CDC?
- ¿Qué line coding mandó?
- ¿Cambiaron DTR/RTS?
- ¿El bulk OUT llevó comandos?
- ¿El bulk IN llevó respuestas?
- ¿Pasó el fallo antes o después de empezar el tráfico estilo serie?
Para búsquedas como "USB CDC ACM no data", "virtual COM port no output" o "SET_CONTROL_LINE_STATE DTR", la evidencia no está solo en el terminal. Está en las class requests USB y las transferencias de endpoint.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes»
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 serie USB CDC ACM: line coding, control line state y datos faltantes», 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 serie USB CDC ACM: line coding, control line state y datos faltantes» es: Cómo depurar dispositivos serie virtuales USB CDC ACM inspeccionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints bulk y el comportamiento del firmware. 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 serie USB CDC ACM: line coding, control line state y datos faltantes
Convierta «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes» 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 2: Cómo depurar dispositivos serie virtuales USB CDC ACM inspeccionando SETLINECODING, SETCON
Trate «Cómo depurar dispositivos serie virtuales USB CDC ACM inspeccionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints bulk y el comportamiento del f» como una puerta de aceptación independiente para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes». 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 3: CDC ACM tiene interfaces de control y de datos
Convierta «CDC ACM tiene interfaces de control y de datos» 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 4: El baud rate suele ser señal, no UART físico
Trate «El baud rate suele ser señal, no UART físico» como una puerta de aceptación independiente para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes». 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 5: Los endpoints bulk demuestran el movimiento de datos
Convierta «Los endpoints bulk demuestran el movimiento de datos» 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 6: Dónde encaja Bus Scope
Trate «Dónde encaja Bus Scope» como una puerta de aceptación independiente para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes». 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 7: Prueba del contrato USB para «Depuración serie USB CDC ACM: line coding, control line stat
Convierta «Prueba del contrato USB para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes»» 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 8: ¿Cómo se escribe una respuesta citable?
Trate «¿Cómo se escribe una respuesta citable?» como una puerta de aceptación independiente para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes». 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 9: ¿Cuándo vale una comparación?
Convierta «¿Cuándo vale una comparació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.
Punto de control 10: Descriptor de la interfaz de comunicación.
Trate «Descriptor de la interfaz de comunicación.» como una puerta de aceptación independiente para «Depuración serie USB CDC ACM: line coding, control line state y datos faltantes». 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.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Depuración serie USB CDC ACM: line coding, control line state y datos faltantes | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo depurar dispositivos serie virtuales USB CDC ACM inspeccionando SETLINECODING, SETCONTROLLINESTATE, endpoints bulk | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| CDC ACM tiene interfaces de control y de datos | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| El baud rate suele ser señal, no UART físico | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Los endpoints bulk demuestran el movimiento de datos | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Dónde encaja Bus Scope | 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 -->