Depuração BOT em USB Mass Storage: CBW, CSW, sense data e transferências com falha

Como depurar falhas em USB Mass Storage Bulk-Only Transport usando Command Block Wrapper, Command Status Wrapper e sense data. Inclui padrões para CBW, CSW, REQUEST SENSE e recuperação por reset.

USB, mass storage, BOT, CBW, CSW, sense data, REQUEST SENSE, depuração USB

Do lado do usuário, dispositivos USB Mass Storage parecem simples: "conecte um pendrive, data logger, dispositivo de update de firmware ou gadget de armazenamento embarcado, e um disco aparece. Quando falha, a mensagem costuma ser vaga: dispositivo não está pronto, erro de I/O, pedido para formatar, falha de montagem ou disco que some." Por baixo, muitos dispositivos usam Bulk-Only Transport. O BOT tem um fluxo de comando reconhecível: "Command Block Wrapper, fase de dados, Command Status Wrapper. Se esse padrão se quebra, a captura geralmente mostra onde."

Entenda o fluxo do BOT

O padrão normal é:

  • host envia CBW pelo bulk OUT
  • fase de dados opcional pelo bulk IN ou OUT
  • dispositivo envia CSW pelo bulk IN

O CBW carrega um comando SCSI. O CSW reporta o status do comando. Se o comando falha, o host pode emitir um REQUEST SENSE para entender o motivo.

Evidências úteis:

  • assinatura do CBW
  • command tag
  • data transfer length
  • flag de direção
  • bytes do comando SCSI
  • tamanho da fase de dados
  • assinatura do CSW
  • status do CSW
  • residue
  • sense data depois da falha

Se as tags não casam, o host não consegue confiar no status. Se o tamanho dos dados não bate com o comportamento, podem vir timeouts ou stalls na sequência.

Sense data explica muitas falhas

Um comando SCSI que falhou não é o fim do diagnóstico. O sense data costuma dar a razão real:

  • not ready
  • medium error
  • illegal request
  • write protected
  • logical block address fora do intervalo
  • unit attention depois de reset

Equipes de firmware devem capturar o comando que falhou e a resposta de sense que veio em seguida. Uma falha de montagem do host pode ser a resposta correta para uma condição de armazenamento reportada pelo firmware.

STALL em endpoint e recuperação por reset

O BOT tem um comportamento de recuperação definido. Se um endpoint trava ou um comando falha feio, o host pode emitir clear endpoint halt ou um mass storage reset. Um dispositivo que não se recupera corretamente pode parecer que desapareceu ou exigir que se tire o cabo.

Inspecione:

  • qual endpoint travou
  • se o host enviou clear feature
  • se houve um BOT reset
  • se o fluxo subsequente de CBW/CSW voltou ao normal
  • se as tags permaneceram consistentes

Essa evidência é melhor do que tentar adivinhar a máquina de estado do firmware.

Onde o Bus Scope entra

O Bus Scope é uma bancada de inspeção USB. Para casos de mass storage, bytes brutos sozinhos não bastam; a estrutura BOT decodificada e o status da transferência ajudam o engenheiro a encontrar a falha mais rápido.

Um relatório útil do Bus Scope para depuração de BOT deve responder:

  • qual comando SCSI falhou?
  • a fase de dados casou com a direção e o tamanho do CBW?
  • o CSW chegou?
  • a tag do CSW casou com a tag do CBW?
  • qual sense data veio na sequência?
  • a recuperação por reset funcionou?

Para buscas como "USB mass storage BOT failed", "CBW CSW mismatch" ou "USB flash drive I/O error firmware", esse é o caminho que leva do sintoma do usuário até a evidência do barramento.