Поделиться через


Управление питанием датчиков

Мобильный компьютер обычно включает устройства датчиков, такие как датчик внешнего света (ALS), 3-D акселерометр, 3-D гирометр или 3-D магнитометр. Если устройство датчика не используется операционной системой или приложением, программное обеспечение управления питанием может переключить устройство в режим низкой мощности для снижения потребления энергии. На компьютере, поддерживающем современную модель резервной мощности, устройства датчиков, как ожидается, переключятся в режим низкой мощности вскоре после того, как компьютер входит в современный режим ожидания и остается в этом режиме, пока компьютер не выйдет из современного режима ожидания.

В этой статье объясняется, как реализовать управление питанием для устройств датчиков. Кроме того, в этой статье рассматривается управление питанием дополнительного микроконтроллера датчика (также называемого концентратором слияния датчика или MCU датчика) и агрегированными устройствами датчиков. (Например, устройство датчика компаса может быть реализовано путем агрегирования акселерометра, гирометра и магнитометра под контролем микроконтроллера датчика. Микроконтроллер предоставляет эти устройства датчика Windows в качестве одного логического устройства датчика.)

Датчики и микроконтроллер датчиков

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

Во время выполнения системы отдельные датчики могут быть отключены, если они не используются. Требования к использованию определенного устройства датчика передаются устройству и его драйверам через API датчика Windows. Если устройство датчика не используется операционной системой или приложениями, устройство может быть подключено драйвером датчика или встроенной встроенной системой, работающей на микроконтроллере датчика.

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

Когда расширение класса датчика запрашивает драйвер начать чтение примеров датчика, он вызывает метод обратного вызова драйвера датчика EvtSensorStart. Когда расширение класса датчика запрашивает драйвер прекратить чтение примеров датчика, он вызывает метод обратного вызова драйвера EvtSensorStop. Дополнительные сведения см. в разделе "Сведения о событиях драйвера датчика".

После того как компьютер входит в современный резервный режим, и все устройства датчика вступают в состояния низкой мощности, общее потребление электроэнергии всех системного оборудования датчика должно быть меньше одного милливатта. Устройства датчика и дополнительный микроконтроллер датчика могут ввести состояние ожидания с низкой мощностью, относящееся к оборудованию датчика. Кроме того, аппаратный рельс питания на устройствах датчиков и дополнительный микроконтроллер датчика можно отключить под контролем драйверов датчиков и (или) встроенного ПО ACPI системы.

Начиная с Windows 10 поддержка предоставляется для ограниченного набора аппаратных возможностей подключения датчика к основному кремнию или системе на микросхеме (SoC) на современной резервной платформе. В следующих разделах подробно описаны поддерживаемые конфигурации оборудования и программного обеспечения, а также их поведение управления питанием как во время современного резервного режима, так и при активном использовании платформы.

Режимы управления питанием

Windows ожидает, что каждое устройство датчика или микроконтроллер датчика имеет три режима питания устройства — активный, бездействующий и резервный режим, а также дополнительный, нулевой ватт, режим удаления питания. В следующей таблице описаны режимы питания для устройства датчика и дополнительного микроконтроллера датчика. Таблица отличается от режима простоя, в котором используется оборудование датчика, но в настоящее время неактивно и режим простоя, в котором оборудование датчика не используется.

Режим Description Среднее потребление энергии Задержка выхода из активной Механизм перехода

Активно

Устройство датчика и (или) микроконтроллер датчика активно предоставляет или обрабатывает изменения среды.

< 100 милливатт

Неприменимо

Неприменимо

Бездействия (используется)

Устройство датчика и (или) микроконтроллер датчика используется одним или несколькими приложениями и ожидает предоставления следующего набора данных датчика основному процессору.

< 50 милливатт

Датчик, зависящий от датчика

Автономное оборудование

Бездействия (не используется)

Устройство датчика и (или) микроконтроллер датчика не используется ни в одном приложении. Данные калибровки для датчика или микроконтроллера датчика поддерживаются.

< 5 милливатт

Датчик, зависящий от датчика

Команды устройства пользовательского интерфейса (HID) или сообщения Sensor Framework, описывающие текущее использование устройств датчиков.

Режим ожидания

