Отладка USB remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управление питанием и пропущенные wake-события

Как отлаживать USB remote wakeup, сбои suspend/resume, отключения из-за selective suspend, пропущенные wake-события, баги управления питанием и resume-сигнализацию через USB-захваты.

remote wakeup USB, USB suspend resume, selective suspend, управление питанием, пропущенный wake event, диагностика USB, анализатор шины

Баги USB-управления питанием трудно диагностировать: "устройство может идеально работать, пока система активна, и ломаться только после простоя, сна, selective suspend, сна дока, закрытия крышки ноутбука или выключения монитора. Пользователи ищут «USB remote wakeup not working», «USB selective suspend disconnect», «USB device does not wake computer», «USB resume failure», «USB suspend resume bug», «HID keyboard wake from sleep not working»." Bus Scope полезен тем, что suspend и resume — события уровня шины, а не только ошибки приложения. Нужно увидеть, перевёл ли хост устройство в suspend, был ли включён remote wakeup, послало ли устройство resume-сигнал, восстановил ли хост трафик, и устройство перечислилось заново или возобновило работу.

Что значит remote wakeup

Remote wakeup позволяет уснувшему USB-устройству попросить хост возобновить коммуникацию. Частые примеры:

  • Клавиатура будит спящий десктоп.
  • Мышь будит ноутбук из простоя.
  • Кнопка дока будит рабочую станцию.
  • Сканер штрихкодов будит киоск.
  • Промышленный контроллер будит панельный ПК.
  • HID-датчик будит хост после внешнего события.

Remote wakeup — это не просто «у устройства есть питание». Хост должен разрешить его, устройство должно заявить поддержку, фича должна быть включена, и resume-сигнализация должна произойти в нужное время.

Типичные симптомы

Проблемы remote wakeup и suspend выглядят так:

  • Устройство работает, пока ПК не уснёт.
  • Устройство не будит компьютер.
  • Устройство будит систему сразу после suspend.
  • Устройство исчезает после resume.
  • Устройство пере-нумеруется с новым адресом.
  • HID-ввод пропускается после простоя.
  • Serial-устройство перестаёт слать после selective suspend.
  • Аудио или камера возвращаются из сна без данных.
  • Прошивка восстанавливается только после переподключения.

Эти симптомы часто списывают на драйвер, но захват может показать баг power-state прошивки.

Доказательства дескрипторов и фич

Configuration descriptor может заявить поддержку remote wakeup. Хост затем может включить или отключить фичу remote wakeup. Полезная трасса USB-диагностики должна отвечать:

  • Заявляет ли устройство remote wakeup?
  • Послал ли хост SET_FEATURE(DEVICE_REMOTE_WAKEUP)?
  • Очистил ли хост фичу позже?
  • Произошёл ли suspend после простоя?
  • Пыталось ли устройство подать resume-сигнал?
  • Возобновил ли хост нормальные передачи?

Без этих фактов диагноз — догадки.

Selective suspend

Selective suspend позволяет ОС усыпить idle-устройство, не кладя всю систему. Это экономит энергию, но вытаскивает на свет баги прошивки.

Паттерны сбоев:

  • Устройство входит в low-power, но не восстанавливает состояние конечных точек.
  • Прошивка теряет ожидающее состояние interrupt IN.
  • Устройство NAK-нуло бесконечно после resume.
  • Хост делает reset устройства после тайм-аута.
  • Приложение видит тайм-аут или удаление устройства.
  • Составное устройство возобновляет работу на одном интерфейсе, но не на другом.

Ищущие часто пишут «USB selective suspend random disconnect», потому что устройство выглядит отключённым, хотя реальное событие — сбой suspend/resume.

Resume vs пере-нумерация

После сна есть два очень разных исхода:

  • Resume: устройство продолжает с существующей конфигурацией.
  • Пере-нумерация: хост делает reset и перечисляет устройство заново.

