Отладка 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» это путь от пользовательского симптома к доказательствам на шине.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Проверка USB-контракта для «Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи»
Краткий ответ: STALL, timeout или reset сам по себе не объясняет причину. Сначала докажите, что provider видит нужный device, затем прочитайте контракт transfer: тип, направление, recipient, wValue, wIndex, заявленная и фактическая длина, status и состояние до/после. Свяжите вывод с первой транзакцией, отличающейся от исправного запуска.
| Граница | Сравнение | Решение |
|---|---|---|
| Платформа | provider, права, Root Hub или usbmon/XHC20 | Records относятся к нужному соединению? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | Host отправил ожидаемый запрос? |
| Data | направление, длина и сохранённые bytes | Payload соответствует контракту? |
| Status | ACK, STALL, timeout или cancellation | Где завершилась транзакция? |
| Состояние | configuration, interface, alternate setting, halt | Device был готов к запросу? |
Начинайте до reset и enumeration, сохраняя descriptors, SET_CONFIGURATION, SET_INTERFACE и command перед отказом. Узкий endpoint filter может скрыть решающий control transfer. В одном опыте выполняйте одно USB-действие и меняйте только firmware, driver, port, cable, host command или timing.
Как написать цитируемый ответ?
Укажите request, setup fields, ответ и предыдущее состояние, затем тест с одной переменной. Не сохранённые из-за retention bytes не доказывают packet loss. Близость command и reset показывает корреляцию, но не причину без повторения или перехода состояния.
Сохраняйте VID/PID, firmware, speed, topology, provider, filter и trigger. Сравнивайте смысловые USB-фазы, а не frame numbers usbmon и USBPcap. Запишите начало, конец, версию, OS, подключение и checksum. Используйте устранение неполадок Bus Scope.
Semrush owners разделены: free USB analyzer принадлежит продукту, best USB protocol analyzer — сравнению, USB descriptor viewer — руководству descriptor. Для этой support-страницы не создаётся выдуманный volume или KD.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Прямой ответ и граница приемки
Краткий ответ по теме «Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи»: Как отлаживать сбои USB Mass Storage Bulk-Only Transport через Command Block Wrappers, Command Status Wrappers и sense data. Считайте это проверяемым результатом, а не обещанием для любого входа, устройства, проекта или окружения. Полный результат фиксирует исходное состояние, точное действие, видимый выход и условие, подтверждающее завершение задачи в Bus Scope.
Порядок работы от доказательств
Начните с небольшого повторяемого случая до изменения полного проекта. Запишите версию приложения, систему, идентификатор входа или устройства, важные настройки и ожидаемый результат. Выполните одно осознанное действие, сохраните первый неожиданный переход и сравните с исправным случаем, если он есть. Одновременная смена нескольких параметров скрывает условие, создавшее или устранившее проблему.
Контрольная точка 1: Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи
Для «Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.
Контрольная точка 2: Как отлаживать сбои USB Mass Storage Bulk-Only Transport через Command Block Wrappers, Com
Закрывайте «Как отлаживать сбои USB Mass Storage Bulk-Only Transport через Command Block Wrappers, Command Status Wrappers и sense data.» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.
Контрольная точка 3: Разберитесь в потоке BOT
Для «Разберитесь в потоке BOT» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.
Контрольная точка 4: Sense data объясняет многие сбои
Закрывайте «Sense data объясняет многие сбои» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.
Контрольная точка 5: Stall конечной точки и reset-recovery
Для «Stall конечной точки и reset-recovery» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.
Контрольная точка 6: Место Bus Scope
Закрывайте «Место Bus Scope» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.
Контрольная точка 7: Проверка USB-контракта для «Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные п
Для «Проверка USB-контракта для «Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи»» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.
Контрольная точка 8: Как написать цитируемый ответ?
Закрывайте «Как написать цитируемый ответ?» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.
Контрольная точка 9: хост шлёт CBW через bulk OUT
Для «хост шлёт CBW через bulk OUT» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.
Контрольная точка 10: необязательная data-фаза через bulk IN или OUT
Закрывайте «необязательная data-фаза через bulk IN или OUT» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.
Матрица приемки
| Точка | Сохраняемое доказательство | Критерий успеха |
|---|---|---|
| Отладка USB Mass Storage BOT: CBW, CSW, sense data и сбойные передачи | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Как отлаживать сбои USB Mass Storage Bulk-Only Transport через Command Block Wrappers, Command Status Wrappers и sense d | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Разберитесь в потоке BOT | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Sense data объясняет многие сбои | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Stall конечной точки и reset-recovery | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Место Bus Scope | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
Изоляция, восстановление и передача
Остановитесь на первой неуспешной границе. Сохраните источник, проект, сеанс или захват, сделайте копию перед разрушающим редактированием и меняйте одну переменную за опыт. Повтор широкого процесса после нескольких изменений может дать иной результат без объяснения причины.
Отличайте отсутствие доказательств от доказательства отсутствия. Пустой экран может означать неверный вход, область, фильтр, права, устройство, период или состояние проекта. Подтвердите получение или импорт до толкования decoder, редактора, отчета или экспорта.
Перед передачей повторно откройте артефакт и проверьте начало, точку решения и конец. Запишите версию, платформу, конфигурацию, ожидание, наблюдение и минимальное воспроизведение. Удалите или скройте чувствительные данные и проверьте полномочия получателя.
Вопросы и ответы
Как надежнее всего начать?
Возьмите минимальный репрезентативный случай, запишите ожидаемый результат и меняйте одну переменную. Подтвердите базовый путь до добавления фильтров, эффектов, правок, автоматизации или большого источника.
Какие доказательства сохранять?
Сохраните идентификатор входа, версию, платформу, настройки, точное действие, первый неожиданный переход и конечный выход. Закройте и повторно откройте проект, сеанс, отчет или экспорт.
Когда повторять процедуру?
После значимого изменения приложения, системы, драйвера, прошивки, модели, источника или процесса. Сохраните предыдущий принятый случай как неизменную основу сравнения.
Когда результат готов к передаче?
Когда другой уполномоченный человек определяет вход, повторяет действие, видит тот же результат, понимает ограничения и открывает артефакт без недокументированного локального состояния.
Связанные руководства
Эти страницы на том же языке описывают соседние этапы, не меняя канонического владельца темы:
- USB UASP против BOT: исправление циклов сброса mass storage, тайм-аутов и медленных передач
- Отладка USB CDC ACM Serial: line coding, control line state и пропавшие данные
- STALL управляющей USB-передачи: отладка setup-пакета, endpoint 0 и сбойных запросов
Сформулируйте для «Отладка 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, sense data и сбойные передачи». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
<!-- multilingual-blog-closeout:end -->