다음을 통해 공유


센서 전원 관리

모바일 PC는 일반적으로 ALS(주변광 센서), 3차원 가속도계, 3차원 회전계 또는 3차원 자력계와 같은 센서 디바이스를 통합합니다. 운영 체제 또는 애플리케이션에서 센서 디바이스를 사용하지 않는 경우 전원 관리 소프트웨어는 전원 소비를 줄이기 위해 디바이스를 저전력 모드로 전환할 수 있습니다. 최신 대기 전원 모델을 지원하는 PC에서 센서 디바이스는 PC가 최신 대기 모드로 전환된 직후에 저전력 모드로 전환되고 PC가 최신 대기 모드를 종료할 때까지 이 모드로 유지되어야 합니다.

이 문서에서는 센서 디바이스의 전원 관리를 구현하는 방법을 설명합니다. 선택적 센서 마이크로 컨트롤러(센서 퓨전 허브 또는 센서 MCU라고도 함) 및 집계된 센서 디바이스의 전원 관리에 대해서도 설명합니다. (예: 나침반 센서 디바이스는 센서 마이크로 컨트롤러의 제어 아래 가속도계, 회전계, 자력계를 집계하여 구현할 수 있습니다. 마이크로 컨트롤러는 이러한 센서 디바이스를 단일 논리 센서 디바이스로 Windows에 노출합니다.)

센서 및 센서 마이크로 컨트롤러

센서 하드웨어는 최신 모바일 환경에 매우 중요합니다. Windows 10부터 다양한 시스템 인프라를 사용하여 여러 센서 디바이스를 노출하고 관리할 수 있습니다. 이 인프라는 센서 정보를 통합하고 화면 자동 회전 또는 주변광에 따라 디스플레이 밝기 변경과 같은 중요한 Windows 기본 제공 시나리오를 지원하는 애플리케이션 개발을 간소화합니다.

시스템 런타임 중에는 사용하지 않는 개별 센서의 전원을 끌 수 있습니다. 특정 센서 디바이스를 사용하기 위한 요구 사항은 Windows 센서 API를 통해 디바이스 및 해당 드라이버에 전달됩니다. 운영 체제 또는 애플리케이션에서 센서 디바이스를 사용하지 않는 경우 센서 드라이버 또는 센서 마이크로 컨트롤러에서 실행되는 펌웨어가 디바이스의 전원을 끌 수 있습니다.

시스템 디스플레이가 꺼지고 하드웨어 플랫폼이 최신 대기 상태로 전환되면 센서 디바이스와 아직 저전력 상태가 아닌 선택적 센서 마이크로 컨트롤러는 몇 초 내에 저전력 대기 상태로 전환되어야 합니다. 그래야만 플랫폼 전체가 저전력 상태로 전환할 수 있습니다. 그러나 센서 드라이버는 센서 디바이스의 전원을 켜고 끄는 시기를 결정하기 위해 최신 대기 모드 전환을 직접 모니터링하지는 않습니다. 대신, 센서 드라이버는 하나 이상의 클라이언트(애플리케이션 또는 운영 체제 구성 요소)에서 디바이스를 적극적으로 사용할 때 디바이스가 전원을 공급받을 수 있도록 해야 합니다. 디바이스를 사용하는 클라이언트가 없는 경우 드라이버는 디바이스의 전원을 제거해야 합니다.

센서 클래스 확장은 드라이버에 센서 샘플 판독값 보고를 시작하라고 요청할 때 센서 드라이버의 EvtSensorStart 콜백 메서드를 호출합니다. 센서 클래스 확장은 드라이버에 센서 샘플 판독값 보고를 중지하라고 요청할 때 드라이버의 EvtSensorStop 콜백 메서드를 호출합니다. 자세한 내용은 센서 드라이버 이벤트 정보를 참조하세요.

컴퓨터가 최신 대기 상태로 전환되고 모든 센서 디바이스가 저전력 상태로 진입하면 모든 시스템 센서 하드웨어의 총 전력 소비량이 1밀리와트 미만이어야 합니다. 센서 디바이스 및 선택적 센서 마이크로 컨트롤러는 센서 하드웨어와 관련된 저전력 대기 상태로 진입할 수 있습니다. 또는 센서 디바이스 및 선택적 센서 마이크로 컨트롤러와 연결되는 하드웨어 전원 레일을 센서 드라이버 및/또는 시스템 ACPI 펌웨어의 제어 하에 끌 수 있습니다.

Windows 10부터 최신 대기 플랫폼의 코어 실리콘 또는 SoC(System on a Chip)에 연결하는 센서 하드웨어 연결 옵션 중 일부에 대한 지원이 제공됩니다. 다음 섹션에서는 지원되는 하드웨어 및 소프트웨어 구성과 최신 대기 기간 및 플랫폼이 적극적으로 사용되는 기간에 전원 관리가 어떻게 작동하는지 자세히 설명합니다.

전원 관리 모드

Windows는 각 센서 디바이스 또는 센서 마이크로 컨트롤러에 선택적 0와트 전원 제거 모드 외에도 활성, 유휴, 대기의 세 가지 디바이스 전원 모드가 있을 것으로 예상합니다. 다음 표에는 센서 디바이스 및 선택적 센서 마이크로 컨트롤러의 전원 모드에 대해 설명되어 있습니다. 이 표에서는 센서 하드웨어가 사용되고 있지만 현재 유휴 상태인 유휴 모드와 센서 하드웨어가 사용되고 있지 않은 유휴 모드를 구분합니다.