Устройство датчика и (или) микроконтроллер датчика не используется ни в одном приложении. Данные калибровки для датчика или микроконтроллера датчика поддерживаются. Микроконтроллер датчика и (или) датчика не принимает никаких дальнейших действий, пока не запрашивается программным обеспечением, работающим на основном процессоре.

< 1 милливатт (для всех системных датчиков)

< 10 миллисекунда

Несколько вариантов:

  • Команда HIDI2C SET_POWER(Спящий режим)
  • Частное сообщение сторонних драйверов
  • Линия GPIO из SoC в оборудование датчика

Power-removed

Питание удаляется из устройства датчика и (или) микроконтроллера датчика, и все аппаратные контексты теряются.

0 милливатт

< 100 миллисекунда

Внешняя сущность удаляет питание или применяет питание через встроенное ПО ACPI в ответ на D3 power IRP.

Примечание.

В предыдущей таблице термин "Резервный" относится к режиму питания устройства, отличному от современного резервного режима, который является состоянием питания на уровне платформы.

Механизмы управления питанием программного обеспечения

Управление питанием во время выполнения для устройств датчиков и микроконтроллер датчика преобладает на основе того, используются ли они. Как правило, драйвер датчика и оборудование, как ожидается, помещают датчик в режим питания бездействия, если он не используется операционной системой или приложением. Платформа датчика Windows предоставляет сведения о количестве клиентов приложения или операционной системы, подключенных к заданному датчику, а также о требованиях к рабочему циклу датчика или скорости данных. Драйвер датчика и (или) оборудование использует эти сведения для плавного перехода устройства датчика в режим простоя питания во время выполнения системы и включения дисплея.

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

Выбор программного механизма управления питанием для устройств датчиков и дополнительного микроконтроллера датчика зависит от того, как оборудование датчика предоставляется драйвером устройства Windows и как оборудование датчика физически подключено к SoC или основному кремнию. Windows поддерживает два метода предоставления и подключения устройств датчиков. Один из методов использует встроенный драйвер класса HID датчика через подключение I2C, где встроенный драйвер HIDI2C передает данные HID через подключение I2C. Для другого требуется сторонний драйвер, реализующий интерфейс драйвера универсального датчика и вызывающий методы в таблице SensorcxFunctions.

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

параметр Подключение ion Подключение шины Требуется драйвер датчика Поставщик драйверов Комментарии

HIDI2C

Оборудование датчика подключается непосредственно к SoC или основному кремнию через I2C.

Драйвер класса HID датчика + драйвер класса HID over-I2C

Microsoft. Компонент папки "Входящие" начиная с Windows 8.

Плюсы / Минусы

Сторонний драйвер датчика

Оборудование датчика подключается непосредственно к SoC или основному кремнию через I2C или UART.

Сторонний драйвер, реализующий SENSOR_CONTROLLER_CONFIG

Поставщик устройства датчика.

Плюсы / Минусы

HIDI2C

Для параметра HIDI2C необязательный микроконтроллер датчика физически подключен к SoC или основному кремнию через шину I2C. Микроконтроллер предоставляет несколько коллекций HID верхнего уровня, по одному для каждого устройства логического датчика. Например, датчик компаса можно предоставлять через HID как логическое устройство датчика, которое является агрегированием акселерометра, гирометра и датчиков магнитометра за микроконтроллером датчика. Это проще всего реализовать с точки зрения подключения и программного обеспечения, так как он не требует стороннего программного обеспечения для устройства датчика.

Стек Windows HIDI2C аналогичен стеку сенсорных контроллеров и цифризаторов пера, что поддерживает два механизма управления питанием программного обеспечения: команду HID в полосе и переход во время выполнения в состояние D3.

Команда HID в полосе

SET_POWER(Спящий режим) Отправляется на устройство после отключения дисплея, а платформа входит в современный резервный режим. Эта команда может перенести устройство в режим резервной питания.

SET_POWER(Вкл.) Отправляется на устройство, когда платформа существует современная резервная версия, и дисплей снова включен.

Переход во время выполнения в состояние D3 для стека устройств датчика HID

D3 IRP A IRP_MJ_POWER запрос, который отправляется в стек драйверов для устройства сразу после команды SET_POWER(Спящий режим). Это указывает устройству ввести состояние питания устройства D3. В рамках перехода на D3 встроенное ПО системы ACPI может запускать методы управления для переключения устройства в режим ожидания или питания.

