Приостановка 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 wakeup | 2,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 мс хаб или хост.
Источники
- 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
- 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 не меняются
Нашли ошибку?
Смотрите также
- USBСкорости, распиновка Type-A, Micro-B и Type-C, питание, CC, USB PD
- Питание от шины USBКлассы питания USB 2.0: сколько тока брать от VBUS и как это объявить
- VBUSЛиния 5 В в кабеле USB: допуски напряжения, ёмкость, просадка, контроль
- Дескриптор USBСтандартные структуры, которыми устройство описывает себя
- Режимы снаSleep mode: Idle, Power-down, пробуждение и ток