Mode 설명 평균 전력 소비량 활성으로 대기 시간 종료 전환 메커니즘

활성

센서 디바이스 및/또는 센서 마이크로 컨트롤러가 환경 변화를 적극적으로 제공하거나 처리하고 있습니다.

< 100밀리와트

해당 없음

해당 없음

유휴(사용 중)

센서 디바이스 및/또는 센서 마이크로 컨트롤러가 하나 이상의 애플리케이션에서 사용되고 있으며 주 프로세서에 다음 센서 정보를 제공하기 위해 대기 중입니다.

< 50밀리와트

센서에 따라 다름

하드웨어 자치

유휴(사용되지 않음)

센서 디바이스 및/또는 센서 마이크로 컨트롤러가 애플리케이션에서 사용되고 있지 않습니다. 센서 또는 센서 마이크로 컨트롤러의 보정 데이터는 유지됩니다.

< 5밀리와트

센서에 따라 다름

센서 디바이스의 현재 사용량을 설명하는 HID(휴먼 인터페이스 디바이스) 명령 또는 센서 프레임워크 메시지입니다.

대기

센서 디바이스 및/또는 센서 마이크로 컨트롤러가 애플리케이션에서 사용되고 있지 않습니다. 센서 또는 센서 마이크로 컨트롤러의 보정 데이터는 유지됩니다. 주 프로세서에서 실행되는 소프트웨어의 요청이 있을 때까지 센서 및/또는 센서 마이크로 컨트롤러가 아무 작업도 수행하지 않습니다.

< 1밀리와트(모든 시스템 센서)

< 10밀리초

여러 옵션:

  • HIDI2C 명령 SET_POWER(Sleep)
  • 타사 드라이버 프라이빗 메시지
  • SoC에서 센서 하드웨어로 이어지는 GPIO 라인

전원 제거됨

센서 디바이스 및/또는 센서 마이크로 컨트롤러에서 전원이 제거되고 모든 하드웨어 컨텍스트가 사라집니다.

0밀리와트

< 100밀리초

외부 엔터티는 D3 IRP에 대한 응답으로 ACPI 펌웨어를 통해 전원을 제거하거나 전원을 적용합니다.

참고 항목

앞의 표에서 대기라는 용어는 플랫폼 전체 전원 상태인 최신 대기 상태와 구별되는 디바이스 전원 모드를 나타냅니다.

소프트웨어 전원 관리 메커니즘

센서 디바이스 및 센서 마이크로 컨트롤러의 런타임 전원 관리는 주로 사용 여부에 따라 구동됩니다. 일반적으로 센서 드라이버와 하드웨어는 운영 체제 또는 애플리케이션에서 사용되지 않을 때 센서를 유휴 전원 모드로 전환해야 합니다. Windows 센서 플랫폼은 특정 센서에 연결된 애플리케이션 또는 운영 체제 클라이언트의 수와 센서의 듀티 사이클 또는 데이터 속도 요구 사항에 대한 정보를 제공합니다. 센서 드라이버 및/또는 하드웨어는 이 정보를 사용하여 시스템이 실행 중이고 디스플레이가 켜져 있는 동안 센서 디바이스를 유휴 전원 모드로 매끄럽게 전환합니다.

시스템 디스플레이가 꺼지고 플랫폼이 최신 대기 모드로 전환되면 Windows는 모든 센서 및 센서 마이크로 컨트롤러가 대기 또는 전원 제거 모드로 전환될 것으로 예상합니다.

센서 디바이스 및 선택적 센서 마이크로 컨트롤러에 사용할 소프트웨어 전원 관리 메커니즘의 선택은 센서 하드웨어가 장치 드라이버에 의해 Windows에 노출되는 방식과 센서 하드웨어가 SoC 또는 코어 실리콘에 물리적으로 연결되는 방식에 따라 달라집니다. Windows는 센서 디바이스를 노출하고 연결하는 두 가지 방법을 지원합니다. 한 가지 방법은 I2C 연결을 통해 기본 제공 센서 HID 클래스 드라이버를 사용하는 것입니다. 이 방법에서는 기본 제공 HIDI2C 드라이버가 I2C 연결을 통해 HID 정보를 전송합니다. 다른 방법은 유니버설 센서 드라이버 인터페이스를 구현하고 SensorscxFunctions 테이블에서 메서드를 호출하는 타사 드라이버가 필요합니다.

다음 표에는 센서 또는 센서 마이크로 컨트롤러에 연결하는 두 가지 옵션이 비교되어 있습니다. 센서 하드웨어에 연결하는 두 가지 옵션 중 하나를 선택하면 센서 하드웨어를 대기 모드 또는 전원 제거 모드로 전환하는 데 필요한 소프트웨어 전원 관리 메커니즘이 결정됩니다.

연결 옵션 버스 연결 센서 드라이버 필요 드라이버 공급자 설명

HIDI2C

센서 하드웨어가 I2C를 통해 SoC 또는 코어 실리콘에 직접 연결합니다.

Sensor HID 클래스 드라이버 + HID-over-I2C 클래스 드라이버

Microsoft. Windows 8부터 받은 편지함 구성 요소입니다.