Пере-нумерация может быть допустима после физического отключения, но подозрительна после обычного suspend. Она может сломать приложения, держащие хэндлы, имена serial-портов, HID-пути или сессии захвата камеры.

Bus Scope должен помочь определить, содержит ли трасса нормальный resume-трафик или новую последовательность перечисления с GET_DESCRIPTOR, SET_ADDRESS и SET_CONFIGURATION.

Пропущенные wake-события

Иногда устройство видит внешнее событие, а хост не просыпается. Причины:

  • Remote wakeup не заявлен.
  • Remote wakeup не включён хостом.
  • Устройство шлёт resume слишком рано.
  • Устройство шлёт resume слишком поздно.
  • Концентратор блокирует или неверно обрабатывает wake-сигнализацию.
  • BIOS или ОС отключили порт по политике wake.
  • Прошивка устройства входит в более глубокий сон, чем ожидалось.
  • Событие происходит до завершения suspend.

Пакетные данные не заменяют ОС-политику питания, но сужают вопрос. Было ли у устройства разрешение будить хост, и пыталось ли оно это сделать?

Немедленное пробуждение после suspend

Обратная проблема тоже частая: система уходит в suspend и сразу просыпается. USB-устройства могут вызвать это из-за устаревшего ввода, шумного состояния interrupt, багов debounce или прошивки, которая трактует suspend как новое событие.

Что собрать:

  • Последний interrupt-репорт до suspend.
  • Включил ли хост wake.
  • Тайминг между suspend и resume.
  • Класс устройства и интерфейс.
  • Были ли в той же конечной точке ожидающие данные.
  • Повторяется ли событие при каждой попытке suspend.

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

Чек-лист отладки

Используйте такой процесс:

  1. Захватите перечисление с момента подключения.
  2. Подтвердите поддержку remote wakeup в дескрипторах.
  3. Проверьте, включил ли хост remote wakeup.
  4. Зафиксируйте период простоя до suspend.
  5. Определите тайминг suspend.
  6. Ищите resume-сигнализацию или resume-трафик хоста.
  7. Отделите resume от полной пере-нумерации.
  8. Проверьте поведение конечных точек после resume.
  9. Сравните то же устройство на прямом порту и через концентратор.
  10. Сохраните пакеты и до, и после suspend.

Итоговый диагноз

Баги USB remote wakeup и suspend/resume — проблемы протокола power-state. Полезные доказательства — capability дескриптора, выбор фичи хостом, тайминг suspend, resume-сигнализация, восстановление конечной точки и то, перечислил ли хост устройство заново или возобновил.

Bus Scope помогает сделать эти доказательства видимыми, чтобы «USB wake not working» стал конкретным диагнозом, а не петлёй обвинений драйвера.

<!-- bus-scope-localized-transaction-foundation-v1:start -->

Проверка USB-контракта для «Отладка USB remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управление питанием и пропущенные wake-события»

Краткий ответ: 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 remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управление питанием и пропущенные wake-события»: Как отлаживать USB remote wakeup, сбои suspend/resume, отключения из-за selective suspend, пропущенные wake-события, баги управления питанием и resume-сигнализацию через USB-захваты. Считайте это проверяемым результатом, а не обещанием для любого входа, устройства, проекта или окружения. Полный результат фиксирует исходное состояние, точное действие, видимый выход и условие, подтверждающее завершение задачи в Bus Scope.

Порядок работы от доказательств

Начните с небольшого повторяемого случая до изменения полного проекта. Запишите версию приложения, систему, идентификатор входа или устройства, важные настройки и ожидаемый результат. Выполните одно осознанное действие, сохраните первый неожиданный переход и сравните с исправным случаем, если он есть. Одновременная смена нескольких параметров скрывает условие, создавшее или устранившее проблему.

Контрольная точка 1: Отладка USB remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управл

Закрывайте «Отладка USB remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управление питанием и пропущенные wake-события» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.

