Управление питанием близкого взаимодействия (NFP) для современных резервных платформ
Устройство ближнего взаимодействия (NFP) — это радиопередатчик или приемник малой дальности, который позволяет пк с Windows связаться с другими компьютерами, оснащенными NFP.
Устройство NFP предоставляется операционной системе Windows через интерфейс GUID_DEVINTERFACE_NFP Plug and Play (PnP). Сторонний драйвер, предоставляемый поставщиком устройств NFP, отвечает за реализацию интерфейса GUI_DEVINTERFACE_NFP и управление питанием физического устройства NFP. Устройство NFP обычно подключается к контактам интерфейса I2C системы на микросхеме (SoC) или основного кремния.
Как правило, устройство NFP может переходить в режим с низким энергопотреблением (режим ожидания или режим отключения питания), если ни у каких программных клиентов нет публикаций или подписок близкого взаимодействия, либо все публикации и подписки отключены. С точки зрения разработки драйвера это условие возникает, когда на устройстве отсутствуют необработанные дескрипторы. Устройство NFP должно быть переведено в режим ожидания или режим отключения питания, если не открыты и не включены дескрипторы для устройства.
Когда платформа переходит в режим современного режима ожидания и дисплей отключен, устройство NFP должно перейти в режим ожидания или режим выключения питания. Если энергопотребление устройства NFP в режиме ожидания в среднем превышает один милливатт, устройство должно перейти в режим отключения питания 0 Вт.
Драйвер устройства NFP не получает непосредственного уведомления, когда платформа входит в современный режим ожидания и выходит из нее. Вместо этого Windows оповещает драйвер косвенно, отключая дескриптора для драйвера при входе в современный режим ожидания и включив эти же дескрипторы при выходе из современного режима ожидания. После того как платформа перейдет в современный режим ожидания, Windows отправляет уведомление об отключении каждому открытому дескриптору, который еще не отключен. Когда платформа выходит из режима современного режима ожидания, Windows отправляет уведомление о включении на каждый дескриптор, который ранее был отключен. Открытый дескриптор, который уже был отключен до ввода современного режима ожидания, остается отключенным после выхода из режима современного режима ожидания.
Режимы управления питанием устройств
Начиная с Windows 8, устройство NFP для современной резервной платформы, как ожидается, будет иметь три режима питания — активный, бездействующий и резервный, а также режим отключения питания (в котором все входные данные питания для устройства NFP были отключены аппаратным механизмом, внешним по сравнению с устройством). Обратитесь к поставщику оборудования для устройства NFP для получения сведений о режимах управления питанием, поддерживаемых устройством.
В следующей таблице описаны режимы питания устройства NFP.
Режим питания устройства | Описание | Среднее энергопотребление | Задержка выхода из активной | Механизм перехода |
---|---|---|---|---|
Активен |
Устройство NFP активно взаимодействует с другим устройством NFP на соседнем компьютере. |
< 50 милливатт |
Н/Д |
Н/Д |
Бездействие |
Устройство NFP ждет еще один компьютер с NFP, чтобы прийти поблизости. Драйвер для устройства NFP имеет открытые публикации и подписки. |
< 5 милливатт |
< 10 миллисекунда (обычно) |
Автономное оборудование |
Ждущий режим |
На устройстве NFP применяется питание, но нет невыполненных публикаций или подписок (без открытых дескрипторов). |
< 1 милливатт (зависит от устройства) |
< 50 миллисекунда (обычно) |
Команда драйвера или закрепление GPIO из soC или core silicon. |
Выключение |
На устройстве NFP не применяется питание, так как платформа не включена или внешний объект отключил питание. |
0 Вт |
< 100 миллисекунда |
Внешняя сущность удаляет питание или применяет питание через встроенное ПО ACPI в ответ на D3 IRP. |
Примечание
- В предыдущей таблице термин "резервный " относится к режиму питания устройства, который отличается от современного режима ожидания, который является состоянием питания на уровне всей платформы.
- В предыдущей таблице термин D3 IRP относится к запросу IRP_MN_SET_POWER типа DevicePowerState.
Указанное энергопотребление устройства NFP в режиме ожидания зависит от номера части и производителя. Разработчики систем должны работать с поставщиком устройств, чтобы понять, сколько энергопотребления в режиме ожидания зависит от конкретного устройства. Если энергопотребление в режиме ожидания превышает один милливатт, устройство NFP должно быть подключено к переключаемой направляющей питания, чтобы устройство можно было перевести в режим отключения питания во время режима современного режима ожидания.
Механизм управления питанием программного обеспечения
Windows полагается на поставщика устройств NFP для предоставления стороннего драйвера, который управляет устройством NFP. Windows ожидает, что этот драйвер будет отслеживать текущее количество открытых дескрипторов для драйвера устройства NFP и состояние этих дескрипторов, чтобы определить, когда следует переводить устройство NFP в режим с низким энергопотреблением.
Мы рекомендуем разработчикам драйверов NFP использовать платформу User-Mode Driver Framework (UMDF) для разработки драйверов. UMDF включает ряд функций, которые упрощают разработку управления питанием во время выполнения устройства.
Поддержка D3
Разработчикам драйверов NFP рекомендуется переводить устройство NFP в состояние D3, когда все дескриптора устройства были закрыты или все открытые дескрипторы устройства получили уведомление об IOCTL_NFP_DISABLE . Все открытые дескрипторы получат уведомление о IOCTL_NFP_DISABLE после того, как платформа перейдет в современный режим ожидания и рабочий стол пользователя будет заблокирован.
Даже если устройство NFP может достичь энергопотребления менее одного милливатта в режиме простоя, переход на D3 по-прежнему рекомендуется, если все дескрипторы закрыты или получили уведомление о IOCTL_NFP_DISABLE . Переход на D3 позволяет уведомлять всех драйверов в стеке драйверов для устройства NFP о переходе оборудования в режим малой мощности. Кроме того, переход на D3 можно определить с помощью встроенных в Windows инструментов. Для наблюдения за этим переходом можно использовать набор средств для повышения производительности Windows и другие средства диагностики производительности. Эта встроенная поддержка диагностики снижает затраты системного интегратора на проверку того, что устройство NFP IOCTL_NFP_DISABLE правильно выполняет управление питанием.
Для некоторых автобусов устройства в шине должны перейти на D3, прежде чем контроллер шины сможет перейти в состояние низкого энергопотребления. Для устройства NFP, подключенного к I2C, отсутствует такая зависимость от того, что устройство NFP конечной точки входит в D3, чтобы контроллер шины I2C отключился.
Однако если современные резервные платформы в будущем будут использовать универсальную последовательную шину (USB) для подключения к устройствам NFP, устройство NFP должно иметь возможность войти в D3, чтобы контроллер узла USB мог отключать питание, а soC или основной кремний мог перейти в состояние простоя с низким энергопотреблением во время современного режима ожидания. Разработчикам драйверов устройств NFP рекомендуется перевести свои устройства на D3, когда они будут готовы перейти в режим низкого энергопотребления, независимо от базовой шины, чтобы позволить в будущем повторно использовать драйвер и упростить управление питанием диагностика.
Если для перехода в режим ожидания устройство NFP требует отправки команды от драйвера устройства NFP через шину связи, эта команда должна быть отправлена в рамках перехода на D3 в драйвере.
Если для устройства NFP требуется контакт GPIO из SoC для перехода в режим ожидания питания, требуется переход на D3. Инициирование перехода на D3 уведомляет драйвер Windows ACPI Acpi.sys, который выполняет метод управления _PS3, реализованный на устройстве NFP в пространстве имен ACPI. Метод _PS3 может переключать линию GPIO через область операции GPIO. Чтобы сделать драйвер устройства NFP более портативным, все задержки для конкретной платформы или другие ограничения времени должны быть реализованы в встроенном ПО платформы, чтобы драйвер устройства NFP не нужно настраивать для конкретной платформы.
Чтобы включить переход устройства NFP на D3, когда устройство бездействует и платформа находится в состоянии питания системы S0 (рабочее), драйвер UMDF вызывает метод IWDFDevice2::AssignS0IdleSettingsEx. В этом вызове драйвер предоставляет указатель на структуру WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS в качестве входного параметра и задает элементу DxState этой структуры значение PowerDeviceD3.
Если энергопотребление устройства NFP в режиме ожидания превышает один милливатт, устройство должно быть помещено в режим отключения питания, если все дескрипторы закрыты или все дескрипторы были отправлены IOCTL_NFP_DISABLE уведомления. Чтобы базовое встроенное ПО и оборудование отключали питание от устройства NFP, устройство должно уже войти в D3 (то есть D3hot), а драйвер устройства NFP должен ранее включить переход на D3cold. Включение D3cold подразумевает, что драйвер для устройства NFP сохраняет аппаратное состояние устройства перед переходом на D3, чтобы можно было отключить все питание от устройства. Устройство должно быть в состоянии возобновить нормальную работу позже после включения устройства (то есть устройство выходит из D3cold), а драйвер восстанавливает состояние оборудования устройства. Чтобы включить D3cold, драйвер UMDF вызывает метод IWDFDevice2::AssignS0IdleSettingsEx. В этом вызове драйвер предоставляет указатель на структуру WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS и устанавливает для элемента ExcludeD3Cold этой структуры значение WdfFalse.
Дополнительные сведения см. в разделе Поддержка D3cold в драйвере.
Радио-менеджер
Если устройство NFP использует радиочастотный механизм (радио) для обнаружения событий близкого взаимодействия, поставщик устройств NFP должен предоставить диспетчер радиосвязи в дополнение к драйверу устройства NFP. Диспетчер радиосвязи — это БИБЛИОТЕКА COM, которая реализует API пользовательского интерфейса управления радиоуправительной связью и взаимодействует в частном порядке с драйвером устройства NFP. Когда пользователь изменяет состояние включения и выключения радиоустройства NFP в приложении "Параметры Windows", драйвер устройства NFP получает уведомление об изменении через диспетчер радиосвязи. Разработчик драйвера должен определить частный интерфейс для передачи состояния управления радиосвязи между COM-объектом диспетчера радио и драйвером устройства NFP. Когда драйвер устройства NFP получает от объекта диспетчера радиосвязи команду, чтобы установить для устройства состояние включения и выключения радиосвязи, драйвер должен сохранить состояние оборудования устройства, отключить все компоненты радиочастотной рч-связи, связанные с устройством NFP, и перевести устройство на D3. Обратите внимание, что количество и состояние всех дескрипторов из интерфейса GUID_DEVINTERFACE_NFP, которые уже открыты при входе устройства в D3, должны сохраняться, пока устройство находится в D3.
После того как диспетчер радиосвязи указывает, что компоненты rf на устройстве NFP должны быть включены и включены, устройство NFP должно немедленно перейти обратно в D0, когда происходит одно из следующих действий:
- Клиент открывает новый дескриптор для драйвера устройства NFP.
- Любой уже открытый дескриптор получает уведомление о IOCTL_NFP_ENABLE .
Уведомление IOCTL_NFP_ENABLE будет отправлено Windows драйверу устройства NFP, когда платформа выходит из режима ожидания и пользователь вводит свой пароль.
Если диспетчер радиопередач указал, что компоненты rf на устройстве NFP должны быть отключены и выключены, устройство NFP должно оставаться в D3, даже если открыт новый дескриптор или включен существующий дескриптор, пока диспетчер радиопередач не укажет, что компоненты rf должны быть включены и включены.
Если устройству NFP требуется отправить команду для возврата устройства NFP в режим простоя, эта команда может быть отправлена через шину связи (обычно I2C) и должна выполняться в рамках завершения перехода на D0 в драйвере устройства NFP.
Переход устройства NFP на D0 позволяет выполнять метод управления _PS0 под устройством в пространстве имен ACPI. При необходимости этот метод управления может переключить линию GPIO из SoC на устройство NFP, чтобы вернуть устройство в режим простоя.
Поддерживаемые конфигурации аппаратного питания
Устройство NFP должно потреблять в среднем не более одного милливатта энергии, пока аппаратная платформа находится в режиме современного режима ожидания. Если устройство потребляет не более одного милливатта питания в режиме ожидания, драйвер устройства NFP может поместить устройство в режим ожидания, если устройство не используется. В противном случае конструктор системы должен подключить устройство к выделенной направляющей питания, которую можно отключить, если устройство не используется.
Резервная мощность менее одного милливатта
Если устройство NFP потребляет менее одного милливатта питания в режиме ожидания, устройство NFP может быть помещено на любой сетевой направляющей системы и может совместно использовать этот рельс с любым количеством других устройств. Переход устройства в режим ожидания происходит в рамках перехода на D3.
Вход устройства NFP в резервный режим можно инициировать либо путем отправки команды через шину связи (обычно I2C), либо путем переключения линии SoC GPIO, которая направляется на устройство NFP.
Если устройство NFP требует переключения линии GPIO из SoC для выхода в режим ожидания, строка GPIO должна быть описана в области операций GPIO в пространстве имен ACPI. Системный интегратор должен реализовать методы _PS3 и _PS0 в устройстве NFP в пространстве имен ACPI. Реализация метода _PS3 должна переключить линию GPIO, чтобы переключить устройство NFP в режим ожидания. Реализация метода _PS0 должна переключить линию GPIO, чтобы переключить устройство NFP из режима ожидания в режим простоя. Для переключения этой строки могут применяться ограничения времени для конкретной платформы или устройства.
Как описано ранее, драйвер устройства NFP должен инициировать переход на D3, когда все дескрипторы закрыты или все дескрипторы получили уведомление IOCTL_NFP_DISABLE или диспетчер радиосвязи запросил отключение компонентов rf на устройстве NFP.
Резервная мощность составляет более одного милливатта
Если энергопотребление устройства NFP в режиме ожидания составляет более одного милливатта, устройство NFP должно быть размещено на выделенной направляющей питания, которую можно независимо включать и выключать под управлением GPIO из SoC. Если все дескрипторы закрыты или все дескрипторы получили уведомление о IOCTL_NFP_DISABLE или диспетчер радиосвязи запросил выключение компонентов радиочастотной связи, устройство NFP сначала переходит на D3, а затем переходит в режим отключения питания при выключении направляющей питания.
Переключаемая линия питания должна управляться линией GPIO из SoC или основного кремния. Строка GPIO должна быть описана как часть области операций GPIO в пространстве имен ACPI. Кроме того, пространство имен ACPI должно содержать ресурс Power Resource, описывающий переключаемую шину питания и реализующий методы управления _ON и _OFF. Методы управления _ON и _OFF переключают линию GPIO, описанную в области операций GPIO, чтобы включить и выключить шину питания. пакеты _PR3 и _PR0 должны размещаться под устройством NFP в пространстве имен ACPI и должны быть связаны с ресурсом Power Resource, описывающим шину питания.
Как описано ранее, драйвер устройства NFP должен включить D3cold. Кроме того, драйвер должен инициировать переход на D3, когда все дескрипторы закрыты, или все дескрипторы получили уведомление IOCTL_NFP_DISABLE или диспетчер радиосвязи запрашивает отключение компонентов RF. Когда драйвер ACPI получает D3 IRP, он выполняет метод _OFF в Power Resource, указанном пакетом _PR3. Этот метод переключит линию GPIO, которая управляет оборудованием переключения питания, чтобы отключать питание от устройства NFP.
Если диспетчер радиосвязи указал, что компоненты RF должны быть включены, драйвер устройства NFP должен выполнить переход на D0 при открытии нового дескриптора или получении существующего дескриптора уведомления о IOCTL_NFP_ENABLE . Когда драйвер ACPI получает D0 IRP ( запрос IRP_MN_SET_POWER типа DevicePowerState), он выполняет метод _ON в Power Resource, указанном пакетом _PR0. Этот метод переключит линию GPIO, которая управляет оборудованием для переключения питания, чтобы повторно применить питание к устройству NFP.
Проблемы пробуждения
Для устройства NFP нет проблем с пробуждением. Устройство NFP не может поддерживать пробуждение SoC, пока платформа находится в режиме современного режима ожидания.
Тестирование и проверка
Для разработчика системы крайне важно убедиться, что устройство NFP надежно переходит в режим ожидания или режим отключения питания при выключении дисплея в режиме современного режима ожидания. Решение для управления питанием для устройства NFP в значительной степени зависит от реализации стороннего драйвера. Поэтому системным интеграторам рекомендуется обсудить лучший метод тестирования и проверки функциональности устройства NFP с поставщиком устройств NFP.
Если драйвер устройства NFP инициирует переход на D3 при закрытии или отключении всех дескрипторов драйвера, для наблюдения за этим переходом можно использовать средство XPerf . Этот метод проверки аналогичен описанному в других местах для сенсорных контроллеров и устройств датчиков.
Если драйвер отправляет команды по шине связи для перевода устройства в режим ожидания и выхода из него, драйвер должен поддерживать трассировку событий, чтобы системный интегратор с легкостью проверял операции управления питанием. Инструментирование можно легко добавить в драйверы Windows с помощью трассировки событий Windows (ETW). Дополнительные сведения см. в статье Добавление трассировки событий в драйверы Kernel-Mode. Преимущество трассировки ETW заключается в том, что ее можно просмотреть с помощью набора средств windows Performance Toolkit, который включает XPerf.
Контрольный список управления питанием устройств NFP
Системные интеграторы и поставщики NFP должны ознакомиться с приведенным ниже контрольным списком, чтобы убедиться, что их система управления питанием совместима с Windows 8 и выше.
- Выберите устройство NFP с режимом ожидания, которое потребляет в среднем менее одного милливатта электроэнергии.
- Убедитесь, что драйвер устройства NFP инициирует переход на D3, когда все дескрипторы устройства закрыты или все открытые дескрипторы получили уведомление о IOCTL_NFP_DISABLE или диспетчер радиосвязи запрашивает отключение и выключение компонентов rf на устройстве NFP.
- Убедитесь, что драйвер устройства NFP инициирует переход на D0, если диспетчер радиосвязи указал, что компоненты rf должны быть включены и впоследствии первый дескриптор открывается на устройстве или первый открытый дескриптор получает уведомление о IOCTL_NFP_ENABLE.
- Если драйвер устройства NFP отправляет пользовательскую команду через шину связи, чтобы сообщить устройству NFP о переходе в режим ожидания, обратитесь к поставщику устройств NFP, чтобы определить оптимальный способ убедиться, что устройство NFP переходит в режим ожидания питания в ответ на эту команду.
- Если энергопотребление устройства NFP превышает один милливатт, убедитесь, что устройство размещено на переключаемой направляющей питания.
- Если устройство NFP расположено на переключаемой направляющей питания:
- Убедитесь, что устройство поддерживает полное отключение питания от устройства, если оно не используется, и что при восстановлении питания автоматически повторно включается и повторно инициализируется устройство.
- Убедитесь, что линия питания управляется линией GPIO из SoC или основного кремния.
- Сопоставьте строку GPIO с областью операций GPIO, реализованной в встроенном ПО ACPI системы.
- Предоставьте ресурс Power Resource для описания направляющей питания и включите в него методы управления _ON, _OFF и _STA.
- Укажите пакеты _PR0 и _PR3 на устройстве NFP в встроенном ПО ACPI системы и убедитесь, что они ссылаются на Power Resource.
- Если для устройства NFP требуется задержка включения питания, прежде чем драйвер сможет получить к нему доступ, закодируйте эту задержку в реализации метода управления _ON.
- Инициируйте несколько переходов в современный режим ожидания и выход из него, а затем нагрузочный тест работы устройства NFP при включении дисплея.