D0 IRP A IRP_MJ_POWER запрос, отправляемый в стек драйверов для устройства, когда платформа существует современная резервная, и дисплей включен. Это указывает устройству ввести состояние питания устройства D0. При необходимости встроенное ПО системы ACPI может запускать методы управления, чтобы переключить устройство обратно в режим простоя (не используется).

Сторонний драйвер датчика

Для стороннего драйвера датчика микроконтроллер датчика физически подключен к основному кремнию через шину I2C или UART.

Поставщик устройства датчика должен предоставить драйвер среда выполнения платформы драйвера режима пользователя (UMDF), реализующий интерфейс SENSOR_CONTROLLER_CONFIG. Драйвер UMDF взаимодействует с устройством датчика через I2C или UART. Это можно реализовать несколько раз— один раз для каждого датчика, который находится за микроконтроллером датчика. Сторонний драйвер датчика отвечает за создание и координацию всего управления питанием.

Предполагается, что сторонние драйверы датчиков будут созданы с помощью Платформы драйверов Windows (WDF) и основаны на примере драйвера Adxl354acc . Драйвер должен использовать управляемую питанием очередь и настроить состояние простоя D3 с помощью вызова метода IWDFDevice3::AssignS0Idle Параметры Ex. Драйвер должен использовать методы IWDFDevice2::StopIdle и IWDFDevice2::ResumeIdle, чтобы указать WDF, когда устройство неактивно или активно. Драйвер также должен включить D3cold, задав элемент ExcludeD3Cold структуры WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS значение WdfFalse. Включение D3cold позволяет платформе удалять питание с устройства датчика после его простоя и входить в состояние D3.

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

Ввод современных требований к резервному режиму

Требования стороннего драйвера датчика для управления питанием являются функцией резервного потребления электроэнергии оборудования датчика.

Сторонние драйверы датчиков должны инициировать переход на D3, когда устройство датчика готово к входу в режим ожидания или питания, даже если устройство может использовать механизм связи в полосе для перехода в режим питания, который потребляет меньше милливатта. Причиной этого требования является то, что многие водители шины в Windows отслеживают состояние питания устройств конечной точки и отключают питание только при отключении всех устройств конечных точек. Для некоторых конструкций SoC и автобусов подключений (особенно универсальная последовательная шина (USB)) все конечные точки и контроллер узла должны находиться в D3 для soC, чтобы ввести наименьшее состояние питания во время современного ожидания. Неспособность ввести наименьшее состояние питания может легко предотвратить соответствие системы современным требованиям к резервному режиму для заряда батареи.

Если оборудование датчика имеет резервное потребление энергии менее одного милливатта для всего управляемого оборудования датчика, драйвер датчика должен автоматически переключать устройство в режим ожидания, если датчики (или все датчики на микроконтроллере) больше не используются.

Если оборудование датчика имеет резервное потребление энергии больше одного милливатта, драйвер датчика должен выполнить переход D3 и разрешить методам управления ACPI удалить мощность с устройства датчика. Драйвер датчика должен сохранить все необходимые состояния устройства датчика, чтобы питание можно было удалить с устройства во время D3. Поставщик оборудования датчика должен тесно сотрудничать с системным интегратором, чтобы гарантировать, что оборудование датчика и драйвер выполняют переход D3 надежно и быстро.

Важно!

Драйвер должен сохранить весь контекст устройства датчика перед вводом D3 и восстановить весь контекст устройства датчика после ввода устройства D0.

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

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

Примечание.

Если линия GPIO используется для переключения устройства в режим ожидания, драйвер датчика должен переключить стек драйверов на D3 и разрешить методы управления ACPI для устройства (например, _PS3), чтобы установить строку GPIO в состояние, необходимое для размещения оборудования в режиме ожидания. Эта схема позволяет драйверу датчика записываться в не зависящем от платформы способе— конкретная строка GPIO, требования к времени и другие сведения о платформе кодируются в встроенном ПО ACPI, предоставленном системным интегратором, а не в драйвере для конкретного устройства.

Выход из современных резервных требований