장점/단점

타사 센서 드라이버

센서 하드웨어가 I2C 또는 UART를 통해 SoC 또는 코어 실리콘에 직접 연결합니다.

SENSOR_CONTROLLER_CONFIG를 구현하는 타사 드라이버

센서 디바이스 공급업체.

장점/단점

HIDI2C

HIDI2C 옵션의 경우 선택적 센서 마이크로 컨트롤러가 I2C 버스를 통해 SoC 또는 코어 실리콘에 물리적으로 연결됩니다. 마이크로 컨트롤러는 논리 센서 디바이스마다 하나씩 여러 최상위 HID 컬렉션을 노출합니다. 예를 들어 나침반 센서는 HID를 통해 센서 마이크로 컨트롤러 뒤에 있는 가속도계, 회전계 및 자력계 센서의 집합체인 논리 센서 디바이스로 노출할 수 있습니다. 센서 디바이스에 타사 소프트웨어가 필요 없기 때문에 연결성 및 소프트웨어 측면에서 가장 구현하기 쉬운 방법입니다.

Windows HIDI2C 스택은 대역 내 HID 명령과 D3 상태로 런타임 전환이라는 두 가지 소프트웨어 전원 관리 메커니즘을 지원한다는 측면에서 터치 컨트롤러 및 펜 디지타이저와 비슷합니다.

대역 내 HID 명령

SET_POWER(Sleep) 디스플레이가 꺼지고 플랫폼이 최신 대기로 전환된 후 디바이스로 전송됩니다. 이 명령은 디바이스를 대기 전원 모드로 전환할 수 있습니다.

SET_POWER(On) 플랫폼이 최신 대기 상태이고 디스플레이가 다시 켜질 때 디바이스로 전송됩니다.

HID 센서 디바이스 스택의 D3 상태로 런타임 전환

D3 IRP SET_POWER(Sleep) 명령 직후 디바이스의 드라이버 스택으로 전송되는 IRP_MJ_POWER 요청입니다. D3 디바이스 전원 상태를 입력하라는 지시가 디바이스에 전달됩니다. D3로 전환할 때 시스템 ACPI 펌웨어는 제어 메서드를 실행하여 디바이스를 대기 또는 전원 제거 모드로 전환할 수 있습니다.

D0 IRP 플랫폼이 최신 대기 상태이고 디스플레이가 켜져 있을 때 디바이스의 드라이버 스택으로 전송되는 IRP_MJ_POWER 요청입니다. D0 디바이스 전원 상태를 입력하라는 지시가 디바이스에 전달됩니다. 필요한 경우 시스템 ACPI 펌웨어가 제어 메서드를 실행하여 디바이스를 다시 유휴(사용되지 않음) 모드로 전환할 수 있습니다.

타사 센서 드라이버

타사 센서 드라이버의 경우 센서 마이크로 컨트롤러가 I2C 버스 또는 UART를 통해 코어 실리콘에 물리적으로 연결됩니다.

센서 디바이스 공급업체는 SENSOR_CONTROLLER_CONFIG 인터페이스를 구현하는 UMDF(User-Mode Driver Framework) 드라이버를 제공해야 합니다. UMDF 드라이버는 I2C 또는 UART를 통해 센서 디바이스와 통신합니다. 센서 마이크로 컨트롤러 뒤에 있는 센서마다 한 번씩 여러 번 구현할 수 있습니다. 타사 센서 드라이버는 모든 전원 관리를 만들고 조율하는 역할을 담당합니다.

타사 센서 드라이버는 WDF(Windows Driver Frameworks)를 사용하여 빌드되고 Adxl354acc 샘플 드라이버를 기반으로 할 것으로 예상됩니다. 드라이버는 전원 관리 큐를 사용하고 IWDFDevice3::AssignS0IdleSettingsEx 메서드 호출을 통해 D3 유휴 상태를 구성해야 합니다. 드라이버는 IWDFDevice2::StopIdleIWDFDevice2::ResumeIdle 메서드를 사용하여 디바이스가 유휴 상태이거나 활성 상태일 때 WDF에 알려야 합니다. 또한 드라이버는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체의 ExcludeD3Cold 멤버를 WdfFalse로설정하여 D3cold를 사용하도록 설정해야 합니다. D3cold를 사용하도록 설정하면 플랫폼이 유휴 상태가 되어 D3 상태로 전환된 후 센서 디바이스에서 전원을 제거할 수 있습니다.

여러 플랫폼에서 드라이버 코드를 저렴하게 재사용할 수 있도록 드라이버에 디바이스별 코드를 배치하고 ACPI 펌웨어에 플랫폼별 코드를 배치하는 것이 모범 사례입니다.

최신 대기 모드 진입 요구 사항

전원 관리를 위한 타사 센서 드라이버의 요구 사항은 센서 하드웨어의 대기 전원 소비 기능입니다.