Контрольная точка 2: Как отлаживать USB remote wakeup, сбои suspend/resume, отключения из-за selective suspend,

Для «Как отлаживать USB remote wakeup, сбои suspend/resume, отключения из-за selective suspend, пропущенные wake-события, баги управления питанием и resume» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.

Контрольная точка 3: Что значит remote wakeup

Закрывайте «Что значит remote wakeup» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.

Контрольная точка 4: Типичные симптомы

Для «Типичные симптомы» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.

Контрольная точка 5: Доказательства дескрипторов и фич

Закрывайте «Доказательства дескрипторов и фич» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.

Контрольная точка 6: Selective suspend

Для «Selective suspend» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.

Контрольная точка 7: Resume vs пере-нумерация

Закрывайте «Resume vs пере-нумерация» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.

Контрольная точка 8: Пропущенные wake-события

Для «Пропущенные wake-события» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.

Контрольная точка 9: Немедленное пробуждение после suspend

Закрывайте «Немедленное пробуждение после suspend» только когда сохраненный, экспортированный или повторно открытый результат соответствует наблюдению. Временный отклик интерфейса полезен, но долговечное доказательство сильнее. Запишите оставшиеся ограничения.

Контрольная точка 10: Чек-лист отладки

Для «Чек-лист отладки» отделите решение продукта от границы системы, оборудования, исходного файла, прав или процесса. Установите, какой слой дал доказательство, прежде чем назначать причину. Так соседний симптом не станет якобы доказанной первопричиной.

Матрица приемки

Точка Сохраняемое доказательство Критерий успеха
Отладка USB remote wakeup и suspend/resume: selective suspend, resume-сигнализация, управление питанием и пропущенные wa Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат
Как отлаживать USB remote wakeup, сбои suspend/resume, отключения из-за selective suspend, пропущенные wake-события, баг Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат
Что значит remote wakeup Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат
Типичные симптомы Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат
Доказательства дескрипторов и фич Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат
Selective suspend Исходное состояние, одно действие и результат Второй оператор воспроизводит заявленный результат

Изоляция, восстановление и передача

Остановитесь на первой неуспешной границе. Сохраните источник, проект, сеанс или захват, сделайте копию перед разрушающим редактированием и меняйте одну переменную за опыт. Повтор широкого процесса после нескольких изменений может дать иной результат без объяснения причины.

Отличайте отсутствие доказательств от доказательства отсутствия. Пустой экран может означать неверный вход, область, фильтр, права, устройство, период или состояние проекта. Подтвердите получение или импорт до толкования decoder, редактора, отчета или экспорта.

Перед передачей повторно откройте артефакт и проверьте начало, точку решения и конец. Запишите версию, платформу, конфигурацию, ожидание, наблюдение и минимальное воспроизведение. Удалите или скройте чувствительные данные и проверьте полномочия получателя.

Вопросы и ответы

Как надежнее всего начать?

Возьмите минимальный репрезентативный случай, запишите ожидаемый результат и меняйте одну переменную. Подтвердите базовый путь до добавления фильтров, эффектов, правок, автоматизации или большого источника.

Какие доказательства сохранять?

Сохраните идентификатор входа, версию, платформу, настройки, точное действие, первый неожиданный переход и конечный выход. Закройте и повторно откройте проект, сеанс, отчет или экспорт.

Когда повторять процедуру?

После значимого изменения приложения, системы, драйвера, прошивки, модели, источника или процесса. Сохраните предыдущий принятый случай как неизменную основу сравнения.

Когда результат готов к передаче?

Когда другой уполномоченный человек определяет вход, повторяет действие, видит тот же результат, понимает ограничения и открывает артефакт без недокументированного локального состояния.

Связанные руководства

Эти страницы на том же языке описывают соседние этапы, не меняя канонического владельца темы:

<!-- multilingual-blog-closeout:end -->