Когда платформа выходит из современного режима ожидания, драйвер датчика должен переключить оборудование датчика обратно в режим простоя (не используется). По мере возобновления работы системных служб Windows запрашивает использование датчиков, таких как поворот и внешний свет, необходимые для выполнения системных функций. По мере возобновления работы приложений они могут запрашивать сведения о датчике. Если оборудованию датчика требуется сообщение в полосе для возврата устройства в режим простоя, драйвер устройства должен отправить это сообщение сразу после отправки первого запроса на получение сведений об датчике. Если оборудованию датчика требуется линия GPIO, чтобы сигнализировать устройству вернуться в состояние простоя, драйвер должен использовать эту строку GPIO, чтобы выполнить переход на D0 сразу после первого запроса данных датчика. В этом случае методы управления ACPI (например, _PS0) должны переключать строку GPIO, чтобы инициировать переход. Наконец, если оборудование датчика ранее потребовало перехода в режим удаления питания, так как потребление электроэнергии в режиме ожидания превышает один милливатт, драйвер датчика должен выполнить переход на D0 и разрешить методам управления ACPI восстановить мощность на устройстве.

Поддерживаемые конфигурации питания оборудования

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

Резервная мощность < один милливатт

Если потребление электроэнергии устройства датчика в режиме резервного питания не превышает один милливатт, конструктор платформы не требуется для подключения оборудования датчика к железнодорожной линии питания, которая может быть включена и отключена методами управления ACPI. Один из следующих механизмов используется для переключения датчика в режим резервной питания:

  • Команда HID SET_POWER(Спящий режим).
  • Линия GPIO из SoC.
  • Собственная команда, отправленная на оборудование датчика сторонним драйвером датчика.

Если платформа включает микроконтроллер датчика, микросхема микроконтроллера может содержать один или несколько интегрированных устройств датчика или подключиться к одному или нескольким внешним устройствам датчика. В любом случае эти устройства датчиков находятся в программной точке зрения, скрыты за микроконтроллером и невидимыми для Windows. Если микроконтроллер датчика и его агрегатные устройства датчика вместе используют менее одного милливатта, когда микроконтроллер и оборудование датчика находятся в режиме ожидания питания, конструктор платформы не требуется для подключения микроконтроллера или датчика оборудования к электронаправке, которая может быть включена и отключена методами управления ACPI. Микроконтроллер датчика использует один из следующих механизмов для перехода и всех датчиков, которыми он управляет и из резервного режима:

  • Команда HIDI2C SET_POWER (или аналогичная), отправленная через шину связи.
  • Линия GPIO из SoC.

Если датчику требуется линия GPIO из SoC для запуска переходов в режим ожидания и из режима ожидания, встроенное ПО платформы должно предоставить как объект _PS3, так и объект _PS0 в пространстве имен ACPI под аппаратным устройством датчика. Встроенное ПО ACPI также должно включать область операции GPIO, описывающую линию GPIO из SoC в оборудование датчика. Метод управления _PS3 переключает строку GPIO для переключения устройства в режим ожидания, а метод управления _PS0 переключает линию GPIO для переключения оборудования датчика в режим простоя.

На следующей блок-схеме показаны параметры управления питанием для автономного датчика, который потребляет менее одного милливатта в режиме резервного питания.

Один из вариантов — использовать стек Windows HIDI2C, как показано в левой части предыдущей схемы. В этом случае переход датчика на резервный режим питания можно инициировать либо командой HID в диапазоне SET_POWER(спящий режим), либо С помощью D3 IRP, обрабатывающей драйвер ACPI, выполнив метод управления _PS3 для датчика.

Другой вариант — использовать сторонний драйвер датчика, как показано в правой части предыдущей схемы. Сторонний драйвер датчика может инициировать переход в резервный режим питания с помощью собственной команды в полосе или путем отправки D3 IRP, который драйвер ACPI обрабатывает, выполнив метод управления _PS3 для датчика.

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

Резервная мощность > один милливатт

Если платформа включает оборудование датчика и (или) микроконтроллер датчика, который вместе потребляет более одного милливатта в режиме резервной мощности, оборудование датчика и микроконтроллер должны быть перенесены в режим удаления питания, когда система находится в современном режиме ожидания. В этой конфигурации датчик, необязательный микроконтроллер датчика и все датчики, расположенные за микроконтроллером, должны быть помещены на один рельс питания, который включен и выключен под контролем линии GPIO из SoC.