타사 센서 드라이버는 디바이스가 대역 내 통신 메커니즘을 사용하여 소비 전략이 밀리와트 미만인 전원 모드로 전환할 수 있는 경우에도 센서 디바이스가 대기 또는 전원 제거 모드로 전환할 준비가 되면 D3로의 전환을 시작해야 합니다. 이렇게 요구하는 이유는 Windows의 여러 버스 드라이버가 엔드포인트 디바이스의 디바이스 전원 상태를 추적하고 모든 엔드포인트 디바이스의 전원이 꺼진 경우에만 전원을 끄기 때문입니다. 일부 SoC 디자인 및 연결 버스(특히 USB(유니버설 직렬 버스))의 경우 SoC가 최신 대기 중에 가장 낮은 전원 상태로 진입하려면 모든 엔드포인트 디바이스와 호스트 컨트롤러가 D3에 있어야 합니다. 가장 낮은 전원 상태로 진입할 수 없으면 시스템이 배터리 수명에 대한 최신 대기 요구 사항을 충족하지 못할 가능성이 높습니다.

제어되는 모든 센서 하드웨어의 센서 하드웨어 대기 전력 소비량이 1밀리와트 미만인 경우 센서 드라이버는 센서(또는 마이크로 컨트롤러의 모든 센서)가 더 이상 사용되지 않을 때 자동으로 디바이스를 대기 모드로 전환해야 합니다.

센서 하드웨어의 대기 전력 소비량이 1밀리와트를 초과하는 경우 센서 드라이버는 D3 전환을 수행하고 ACPI 제어 메서드가 센서 디바이스에서 전원을 제거할 수 있도록 허용해야 합니다. D3 상태인 동안 디바이스에서 전원을 제거할 수 있도록 센서 드라이버는 필요한 모든 센서 디바이스 상태를 저장해야 합니다. 센서 하드웨어 공급업체는 시스템 통합업체와 긴밀하게 협력하여 센서 하드웨어 및 드라이버가 D3 전환을 안정적이고 신속하게 수행할 수 있도록 해야 합니다.

Important

드라이버는 디바이스가 D3로 전환되기 전에 모든 센서 디바이스 컨텍스트를 저장해야 하고, 디바이스가 D0로 전환된 후에는 모든 센서 디바이스 컨텍스트를 복원해야 합니다.

최신 대기 모드로 전환된 직후 Windows는 자동으로 운영 체제에서 센서를 사용(예: 주변광 및 회전)하지 않도록 설정하고 애플리케이션을 일시 중단하여 모든 센서 사용을 중지합니다. 센서 드라이버는 제어되는 모든 센서 하드웨어의 상태를 집계하고 모든 센서가 더 이상 사용되지 않으면 이 하드웨어를 대기 디바이스 전원 모드로 전환해야 합니다.

센서 디바이스를 대기 모드로 전환하는 메커니즘은 디바이스를 SoC에 연결하는 버스를 통해 대역 내 통신을 사용하도록 설계할 수 있습니다. 예를 들어 버스를 통해 전용 대기 명령을 센서 하드웨어로 보낼 수 있습니다. 또는 디바이스를 대기 모드로 전환하거나 대기 모드를 해제하는 GPIO 라인에 센서 하드웨어를 연결할 수도 있습니다.

참고 항목

GPIO 라인을 사용하여 디바이스를 대기 모드로 전환하는 경우 센서 드라이버는 드라이버 스택을 D3로 전환해야 하며 디바이스의 ACPI 제어 메서드(예: _PS3)가 GPIO 라인을 하드웨어를 대기 모드로 배치하는 데 필요한 상태로 설정할 수 있도록 허용해야 합니다. 이 체계를 사용하면 센서 드라이버를 플랫폼에 구애받지 않는 방식으로 작성할 수 있습니다. 특정 GPIO 라인, 타이밍 요구 사항 및 기타 플랫폼별 정보는 디바이스별 드라이버가 아닌 시스템 통합자가 제공하는 ACPI 펌웨어에 인코딩됩니다.

최신 대기 모드 종료 요구 사항

플랫폼이 최신 대기 모드를 종료하면 센서 드라이버는 센서 하드웨어를 다시 유휴 모드(사용되지 않음) 모드로 전환해야 합니다. 시스템 서비스가 재개되므로 Windows는 시스템 기능을 수행하는 데 필요한 회전 및 주변광과 같은 센서 사용을 요청합니다. 애플리케이션이 다시 시작되면 센서 정보를 요청할 수 있습니다. 센서 하드웨어가 디바이스를 유휴 모드로 전환하기 위해 대역 내 메시지가 필요한 경우 장치 드라이버는 센서 정보를 원하는 첫 번째 요청을 받는 즉시 이 메시지를 보내야 합니다. 센서 하드웨어가 디바이스에 유휴 상태로 돌아가라는 신호를 보내기 위해 GPIO 라인이 필요한 경우 드라이버는 센서 정보를 원하는 첫 번째 요청을 받는 즉시 이 GPIO 라인을 사용하여 D0로 전환해야 합니다. 이 경우 ACPI 제어 메서드(예: _PS0)는 전환을 시작하는 데 필요한 대로 GPIO 라인을 토글해야 합니다. 마지막으로, 대기 모드의 전원 사용량이 1밀리와트를 초과하여 센서 하드웨어가 이전에 전원 제거 모드로 전환했어야 하는 경우 센서 드라이버는 D0로 전환하고 ACPI 제어 메서드가 디바이스 전원을 복원할 수 있도록 허용해야 합니다.

지원되는 하드웨어 전원 구성

센서 디바이스에 사용할 하드웨어 전원 관리 구성은 센서 하드웨어의 대기 모드 전원 사용량과 선택적 센서 마이크로 컨트롤러가 디바이스를 관리하는지 여부에 따라 달라집니다.

