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.
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.