Отладка 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-устройства выглядят просто со стороны пользователя: "воткнул флешку, логгер данных, прошивочный накопитель или встроенное 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» это путь от пользовательского симптома к доказательствам на шине.