대기 전원 < 1밀리와트

대기 전원 모드에서 센서 디바이스의 전원 사용량이 1밀리와트를 초과하지 않는 경우 플랫폼 디자이너는 ACPI 제어 메서드로 켜고 끌 수 있는 전원 레일에 센서 하드웨어를 연결할 필요가 없습니다. 다음 메커니즘 중 하나는 센서를 대기 전원 모드로 전환하는 데 사용됩니다.

  • HID SET_POWER(Sleep) 명령
  • SoC의 GPIO 라인
  • 타사 센서 드라이버가 센서 하드웨어로 보내는 업체 고유의 명령

플랫폼에 센서 마이크로 컨트롤러가 포함된 경우 마이크로 컨트롤러 칩이 하나 이상의 통합 센서 디바이스를 포함하고 있거나 하나 이상의 외부 센서 디바이스에 연결되었을 수 있습니다. 두 경우 모두 이러한 센서 디바이스는 소프트웨어 관점에서 마이크로 컨트롤러 뒤에 숨어 있어서 Windows에는 보이지 않습니다. 마이크로 컨트롤러와 센서 하드웨어가 대기 전원 모드에 있을 때 센서 마이크로 컨트롤러와 집계된 센서 디바이스가 사용하는 전력의 합계가 1밀리와트 미만인 경우 플랫폼 디자이너는 ACPI 제어 메서드로 켜고 끌 수 있는 전원 레일에 마이크로 컨트롤러 또는 센서 하드웨어를 연결할 필요가 없습니다. 센서 마이크로 컨트롤러는 다음 메커니즘 중 하나를 사용하여 자신과 자신이 관리하는 모든 센서를 대기 모드로 전환하거나 대기 모드에서 다른 모드로 전환합니다.

  • 통신 버스를 통해 전송되는 HIDI2C SET_POWER(또는 이와 유사한) 명령
  • SoC의 GPIO 라인

센서가 대기 모드로 전환/대기 모드에서 다른 모드로 전환을 시작하기 위해 SoC의 GPIO 라인이 필요한 경우 플랫폼 펌웨어는 센서 하드웨어 디바이스 아래의 ACPI 네임스페이스에 _PS3 개체와 _PS0 개체를 모두 제공해야 합니다. ACPI 펌웨어에는 SoC에서 센서 하드웨어로의 GPIO 라인을 설명하는 GPIO 작업 영역도 포함되어야 합니다. _PS3 제어 메서드는 GPIO 라인을 토글하여 디바이스를 대기 모드로 전환하고, _PS0 제어 메서드는 GPIO 라인을 토글하여 센서 하드웨어를 유휴 모드로 전환합니다.

다음 블록 다이어그램은 대기 전원 모드에서 소비 전력이 1밀리와트 미만인 독립 실행형 센서의 전원 관리 옵션을 보여줍니다.

한 가지 옵션은 위 다이어그램의 왼쪽에 보이는 것처럼 Windows HIDI2C 스택을 사용하는 것입니다. 이 경우 센서를 대기 전원 모드로 전환하는 작업은 대역 내 HID SET_POWER(Sleep) 명령 또는 ACPI 드라이버가 센서에 대한 _PS3 제어 메서드를 실행하여 처리하는 D3 IRP로 시작할 수 있습니다.

다른 옵션은 위 다이어그램의 오른쪽에 보이는 것처럼 타사 센서 드라이버를 사용하는 것입니다. 타사 센서 드라이버는 전용 대역 내 명령을 사용하거나 ACPI 드라이버가 센서에 대한 _PS3 제어 메서드를 실행하여 처리하는 D3 IRP를 전송하여 대기 전원 모드로의 전환을 시작할 수 있습니다.

플랫폼 디자이너는 센서 디바이스가 마이크로 컨트롤러 칩에 통합되었는지 아니면 외부에 있는지 여부에 관계없이 메커니즘을 선택할 수 있습니다.

대기 전원 > 1밀리와트

플랫폼에 센서 하드웨어 및/또는 센서 마이크로 컨트롤러가 포함되어 있고 대기 전원 모드에서 소비 전력 합계가 1밀리와트를 초과하는 경우 시스템이 최신 대기 상태일 때 센서 하드웨어 및 마이크로 컨트롤러를 전원 제거 모드로 전환해야 합니다. 이 구성에서는 센서, 선택적 센서 마이크로 컨트롤러 및 마이크로 컨트롤러 뒤에 있는 모든 센서를 SoC의 GPIO 라인 제어에 따라 켜지고 꺼지는 단일 전원 레일에 배치해야 합니다.

이 구성을 사용하려면 플랫폼 디자이너는 SoC의 GPIO 라인이 제어하는 전환 가능한 전원 레일에 모든 센서 하드웨어를 배치해야 합니다. 센서 하드웨어에 여러 입력 전압이 필요한 경우 각각 동일한 GPIO 라인의 제어를 받는 여러 스위치를 사용할 수 있습니다. 전환 가능한 전원 레일 외에도 플랫폼 ACPI 펌웨어는 네임스페이스에서 전원 리소스를 정의해야 합니다. 이 전원 리소스는 센서 하드웨어를 설명하며, GPIO 작업 영역을 사용하여 SoC의 GPIO 라인을 토글하는 _ON 및 _OFF 메서드를 포함하고 있습니다.