Для этой конфигурации конструктор платформы должен разместить все оборудование датчика на переключаемой линии питания, контролируемой линией GPIO из SoC. Если для оборудования датчика требуется несколько входных напряжения, можно использовать несколько коммутаторов, контролируемых одной линией GPIO. Помимо переключаемой линии питания, встроенное ПО ACPI платформы должно определять Power Resource в пространстве имен. Этот power Resource описывает оборудование датчика и включает _ON и _OFF методы, которые отвечают за использование области операций GPIO для переключения строки GPIO из SoC.

Встроенное ПО платформы должно содержать ссылку на Power Resource под каждым устройством датчика в пространстве имен ACPI на переключаемой линии питания, включая _PR0 и объекты _PR3.

На следующей схеме блоков показаны параметры управления питанием для оборудования датчика и (или) микроконтроллера датчика, которые вместе используют более одного милливатта в режиме резервного питания. Два варианта — использовать стек Windows HIDI2C, как показано слева от схемы, или использовать сторонний драйвер датчика, как показано справа.

В конфигурации, которая использует встроенный стек драйверов HIDI2C, как показано слева от предыдущей схемы, драйвер HIDI2C инициирует переход D3 после отключения дисплея, а платформа входит в современный резервный режим. Когда D3 IRP проходит через драйвер ACPI, объект _PR3 будет вычисляться, и Windows отключит указанный ресурс Power Resource, выполнив метод _OFF. Если несколько датчиков совместно используют Power Resource, Windows автоматически ссылается на все датчики и запускает метод _OFF только после ввода всех датчиков D3.

Если оборудование датчика использует сторонний драйвер датчика, как показано на правой части предыдущей схемы, поток управления совпадает с предыдущим, за исключением того, что драйвер датчика отвечает за инициирование перехода на D3.

После возобновления работы платформы из современного резервного режима и приложения или операционной системы запрашивает использование датчика, драйвер переходит в D0. D0 IRP проходит через драйвер ACPI и объект _PR0 вычисляется таким образом, чтобы драйвер ACPI выполнял метод _ON для связанного ресурса Power Resource. Метод _ON переключает линию GPIO, чтобы включить переключимую линию питания. Если система использует сторонний драйвер датчика, драйвер должен запросить D0 IRP и инициировать переход на D0 сразу после запроса данных датчика операционной системой или приложением.

Проблемы пробуждения

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

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

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

Подключенный датчик HIDI2C

Если система использует стек Windows HIDI2C, системный интегратор должен обратиться к поставщику драйвера датчика для получения сведений о том, как лучше убедиться, что драйвер правильно выполняет управление питанием. Поставщики драйверов датчиков рекомендуется использовать трассировку событий для Windows (ETW) для всех решений по управлению питанием в драйвере устройства, а также предоставить пример документации для системных интеграторов, чтобы описать, как проверить правильную операцию управления питанием с помощью событий ETW и набор средств производительности Windows (WPT).

Сторонний драйвер датчика

Если система использует сторонний драйвер датчика, системный интегратор должен обратиться к поставщику драйвера датчика для получения сведений о том, как лучше убедиться, что драйвер правильно выполняет управление питанием. Поставщики драйверов датчиков рекомендуется использовать трассировку событий для Windows (ETW) для всех решений по управлению питанием в драйвере устройства, а также предоставить пример документации для системных интеграторов, чтобы описать, как проверить правильную операцию управления питанием с помощью событий ETW и набор средств производительности Windows (WPT).

Если драйвер инициирует переход на D3, когда все его устройства датчика больше не используются, можно выполнить инструкции, приведенные в следующем списке, чтобы убедиться, что этот переход происходит должным образом, и что устройство датчика возвращается в D0, когда приложению или операционной системе необходимо снова использовать устройство.

Метод, ориентированный на программное обеспечение, использует инструментирование Windows, чтобы убедиться, что D3 IRP проходит через стек драйверов устройств для устройства датчика. Диспетчер питания Windows имеет встроенную инструментацию ETW, которая включает инструментирование для обнаружения DX IRPs (запросы на питание устройства). Чтобы просмотреть эти сведения в ручном режиме, скачайте набор средств производительности Windows и установите его в системе в тестовом режиме.

