Depuración del status stage en transferencias de control USB

Cómo depurar problemas en el status stage de las transferencias de control USB, zero-length packets, STALLs en endpoint cero, secuenciación SETUP/DATA/STATUS, peticiones de descriptor y fallos de comandos vendor.

transferencia de control USB, status stage, zero length packet, endpoint zero, setup packet, usb stall, diagnóstico USB

Las transferencias de control USB parecen simples hasta que un dispositivo falla en el status stage. Los usuarios buscan "USB control transfer status stage", "zero length packet USB", "endpoint zero stall", "SETUP DATA STATUS USB", "control transfer timeout" y "vendor request fails" cuando los descriptores funcionan pero un comando hace STALL o se queda en timeout.

Bus Scope ayuda porque los fallos de transferencia de control exigen ver todas las etapas juntas. El setup packet por sí solo no basta. El data stage y el status stage demuestran si el host y el dispositivo completaron la transacción.

Etapas de una transferencia de control

Una transferencia de control suele tener:

  • SETUP stage.
  • DATA stage opcional.
  • STATUS stage.

El status stage usa a menudo un zero-length packet en la dirección opuesta al data stage. Confirma que la transferencia terminó.

Si el status stage falla, el host puede reportar un timeout aunque el dispositivo ya haya intercambiado algunos datos.

Confusión con zero-length packets

Un zero-length packet no es automáticamente "sin datos" en el sentido de aplicación. En transferencias de control, puede ser el handshake de status obligatorio.

Errores típicos:

  • El firmware no hace ACK del status stage.
  • El host espera un status packet zero-length y recibe STALL.
  • El dispositivo manda datos cuando el status debería ir vacío.
  • Un comando vendor completa el data stage pero falla el handshake final.
  • El state machine del firmware se olvida de armar el endpoint cero.

Estos bugs son frecuentes en comandos vendor a medida y en bootloaders.

El endpoint cero es especial

El endpoint cero se encarga de la enumeración y de las peticiones de control. Si su estado se corrompe, el dispositivo entero puede volverse inestable.

Síntomas:

  • La enumeración empieza pero falla en un descriptor posterior.
  • Un vendor request funciona una vez y luego hace STALL.
  • El dispositivo necesita desenchufarse y volverse a enchufar tras una transferencia de control.
  • SET_ADDRESS o SET_CONFIGURATION son poco fiables.
  • HID Feature Report por control path falla.
  • DFU detach devuelve respuesta pero el dispositivo nunca cambia de modo.

Bus Scope debería enseñar si el endpoint cero se recuperó tras un STALL o se quedó roto.

Transferencias de control IN frente a OUT

La dirección del control cambia la dirección del status stage.

Para una petición IN:

  • El host manda SETUP.
  • El dispositivo manda DATA.
  • El host manda status OUT zero-length packet.

Para una petición OUT:

  • El host manda SETUP.
  • El host manda DATA si hay.
  • El dispositivo manda status IN zero-length packet.

Los bugs de firmware ocurren a menudo cuando una dirección se prueba más que la otra.

Fallos en descriptores frente a comandos vendor

Las peticiones de descriptor estándar suelen funcionar porque pasan por caminos de firmware bien probados. Las vendor-specific requests pueden fallar porque un handler a medida maneja mal la longitud, la dirección o el status stage.

Evidencia:

  • bmRequestType.
  • bRequest.
  • wValue.
  • wIndex.
  • wLength.
  • Longitud real de datos.
  • Resultado del status stage.
  • STALL, NAK, timeout o reset.

Los campos del setup packet deben interpretarse junto con el comportamiento observado de cada etapa.

Checklist de depuración

Usa este flujo:

  1. Captura la transferencia de control completa.
  2. Decodifica los campos del SETUP.
  3. Identifica la dirección de la transferencia.
  4. Comprueba la longitud esperada de datos.
  5. Verifica los bytes del data stage.
  6. Verifica la dirección del status stage.
  7. Busca el zero-length packet.
  8. Comprueba STALL o timeout.
  9. Compara peticiones standard y vendor.
  10. Conserva el comportamiento de recuperación del endpoint cero.

Diagnóstico final

Los fallos en transferencias de control USB son con frecuencia fallos en el status stage, no solo en el setup packet. Importan los zero-length packets, el estado del endpoint cero, la dirección y el handshake final.

Bus Scope ayuda a los ingenieros a demostrar si un dispositivo falló durante SETUP, DATA, STATUS, manejo de ZLP, recuperación del endpoint cero o procesamiento del comando vendor.