플랫폼 펌웨어에는 _PR0 및 _PR3 개체를 포함하여 전환 가능한 전원 레일의 ACPI 네임스페이스에 있는 각 센서 디바이스 아래의 전원 리소스에 대한 참조가 포함되어야 합니다.

다음 블록 다이어그램은 대기 전원 모드에서 소비 전력 합계가 1밀리와트를 초과하는 센서 하드웨어 및/또는 센서 마이크로 컨트롤러의 전원 관리 옵션을 보여줍니다. 두 가지 옵션은 다이어그램의 왼쪽에 보이는 것처럼 Windows HIDI2C 스택을 사용하거나, 오른쪽에 보이는 것처럼 타사 센서 드라이버를 사용하는 것입니다.

위 다이어그램의 왼쪽에 보이는 것처럼 기본 제공 HIDI2C 드라이버 스택을 사용하는 구성에서는 디스플레이가 꺼지고 플랫폼이 최신 대기 상태로 전환된 후 HIDI2C 드라이버가 D3 전환을 시작합니다. D3 IRP가 ACPI 드라이버를 통해 흐르는 경우 _PR3 개체가 평가되고 Windows는 _OFF 메서드를 실행하여 지정된 전원 리소스를 끕니다. 여러 센서가 전원 리소스를 공유하는 경우 Windows는 자동으로 모든 센서의 참조 횟수를 계산하고 모든 센서가 D3로 전환된 후에만 _OFF 메서드를 실행합니다.

센서 하드웨어가 위 다이어그램의 오른쪽에 보이는 것처럼 타사 센서 드라이버를 사용하는 경우 제어 흐름은 센서 드라이버가 D3로의 전환을 시작할 책임이 있다는 점을 제외하고 이전과 동일합니다.

플랫폼이 최신 대기에서 다시 시작되고 애플리케이션 또는 운영 체제에서 센서 사용을 요청하면 드라이버가 D0로 전환됩니다. D0 IRP가 ACPI 드라이버를 통해 흐르고, ACPI 드라이버가 연결된 전원 리소스에 대해 _ON 메서드를 실행할 수 있도록 _PR0 개체가 평가됩니다. _ON 메서드는 GPIO 라인을 전환하여 전환 가능한 전원 레일을 켭니다. 시스템에서 타사 센서 드라이버를 사용하는 경우 드라이버는 D0 IRP를 요청하고 운영 체제 또는 애플리케이션에서 센서 데이터를 요청하는 즉시 D0로 전환을 시작해야 합니다.

절전 모드 해제 문제

센서 또는 선택적 센서 마이크로 컨트롤러와 관련된 절전 모드 해제 문제는 없습니다. 센서 디바이스는 최신 대기 중에는 대기 모드 또는 전원 제거 모드에 있을 것으로 예상되며 플랫폼이 최신 대기 상태인 동안에는 SoC를 깨우지 않을 것으로 예상됩니다.

테스트 및 유효성 검사

시스템 디자이너는 최신 대기 상태로 진입하기 위해 디스플레이 전원이 꺼질 때 센서 하드웨어가 대기 모드 또는 전원 제거 모드로 전환되는지 확인해야 합니다. 디바이스 전원 관리를 테스트하고 유효성을 검사하는 데 사용되는 방법은 센서 디바이스가 연결되는 방식에 따라 달라집니다.

HIDI2C 연결 센서

시스템에서 Windows HIDI2C 스택을 사용하는 경우 시스템 통합업체는 센서 드라이버 공급업체에 문의하여 드라이버가 전원 관리를 올바르게 수행하는지 확인하는 가장 좋은 방법을 알아보아야 합니다. 센서 드라이버 공급업체는 장치 드라이버의 모든 전원 관리 결정에 ETW(Event Tracing for Windows) 추적을 사용하고, ETW 이벤트 및 WPT(Windows Performance Toolkit)를 사용하여 올바른 전원 관리 작업을 확인하는 방법을 설명하는 샘플 설명서를 시스템 통합자에게 제공하는 것이 좋습니다.

타사 센서 드라이버

시스템에서 타사 센서 드라이버를 사용하는 경우 시스템 통합업체는 센서 드라이버 공급업체에 문의하여 드라이버가 전원 관리를 올바르게 수행하는지 확인하는 가장 좋은 방법을 알아보아야 합니다. 센서 드라이버 공급업체는 장치 드라이버의 모든 전원 관리 결정에 ETW(Event Tracing for Windows) 추적을 사용하고, ETW 이벤트 및 WPT(Windows Performance Toolkit)를 사용하여 올바른 전원 관리 작업을 확인하는 방법을 설명하는 샘플 설명서를 시스템 통합자에게 제공하는 것이 좋습니다.

모든 센서 디바이스가 더 이상 사용되지 않을 때 드라이버가 D3 전환을 시작하는 경우 다음 목록의 지침에 따라 이 전환이 예상대로 발생하는지 확인하고, 애플리케이션 또는 운영 체제에서 디바이스를 다시 사용해야 할 때 센서 디바이스가 다시 D0로 전환되는지 확인할 수 있습니다.

