Depuración USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas
Cómo depurar fallos en USB Mass Storage Bulk-Only Transport usando command block wrappers, command status wrappers y sense data.
Los dispositivos USB Mass Storage parecen simples para el usuario: "enchufas un pendrive, un data logger, un dispositivo de actualización de firmware o un gadget de almacenamiento embebido, y aparece un disco. Cuando falla, el error puede ser vago: device not ready, I/O error, prompt de formateo, fallo de mount o disco que desaparece." Por debajo, muchos dispositivos usan Bulk-Only Transport. BOT tiene un flujo reconocible: "Command Block Wrapper, fase de datos, Command Status Wrapper. Si ese patrón se rompe, la captura suele enseñar dónde."
Entiende el flujo BOT
El patrón normal es:
- El host manda CBW por bulk OUT.
- Fase opcional de datos por bulk IN o OUT.
- El dispositivo manda CSW por bulk IN.
El CBW lleva un comando SCSI. El CSW reporta el estado del comando. Si el comando falla, el host puede emitir REQUEST SENSE para saber por qué.
Evidencia útil:
- Signature del CBW.
- Command tag.
- Data transfer length.
- Flag de dirección.
- Bytes del comando SCSI.
- Longitud de la fase de datos.
- Signature del CSW.
- Status del CSW.
- Residue.
- Sense data tras un fallo.
Si los tags no coinciden, el host no puede fiarse del status. Si la longitud de datos no coincide con el comportamiento, pueden aparecer timeouts o stalls.
Sense data explica muchos fallos
Un comando SCSI fallido no es el final del diagnóstico. El sense data suele dar la razón real:
- Not ready.
- Medium error.
- Illegal request.
- Write protected.
- Logical block address fuera de rango.
- Unit attention tras un reset.
Los equipos de firmware deberían capturar el comando que falló y la respuesta de sense que siguió. Un fallo de mount del host puede ser una respuesta válida a una condición de almacenamiento reportada por el firmware.
STALL en endpoint y recuperación por reset
BOT tiene un comportamiento de recuperación definido. Si un endpoint hace STALL o un comando falla de forma grave, el host puede limpiar el halt del endpoint o emitir un mass storage reset. Un dispositivo que no se recupera correctamente puede parecer que desaparece o requerir desconexión.
Inspecciona:
- Qué endpoint hizo STALL.
- Si el host mandó clear feature.
- Si ocurrió un BOT reset.
- Si el flujo CBW/CSW posterior se reanudó.
- Si los tags siguieron siendo consistentes.
Esta evidencia es mejor que adivinar el state machine del firmware.
Dónde encaja Bus Scope
Bus Scope es un banco de trabajo de inspección USB. Para casos de mass storage, los bytes en crudo no bastan; una estructura BOT decodificada y el estado de la transferencia ayudan a los ingenieros a encontrar el fallo antes.
Un informe útil de Bus Scope para depuración BOT debería responder:
- ¿Qué comando SCSI falló?
- ¿La fase de datos encajó con la dirección y longitud del CBW?
- ¿Llegó el CSW?
- ¿El tag del CSW coincidió con el del CBW?
- ¿Qué sense data llegó después?
- ¿La recuperación por reset funcionó?
Para búsquedas como "USB mass storage BOT failed", "CBW CSW mismatch" o "USB flash drive I/O error firmware", este es el camino del síntoma de usuario a la evidencia del bus.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Depuración USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas»
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 USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas», 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 USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas» es: Cómo depurar fallos en USB Mass Storage Bulk-Only Transport usando command block wrappers, command status wrappers y sense data. 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 USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas
Para «Depuración USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 2: Cómo depurar fallos en USB Mass Storage Bulk-Only Transport usando command block wrappers,
Cierre «Cómo depurar fallos en USB Mass Storage Bulk-Only Transport usando command block wrappers, command status wrappers y sense data.» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 3: Entiende el flujo BOT
Para «Entiende el flujo BOT», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 4: Sense data explica muchos fallos
Cierre «Sense data explica muchos fallos» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 5: STALL en endpoint y recuperación por reset
Para «STALL en endpoint y recuperación por reset», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 6: Dónde encaja Bus Scope
Cierre «Dónde encaja Bus Scope» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 7: Prueba del contrato USB para «Depuración USB Mass Storage BOT: CBW, CSW, sense data y tran
Para «Prueba del contrato USB para «Depuración USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas»», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 8: ¿Cómo se escribe una respuesta citable?
Cierre «¿Cómo se escribe una respuesta citable?» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 9: ¿Cuándo vale una comparación?
Para «¿Cuándo vale una comparación?», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 10: El host manda CBW por bulk OUT.
Cierre «El host manda CBW por bulk OUT.» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Depuración USB Mass Storage BOT: CBW, CSW, sense data y transferencias fallidas | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo depurar fallos en USB Mass Storage Bulk-Only Transport usando command block wrappers, command status wrappers y sen | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Entiende el flujo BOT | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Sense data explica muchos fallos | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| STALL en endpoint y recuperación por reset | 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 -->