После установки набор средств производительности Windows выполните следующие инструкции, чтобы запустить трассировку XPerf в пользовательском режиме:

  1. Откройте окно командной строки как Администратор istrator.

  2. Перейдите в папку \%ProgramFiles%\Windows Kits\8.0\Windows Performance набор средств\.

  3. Чтобы запустить Xperf, выполните следующую команду: xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. Перезапустите систему в современный режим ожидания, нажав кнопку питания.

  5. Подождите 30 секунд.

  6. Перезапустите систему из современного режима ожидания, нажав кнопку питания.

  7. Выполните следующую команду, чтобы остановить ведение журнала событий: xperf.exe -stop power_session

  8. Преобразуйте двоичный файл трассировки в csv-файл и формат, доступный для чтения человеком: xperf.exe –i \user.etl > power.txt

  9. Откройте файл Power.txt в текстовом редакторе и найдите идентификатор оборудования устройства датчика. Идентификатор оборудования устройства датчика можно найти на вкладке "Сведения" свойств устройства в диспетчер устройств в разделе "Путь экземпляра устройства". В следующем примере путь экземпляра устройства датчика — ACPI\MST0731\2&daba3ff&0.

  10. Запуск IRP D3 для устройства датчика указывается событием типа Microsoft-Windows-Kernel-Power/IRP/Stop, который содержит путь экземпляра устройства датчика и последнее значение события 3, указывающее, что целевое состояние — D3. Следующее событие выходных данных из файла Power.txt показывает начало IRP D3. Последние два значения параметров для этого события (показана в правом углу) указывают путь экземпляра устройства и целевое состояние.

    Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4), 256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3

  11. Это событие должно быть зарегистрировано в начале выходного файла Power.txt. Значение 0x868e2728 параметра в предыдущем выходном событии — это указатель на структуру IRP для IRP D3. Выполнив поиск последующих событий в файле трассировки с таким же указателем IRP, вы можете отслеживать ход выполнения IRP D3, так как он проходит через стек драйверов для устройства датчика.

  12. Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4),256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3

  13. Microsoft-Windows-Kernel-Power/Driver/Start, 7605416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

  14. Microsoft-Windows-Kernel-Power/Driver/Stop, 7605515, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0

  15. Microsoft-Windows-Kernel-Power/Driver/Start, 7605522, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0, "\Driver\i2cdrv"

  16. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608342, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0

  17. Microsoft-Windows-Kernel-Power/Driver/Start, 7608351, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90, "\Driver\ACPI"

  18. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90

  19. Microsoft-Windows-Kernel-Power/Driver/Start, 7608424, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

Когда драйвер Windows ACPI, Acpi.sys, обрабатывает D3 IRP, Acpi.sys запускает соответствующий метод управления _PR3. Конструктор системных встроенного ПО предоставляет этот метод управления, чтобы указать, какой ресурс Power Resource необходимо отключить для устройства датчика, чтобы ввести состояние D3. Acpi.sys также выполняет метод управления _OFF в Power Resource.

Вы можете использовать аналогичный процесс, чтобы убедиться, что устройство датчика возвращается в D0, когда платформа выходит из современного режима ожидания и включается дисплей. Событие Microsoft-Windows-Kernel-Power/IRP/Start для устройства датчика регистрируется с целевым состоянием 0 (указывающее D0) сразу после нажатия кнопки питания для пробуждения системы, а операционная система или возобновленные данные датчика приложений.