소프트웨어 중심 메서드는 Windows 계측을 사용하여 D3 IRP가 센서 디바이스의 장치 드라이버 스택을 통과하는지 확인합니다. Windows 전원 관리자에는 Dx IRP(디바이스 전원 요청)를 탐지하기 위한 계측을 포함하고 있는 기본 제공 ETW 계측이 있습니다. 수동 모드에서 이 정보를 보려면 Windows Performance Toolkit를 다운로드하여 테스트 중인 시스템에 설치합니다.

Windows Performance Toolkit을 설치한 후 다음 지침에 따라 사용자 모드 XPerf 추적을 시작합니다.

  1. 명령 프롬프트 창을 관리istrator로 엽니다.

  2. \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ 폴더를 찾습니다.

  3. Xperf를 시작하려면 xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power 명령을 실행합니다.

  4. 전원 단추를 눌러 시스템을 최신 대기 모드로 전환합니다.

  5. 30초 동안 기다립니다.

  6. 전원 단추를 눌러 시스템을 최신 대기 모드에서 해제합니다.

  7. xperf.exe -stop power_session 명령을 실행하여 이벤트 로깅을 중지합니다.

  8. xperf.exe –i \user.etl > power.txt 명령을 실행하여 이진 추적 파일을 .csv 및 사람이 읽을 수 있는 형식으로 변환합니다.

  9. 텍스트 편집기에서 Power.txt 파일을 열고 센서 디바이스의 하드웨어 ID를 검색합니다. 디바이스 인스턴스 경로 아래의 디바이스 관리자에서 디바이스 속성의 세부 정보 탭을 선택하여 센서 디바이스의 하드웨어 ID를 조회할 수 있습니다. 다음 예제에서 센서 디바이스의 디바이스 인스턴스 경로는 ACPI\MST0731\2&daba3ff&0입니다.

  10. 센서 디바이스의 D3 IRP 시작은 센서 디바이스의 디바이스 인스턴스 경로가 있는 Microsoft-Windows-Kernel-Power/IRP/Stop 및 대상 상태가 D3임을 나타내는 마지막 이벤트 값이 3인 유형의 이벤트로 표시됩니다. Power.txt 파일의 다음 출력 이벤트는 D3 IRP의 시작을 보여줍니다. 이 이벤트의 마지막 두 매개 변수 값(맨 오른쪽)은 디바이스 인스턴스 경로와 대상 상태를 나타냅니다.

    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은 D3 IRP의 IRP 구조에 대한 포인터입니다. 추적 파일에서 이와 동일한 IRP 포인터가 있는 후속 이벤트를 검색하면 센서 디바이스의 드라이버 스택을 통해 흐르는 D3 IRP의 진행률을 추적할 수 있습니다.

  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 제어 메서드를 실행합니다. 시스템 펌웨어 디자이너는 센서 디바이스가 D3 상태로 진입하려면 어떤 전원 리소스를 꺼야 하는지 알리기 위해 이 제어 메서드를 제공합니다. 또한 Acpi.sys는 전원 리소스 아래에서 _OFF 제어 메서드를 실행합니다.

이와 비슷한 프로세스를 사용하면 플랫폼이 최신 대기 모드를 종료하고 디스플레이가 켜질 때 센서 디바이스가 다시 D0로 전환되는지 확인할 수 있습니다. 센서 디바이스에 대한 Microsoft-Windows-Kernel-Power/IRP/Start 이벤트는 전원 단추를 눌러 시스템이 절전 모드에서 해제되는 즉시 대상 상태 0(D0를 나타냄)으로 기록되고, 운영 체제 또는 다시 시작된 애플리케이션은 센서 데이터를 요청합니다.

센서 및 센서 마이크로 컨트롤러 전원 관리 검사 목록

