Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи

Как отлаживать сбои USB Mass Storage Bulk-Only Transport через Command Block Wrappers, Command Status Wrappers и sense data.

USB, mass storage, BOT, CBW, CSW, bulk-only transport

USB Mass Storage-устройства выглядят просто со стороны пользователя: "воткнул флешку, логгер данных, прошивочный накопитель или встроенное storage-гаджет — появился диск. Когда оно ломается, ошибка может быть расплывчатой: device not ready, I/O error, предложение отформатировать, mount failure или исчезающий диск." Под капотом многие устройства используют Bulk-Only Transport. У BOT узнаваемый поток команд: "Command Block Wrapper, data-фаза, Command Status Wrapper. Если этот паттерн ломается, захват обычно покажет, где."

Разберитесь в потоке BOT

Нормальный паттерн:

  • хост шлёт CBW через bulk OUT
  • необязательная data-фаза через bulk IN или OUT
  • устройство шлёт CSW через bulk IN

CBW несёт SCSI-команду. CSW сообщает статус команды. Если команда падает, хост может послать REQUEST SENSE, чтобы узнать причину.

Полезные доказательства:

  • сигнатура CBW
  • command tag
  • длина data-передачи
  • флаг направления
  • байты SCSI-команды
  • длина data-фазы
  • сигнатура CSW
  • статус CSW
  • residue
  • sense data после сбоя

Если теги не совпадают, хост не может доверять статусу. Если длина данных не совпадает с поведением, дальше идут тайм-ауты или stall.

Sense data объясняет многие сбои

Сбойная SCSI-команда — это не конец диагностики. Sense data часто даёт реальную причину:

  • not ready
  • medium error
  • illegal request
  • write protected
  • logical block address out of range
  • unit attention после reset

Командам прошивок стоит захватывать команду, которая упала, и последовавший sense-ответ. Сбой монтирования на хосте может быть валидным ответом на состояние storage, о котором сообщила прошивка.

Stall конечной точки и reset-recovery

У BOT определённое поведение восстановления. Если конечная точка ставит stall или команда падает сильно, хост может сделать clear endpoint halt или mass storage reset. Устройство, которое не восстанавливается корректно, может «исчезнуть» или требовать переподключения.

Изучите:

  • какая конечная точка поставила stall
  • послал ли хост clear feature
  • был ли BOT reset
  • возобновился ли поток CBW/CSW
  • оставались ли теги согласованными

Эти данные лучше догадок о стейт-машинах прошивки.

Место Bus Scope

Bus Scope — рабочее место для проверки USB. Для кейсов mass storage одних только сырых байт недостаточно; декодированная структура BOT и статус передач помогают инженерам быстрее находить сбой.

Полезный отчёт Bus Scope по отладке BOT должен отвечать:

  • какая SCSI-команда упала?
  • совпала ли data-фаза с направлением и длиной CBW?
  • пришёл ли CSW?
  • совпал ли тег CSW с тегом CBW?
  • какие sense data последовали?
  • сработало ли reset-восстановление?

Для запросов вроде «USB mass storage BOT failed», «CBW CSW mismatch», «USB flash drive I/O error firmware» это путь от пользовательского симптома к доказательствам на шине.