Список проверка управления питанием датчика и датчика

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

  • Выберите оборудование датчика, совместимое со встроенным драйвером HIDI2C и стеком драйверов HIDSensor.
  • Выберите оборудование датчика, которое имеет резервное потребление электроэнергии менее одного милливатта.
  • Убедитесь, что оборудование датчика и сторонний драйвер (при необходимости) поддерживают управление питанием во время выполнения при включении дисплея:
    • Датчики должны быть отключены и введите D3 автоматически, если они не используются приложением или операционной системой.
    • Датчики должны включить и ввести D0 автоматически, когда данные датчика запрашивается приложением или операционной системой.
    • Сторонний драйвер датчика должен быть реализован как драйвер WDF и может быть основан на примере драйвера SpbAccelerometer.
    • Опрос данных датчика должен быть ограничен и включен на самом низком уровне потребления электроэнергии. Например, опрос аналогового датчика должен происходить за микроконтроллером или другим оборудованием с низким питанием, которое может прервать SoC, когда новые данные датчика превышают некоторое значение обнаружения порогового значения. Избегайте опроса датчика в драйвере, который периодически работает на SoC, что может значительно увеличить общее потребление электроэнергии системы.
  • Если оборудование датчика использует сторонний драйвер:
    • Системный интегратор должен взаимодействовать с поставщиком устройства датчика, чтобы понять, как реализовать управление питанием для оборудования датчика.
    • Если оборудование датчика потребляет более одного милливатта в резервном режиме питания, поместите оборудование датчика на автономный рельс питания, контролируемый линией GPIO из SoC. Укажите ссылки на необходимые методы управления ACPI Power Resource, _ON/_OFF и Power Resource на устройстве датчика в пространстве имен ACPI (как описано ниже).
    • Если оборудование датчика использует линию GPIO из SoC для переключения устройства в режим ожидания питания, убедитесь, что встроенное ПО системы ACPI включает правильные _PS3 и _PS0 методы управления (как описано ниже).
  • Если оборудование датчика включает микроконтроллер датчика с устройствами датчиков, подключенными за ним, микроконтроллер датчика должен иметь способ питания устройств датчиков. Устройства можно включить с помощью сетевого подключения через шину, которая подключает микроконтроллер к устройствам или линию GPIO от микроконтроллера к устройствам.
  • Если для оборудования датчика требуется линия GPIO из SoC для переключения устройства на режим резервной мощности:
    • Убедитесь, что строка GPIO из SoC соответствует уровню и требованиям триггера, заданным поставщиком оборудования датчика.
    • В пространстве имен ACPI опишите пин-код SoC GPIO в рамках области операции GPIO.
    • Предоставьте метод управления _PS3 под устройством датчика в пространстве имен ACPI, чтобы переключить сигнал на линию GPIO при необходимости, чтобы переключить оборудование датчика в режим резервной мощности.
    • Предоставьте метод управления _PS0 под устройством датчика в пространстве имен ACPI, чтобы переключить сигнал на линию GPIO при необходимости, чтобы переключить оборудование датчика на бездействующий или активный режим после перехода устройства на D0.
  • Если оборудование датчика потребляет более одного милливатта в режиме резервного питания:
    • Поместите все оборудование датчика на электростанцию, которая может быть включена и отключена линией GPIO из SoC. Или, если платформа содержит несколько датчиков с разными требованиями к напряжениям, укажите отдельные рельсы, которые могут быть независимо переключены.
    • Опишите переключимый power rail в качестве ресурса Power Resource в пространстве имен ACPI.
    • В рамках этого ресурса Power Resource укажите _ON и _OFF методы управления, которые переключают электропередача и выключают с помощью линии GPIO, описанной как часть области операций GPIO.
    • В пространстве имен ACPI укажите _PR3 и _PR0 объекты, которые назначают Power Resource для оборудования датчика.
    • Убедитесь, что методы _ON и _OFF включают любые требования к отказу или времени оборудования датчика.
  • Проверьте и проверьте управление питанием устройств датчиков во время выполнения на платформе. Внимательно обратитесь к поставщику оборудования датчика, чтобы проверить управление питанием во время выполнения при включении системного дисплея.
  • Проверьте и убедитесь, что оборудование датчика входит в режим ожидания или отключения питания, когда платформа входит в современный режим ожидания.
    • Если оборудование датчика использует стеки драйверов датчиков HIDI2C + HID, включенные в Windows, см. сведения о тестировании и проверке.
    • Если оборудование датчика использует сторонний драйвер, обратитесь к поставщику драйвера датчика по рекомендуемой методологии тестирования.
    • Если драйвер датчика выполняет переход на D3 в рамках его входа в резервный или удаленный режим питания, используйте набор средств производительности Windows, как описано в разделе "Тестирование и проверка". Убедитесь, что оборудование датчика входит в D3, когда платформа входит в современную резервную систему, и что оборудование датчика вступает в D0 после того, как система выходит из современной резервной системы и запрашивается информация о датчике снова.
  • Измеряйте потребление энергии оборудования датчика в режиме ожидания или отключения питания.
  • Инициируйте несколько переходов в современный резервный режим, а затем стресс-тестируйте работу устройств датчиков и приложений, использующих сведения об датчике при включении дисплея.