시스템 통합자와 센서 디바이스 공급업체는 다음 검사 목록을 사용하여 시스템 전원 관리 디자인이 Windows 8 이상과 호환되는지 확인해야 합니다.

  • 기본 제공 HIDI2C 드라이버 및 HIDSensor 드라이버 스택과 호환되는 센서 하드웨어를 선택합니다.
  • 대기 모드 소비 전력이 1밀리와트 미만인 센서 하드웨어를 선택합니다.
  • 디스플레이가 켜져 있을 때 센서 하드웨어 및 타사 드라이버(필요한 경우)가 런타임 유휴 전원 관리를 지원하는지 확인합니다.
    • 애플리케이션 또는 운영 체제에서 센서를 사용하지 않는 경우 자동으로 센서가 꺼지고 D3로 전환되어야 합니다.
    • 애플리케이션 또는 운영 체제에서 센서 데이터를 요청하면 자동으로 센서가 켜지고 D0로 전환되어야 합니다.
    • 타사 센서 드라이버는 WDF 드라이버로 구현해야 하며 SpbAccelerometer 샘플 드라이버를 기반으로 할 수 있습니다.
    • 센서 정보 폴링은 최대한 낮은 소비 전력 수준에서 제한하고 활성화해야 합니다. 예를 들어 아날로그 센서 폴링은 마이크로 컨트롤러 또는 기타 저전력 제어 하드웨어 뒤에서 발생해야 하며, 새 센서 데이터가 임계값 탐지 값을 초과하면 SoC가 중단될 수 있습니다. SoC에서 주기적으로 실행되는 드라이버에서는 센서를 폴링하지 마세요. 전체 시스템 전력 소비가 크게 증가할 수 있습니다.
  • 센서 하드웨어에서 타사 드라이버를 사용하는 경우:
    • 시스템 통합업체는 센서 디바이스 공급업체와 연락하여 센서 하드웨어의 전원 관리를 구현하는 방법을 파악해야 합니다.
    • 센서 하드웨어의 대기 전원 모드 소비 전력이 1밀리와트를 초과하는 경우 SoC의 GPIO 라인을 통해 제어되는 독립 실행형 전원 레일에 센서 하드웨어를 배치합니다. 필요한 ACPI 전원 리소스, _ON/_OFF 제어 메서드 및 ACPI 네임스페이스에서 센서 디바이스 아래의 전원 리소스에 대한 참조를 제공합니다(아래 설명 참조).
    • 센서 하드웨어가 SoC의 GPIO 라인을 사용하여 디바이스를 대기 전원 모드로 전환하는 경우 시스템 ACPI 펌웨어에 적절한 _PS3 및 _PS0 제어 메서드가 포함되어 있는지 확인합니다(아래 설명 참조).
  • 센서 하드웨어에 마이크로 컨트롤러가 있고 마이크로 컨트롤러 뒤에 센서 디바이스가 연결된 경우 센서 마이크로 컨트롤러가 센서 디바이스를 끌 수 있는 방법이 있어야 합니다. 마이크로 컨트롤러를 디바이스에 연결하는 버스를 통해 대역 내 통신을 사용하여 또는 마이크로 컨트롤러에서 디바이스로의 GPIO 라인을 사용하여 디바이스를 끌 수 있습니다.
  • 센서 하드웨어에 디바이스를 대기 전원 모드로 전환하기 위해 SoC의 GPIO 라인이 필요한 경우:
    • SoC의 GPIO 라인이 센서 하드웨어 공급업체에서 설정한 수준과 트리거 요구 사항을 충족하는지 확인합니다.
    • ACPI 네임스페이스에서 GPIO 작업 영역의 일부로 SoC GPIO 핀을 설명합니다.
    • 센서 하드웨어를 대기 전원 모드로 전환하는 데 필요한 경우 ACPI 네임스페이스의 센서 디바이스 아래에 _PS3 제어 메서드를 제공하여 GPIO 라인의 신호를 토글합니다.
    • 디바이스가 D0로 전환된 후 센서 하드웨어를 유휴 또는 활성 모드로 전환하는 데 필요한 경우 ACPI 네임스페이스의 센서 디바이스 아래에 _PS0 제어 메서드를 제공하여 GPIO 라인의 신호를 토글합니다.
  • 센서 하드웨어가 대기 전원 모드에서 1밀리와트 이상을 사용하는 경우:
    • SoC의 GPIO 라인을 통해 켜고 끌 수 있는 전원 레일에 모든 센서 하드웨어를 배치합니다. 또는 플랫폼에 공급 전압 요구 사항이 다른 센서가 여러 개 포함된 경우 독립적으로 전환할 수 있는 별도의 레일을 제공합니다.
    • 전환 가능한 전원 레일을 ACPI 네임스페이스에서 전원 리소스로 설명합니다.
    • 이 전원 리소스 아래에서 GPIO 작업 영역의 일부로 설명된 GPIO 라인을 사용하여 전원 레일을 켜고 끄는 _ON 및 _OFF 제어 메서드를 제공합니다.
    • ACPI 네임스페이스에서 센서 하드웨어의 전원 리소스를 지정하는 _PR3 및 _PR0 개체를 제공합니다.
    • _ON 및 _OFF 메서드가 센서 하드웨어의 디바운스 또는 타이밍 요구 사항을 포함시키는지 확인합니다.
  • 플랫폼에서 센서 디바이스의 런타임 전원 관리를 테스트하고 유효성을 검사합니다. 센서 하드웨어 공급업체와 긴밀히 협력하여 시스템 디스플레이가 켜져 있을 때 런타임 전원 관리의 유효성을 검사합니다.
  • 플랫폼이 최신 대기 모드로 전환될 때 센서 하드웨어가 대기 모드 또는 전원 제거 모드로 전환되는지 테스트하고 확인합니다.
    • 센서 하드웨어가 Windows에 포함된 HIDI2C + HID 센서 드라이버 스택을 사용하는 경우 테스트 및 유효성 검사에서 자세한 내용을 참조하세요.
    • 센서 하드웨어에서 타사 드라이버를 사용하는 경우 센서 드라이버 공급업체에 권장 테스트 방법을 문의하세요.
    • 센서 드라이버가 대기 모드 또는 전원 제거 모드로 진입할 때 D3 전환을 수행하는 경우 테스트 및 유효성 검사에 설명된 대로 Windows Performance Toolkit를 사용합니다. 플랫폼이 최신 대기 모드로 진입할 때 센서 하드웨어가 D3로 전환되고, 시스템이 최신 대기 모드를 종료하고 센서 정보가 다시 요청된 후 센서 하드웨어가 D0로 전환되는지 확인합니다.
  • 대기 모드 또는 전원 제거 모드에서 센서 하드웨어의 소비 전력을 측정합니다.
  • 최신 대기 모드로 전환/최신 대기 모드에서 다른 모드로 전환을 여러 번 시작한 다음, 디스플레이가 켜져 있을 때 센서 정보를 사용하는 센서 디바이스 및 애플리케이션의 연산에 대한 스트레스 테스트를 진행합니다.