Перейти к содержанию

Приостановка USB (suspend)

Когда компьютер засыпает или хост решает, что устройство пока не нужно, он перестаёт посылать по шине пакеты. Устройство USB, которое 3 мс не видит активности, обязано уйти в приостановку и потреблять от VBUS не больше нескольких миллиампер.

Обновлено Редакция GAW

Приостановка USB (suspend) — состояние, в которое обязано переходить любое устройство USB, когда на шине нет активности. По разд. 7.1.7.6 спецификации USB 2.0, переход начинается после более 3 мс непрерывного состояния Idle на восходящем порту, а не позже чем через 10 мс тишины устройство должно потреблять от VBUS только ток приостановки. Поддержка приостановки обязательна для всех устройств; устройство с питанием от шины по разд. 7.2.1 должно обнаружить отсутствие активности и снизить потребление от VBUS.

Что не даёт устройству уснуть

Пока хост работает, он начинает каждый кадр длительностью 1,000 мс, а у High Speed — каждый микрокадр 125 мкс (разд. 7.1.12), пакетом SOF, даже если данных для устройства нет. Этого хватает, чтобы устройства Full и High Speed не уходили в приостановку. Устройства Low Speed пакетов SOF не видят, для них хаб раз в кадр выдаёт короткий сигнал keep-alive. Когда хост хочет усыпить шину, он прекращает передачу (глобальная приостановка) или командой SetPortFeature(PORT_SUSPEND) выключает отдельный порт хаба (выборочная).

Ток приостановки

УстройствоОсновной текст USB 2.0С поправкой Suspend Current
Маломощное или ещё не настроенное500 мкА2,5 мА
Мощное с разрешённым remote wakeup2,5 мА2,5 мА
Настроенный хаб с питанием от шины2,5 мА12,5 мА

Поправка (ECN) прямо указывает читать прежний предел 500 мкА как 2,5 мА. Ток считается средним за любой интервал 1,0 с: короткий всплеск разрешён, но не выше выделенных устройству 100 или 500 мА и с фронтом не круче 100 мА/мкс (разд. 7.2.3). В ток приостановки входит и ток через подтягивающий резистор: его в приостановке оставляют включённым, иначе хаб решит, что устройство отключили.

Для микроконтроллера это значит: по прерыванию «suspend» от контроллера USB прошивка выключает всё, что питается от VBUS, — светодиоды, датчики, преобразователи — и переводит ядро в режим сна. 2,5 мА — это сумма по всему устройству, включая стабилизатор и подтяжку.

Пробуждение (resume)

  • Со стороны хоста. Хост выдаёт сигнал resume не меньше 20 мс (TDRSMDN), а затем не позже чем через 3 мс начинает передавать SOF, чтобы устройства не уснули снова. 10 мс после пробуждения (TRSMRCY) хост к устройствам не обращается (разд. 7.1.7.7).
  • Со стороны устройства (remote wakeup). Устройство, которое объявило эту способность битом D5 поля bmAttributes дескриптора конфигурации и получило разрешение хоста, может разбудить шину само — но не раньше чем через 5 мс тишины (TWTRSM). Оно держит resume от 1 до 15 мс (TDRSMUP), хаб в течение 1 мс подхватывает сигнал и продлевает его до 20 мс.

Устройство High Speed при приостановке временно переходит на сигнализацию Full Speed, но запоминает скорость и после resume возвращается к 480 Мбит/с без сброса. Подробнее о скоростях, токах и питании — в статье об USB.

Частые вопросы

Когда устройство USB уходит в приостановку?

По разд. 7.1.7.6 спецификации USB 2.0 — после более 3 мс непрерывной тишины на шине. Не позже чем через 10 мс тишины оно уже должно потреблять только ток приостановки. Пока хост работает, он раз в миллисекунду посылает пакет SOF, и устройства Full и High Speed не засыпают; у Low Speed эту роль играет сигнал keep-alive.

Сколько тока можно брать в режиме приостановки?

Не больше 2,5 мА в среднем за секунду — так требует поправка Suspend Current Limit Changes для всех устройств, кроме настроенных хабов с питанием от шины, которым разрешено 12,5 мА. В основном тексте USB 2.0 маломощным устройствам разрешалось лишь 500 мкА. В этот ток входит и ток через подтягивающий резистор линии данных.

Что такое remote wakeup?

Способность устройства самому разбудить хост — например, клавиатуры по нажатию клавиши. Устройство объявляет её битом D5 поля bmAttributes дескриптора конфигурации, а хост разрешает перед приостановкой. Будить шину можно только после 5 мс тишины, сигнал resume устройство держит от 1 до 15 мс, после чего его подхватывает и продлевает до 20 мс хаб или хост.

Источники

  1. USB Implementers Forum. Universal Serial Bus Specification, Revision 2.0 (April 27, 2000) — разд. 7.1.7.6: все устройства обязаны поддерживать приостановку; переход начинается после более 3,0 мс непрерывного состояния Idle, не позже 10 мс бездействия устройство должно потреблять только ток приостановки; пакет SOF раз в кадр не даёт Full/High Speed уходить в приостановку, Low Speed — keep-alive; в приостановке подтяжка D+ или D− остаётся под питанием; устройство High Speed переходит в конфигурацию Full Speed не позже 3,125 мс; разд. 7.1.7.6.1–2: глобальная и выборочная приостановка (SetPortFeature(PORT_SUSPEND)); разд. 7.1.7.7: хост держит сигнал resume не меньше 20 мс (TDRSMDN), затем в течение 3 мс начинает передачу; устройство с remote wakeup может будить шину только после 5 мс тишины (TWTRSM) и держит resume от 1 до 15 мс (TDRSMUP); хаб ретранслирует resume за 1 мс; восстановление 10 мс (TRSMRCY); разд. 7.1.12: кадр 1,000 мс, микрокадр High Speed 125 мкс; разд. 7.2.3: всплеск тока в приостановке не выше выделенных 100 или 500 мА, усреднение за 1,0 с, фронт не круче 100 мА/мкс, ток через подтяжки входит в ток приостановки; устройство с remote wakeup должно начать resume в течение 10 мс после того, как стало брать рабочий ток; табл. 9-10: бит D5 bmAttributes — поддержка Remote Wakeup
  2. USB Implementers Forum. Engineering Change Notice «Suspend Current Limit Changes» to USB 2.0 — предел тока приостановки поднят до 2,5 мА для всех устройств, кроме InterChip USB (150 мкА); нет разницы между маломощными и мощными устройствами и между устройствами с разрешённым remote wakeup и без; ссылки на прежний предел 500 мкА читать как 2,5 мА; настроенный хаб с питанием от шины — до 12,5 мА; ненастроенный — 2,5 мА; новые обозначения ICCS и ICCSHUB в табл. 7-7; правила усреднения разд. 7.2.3 не меняются

Нашли ошибку?