다음을 통해 공유


최신 대기 플랫폼에 대한 NFP(근거리 근접) 전원 관리

NFP(근거리 근접) 디바이스는 Windows PC가 다른 NFP 장착 컴퓨터와 연결하고 페어링할 수 있는 단거리 무선 송신기/수신기 디바이스입니다.

NFP 디바이스는 GUID_DEVINTERFACE_NFP PnP(플러그 앤 플레이) 인터페이스를 통해 Windows 운영 체제에 노출됩니다. NFP 디바이스 공급업체에서 제공하는 타사 드라이버는 GUI_DEVINTERFACE_NFP 인터페이스를 구현하고 물리적 NFP 디바이스의 전원 관리를 담당합니다. NFP 디바이스는 일반적으로 칩(SoC) 또는 코어 실리콘에 있는 시스템의 I2C 인터페이스 핀에 연결됩니다.

일반적으로 NFP 디바이스는 소프트웨어 클라이언트에 근접 게시 또는 구독이 없거나 모든 게시 및 구독이 비활성화된 경우 저전력 모드(대기 모드 또는 전원 제거 모드)로 전환할 수 있습니다. 드라이버 개발 관점에서 이 조건은 디바이스에 미해결 핸들이 없을 때 발생합니다. 디바이스에 대한 핸들이 열려 있고 사용하도록 설정되지 않은 경우 NFP 디바이스를 대기 모드 또는 전원 제거 모드로 배치해야 합니다.

플랫폼이 최신 대기 상태로 전환되고 디스플레이가 비활성화되면 NFP 디바이스가 대기 모드 또는 전원 제거 전원 모드로 전환되어야 합니다. 대기 모드에서 NFP 디바이스의 전력 소비량이 평균 1밀리와트보다 큰 경우 디바이스는 0와트의 전원 제거 모드로 전환해야 합니다.

플랫폼이 최신 대기 상태에 진입하고 나갈 때 NFP 디바이스 드라이버에는 직접 알림이 표시되지 않습니다. 대신, Windows 최신 대기 상태에 진입할 때 드라이버에 대한 핸들을 사용하지 않도록 설정하고 최신 대기 상태에서 나갈 때 동일한 핸들을 사용하도록 설정하여 드라이버에 간접적으로 알 수 있습니다. 플랫폼이 최신 대기 상태에 진입하면 Windows는 아직 비활성화되지 않은 열려 있는 각 핸들에 사용 안 함 알림을 보냅니다. 플랫폼이 최신 대기 상태에서 나가면 Windows는 이전에 비활성화된 각 핸들에 사용 알림을 보냅니다. 최신 대기 상태에 진입하기 전에 이미 비활성화된 열려 있는 핸들은 최신 대기 상태에서 나간 후에도 비활성화된 상태로 유지됩니다.

디바이스 전원 관리 모드

Windows 8부터 최신 대기 상태 플랫폼용 NFP 디바이스에는 전원 제거 모드(NFP 디바이스에 대한 모든 전원 입력이 디바이스 외부의 하드웨어 메커니즘에 의해 꺼진) 외에도 활성, 유휴대기 모드의 세 가지 전원 모드가 있어야 합니다. 디바이스에서 지원하는 전원 관리 모드에 대한 자세한 내용은 NFP 디바이스에 대한 하드웨어 공급업체에 문의하세요.

다음 표에서는 NFP 디바이스에 대한 디바이스 전원 모드에 대해 설명합니다.

디바이스 전원 모드 설명 평균 전력 소비량 활성으로 대기 시간 종료 전환 메커니즘

활성

NFP 디바이스는 근처의 컴퓨터에서 다른 NFP 디바이스와 적극적으로 통신하고 있습니다.

< 50밀리와트

해당 없음

해당 없음

유휴 상태

NFP 디바이스는 NFP가 있는 다른 컴퓨터가 근처에 오기를 기다리고 있습니다. NFP 디바이스의 드라이버에는 열려 있는 게시 및 구독이 있습니다.

< 5밀리와트

< 10밀리초(일반)

하드웨어 자치

대기

NFP 디바이스에 전원이 적용되었지만 미해결 게시 또는 구독이 없습니다(열린 핸들 없음).

< 1밀리와트(디바이스 종속)

< 50밀리초(일반)

SoC 또는 코어 실리콘의 드라이버 명령 또는 GPIO 핀.

전원 제거됨

플랫폼이 켜져 있지 않거나 외부 엔터티가 전원을 끄기 때문에 NFP 디바이스에 전원이 적용되지 않습니다.

0와트

< 100밀리초

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

참고

  • 앞의 표에서 대기라는 용어는 플랫폼 전체 전원 상태인 최신 대기 상태와 구별되는 디바이스 전원 모드를 나타냅니다.
  • 앞의 표에서 D3 IRP라는 용어는 DevicePowerState형식의 IRP_MN_SET_POWER 요청을 나타냅니다.

대기 모드에서 NFP 디바이스의 지정된 전력 소비량은 부품 번호 및 제조업체에 따라 달라집니다. 시스템 디자이너는 디바이스 공급업체와 협력하여 디바이스별 대기 전력 소비량을 파악해야 합니다. 대기 모드의 전력 소비량이 1밀리와트를 초과하는 경우 NFP 디바이스를 전환 가능한 전원 레일에 연결하여 최신 대기 상태 중에 디바이스를 전원 제거 모드로 전환할 수 있도록 해야 합니다.

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

Windows는 NFP 디바이스 공급업체를 통해 NFP 디바이스 전원을 관리하는 타사 드라이버를 제공합니다. Windows는 이 드라이버가 NFP 디바이스 드라이버에 대해 현재 열린 핸들 수와 이러한 핸들의 상태를 모니터링하여 NFP 디바이스를 저전력 모드로 전환할 시기를 결정해야 합니다.

NFP 드라이버 개발자는 UMDF(User-Mode Driver Framework)를 사용하여 드라이버를 개발하는 것이 좋습니다. UMDF에는 디바이스 런타임 전원 관리를 더 쉽게 개발할 수 있는 다양한 기능이 포함되어 있습니다.

D3 지원

NFP 드라이버 개발자는 디바이스에 대한 모든 핸들이 닫혔거나 디바이스에 대해 열려 있는 모든 핸들이 IOCTL_NFP_DISABLE 알림을 받은 경우 NFP 디바이스를 D3 상태로 두는 것이 좋습니다. 열려 있는 모든 핸들은 플랫폼이 최신 대기 상태에 진입하고 사용자 데스크톱이 잠긴 후 IOCTL_NFP_DISABLE 알림을 받습니다.

NFP 디바이스가 유휴 전원 모드에서 1밀리와트 미만의 전력 소비량을 달성할 수 있더라도 모든 핸들이 닫히거나 IOCTL_NFP_DISABLE 알림을 받은 경우 D3으로 전환하는 것이 좋습니다. D3으로 전환하면 NFP 디바이스에 대한 드라이버 스택의 모든 드라이버에서 하드웨어가 저전력 모드로 전환되고 있음을 알 수 있습니다. 또한 Windows로 기본 제공되는 계측을 통해 D3으로의 전환을 검색할 수 있습니다. Windows 성능 도구 키트 및 기타 성능 진단 도구를 사용하여 이 전환을 관찰할 수 있습니다. 이 기본 제공 진단 지원을 통해 NFP 디바이스가 IOCTL_NFP_DISABLE이 전원 관리를 올바르게 수행하는지 확인하는 시스템 통합자의 비용을 줄일 수 있습니다.

일부 버스의 경우 버스 컨트롤러가 저전력 상태로 전환하려면 버스의 디바이스가 D3으로 전환되어야 합니다. I2C 연결 NFP 디바이스의 경우 I2C 버스 컨트롤러의 전원을 끄기 위해 D3으로 진입하는 엔드포인트 NFP 디바이스에 대한 종속성은 없습니다.

그러나 향후의 최신 대기 상태 플랫폼에서 USB(범용 직렬 버스)를 사용하여 NFP 디바이스에 연결하는 경우 NFP 디바이스는 D3으로 전환하여 USB 호스트 컨트롤러의 전원을 다운시킬 수 있고 SoC 또는 코어 실리콘이 최신 대기 상태 중에 저전력 유휴 상태로 전환될 수 있습니다. NFP 디바이스 드라이버 개발자는 기본 버스에 관계없이 저전력 모드로 전환할 준비가 되면 디바이스를 D3으로 전환하여 향후 드라이버 재사용 및 손쉬운 전원 관리 진단을 사용하도록 하는 것이 좋습니다.

대기 전원 모드로 전환하려면 NFP 디바이스가 통신 버스를 통해 NFP 디바이스 드라이버에서 명령을 보내야 하는 경우 이 명령은 드라이버에서 D3으로 전환하는 과정의 일부로 전송되어야 합니다.

NFP 디바이스에서 대기 전원 모드로 전환하기 위해 SoC의 GPIO 핀을 전환해야 하는 경우 D3으로 전환해야 합니다. D3으로의 전환을 시작하면 Windows ACPI 드라이버인 Acpi.sys에 알려 ACPI 네임스페이스의 NFP 디바이스에서 구현된 _PS3 제어 메서드를 실행합니다. _PS3 메서드는 GPIO 작업 영역을 통해 GPIO 줄을 전환할 수 있습니다. NFP 디바이스 드라이버의 이식성을 높이려면 특정 플랫폼에 대해 NFP 디바이스 드라이버를 사용자 지정할 필요가 없도록 플랫폼 펌웨어에서 플랫폼별 지연 또는 기타 타이밍 제약 조건을 구현해야 합니다.

UMDF 드라이버는 IWDFDevice2::AssignS0IdleSettingsEx 메서드를 호출하여, 디바이스가 유휴 상태이고 플랫폼이 S0(작업 중) 시스템 전원 상태일 때 NFP 디바이스를 D3으로 전환할 수 있도록 합니다. 이 호출에서 드라이버는 WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체에 대한 포인터를 입력 매개 변수로 제공하고 이 구조체의 DxState 멤버를 PowerDeviceD3으로 설정합니다.

대기 모드에서 NFP 디바이스의 전력 소비량이 1밀리와트보다 큰 경우, 모든 핸들이 닫히거나 모든 핸들이 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 디바이스가 RF(라디오) 메커니즘을 사용하여 근접 이벤트를 감지하는 경우 NFP 디바이스 공급업체는 NFP 디바이스 드라이버 외에도 라디오 관리자를 제공해야 합니다. 라디오 관리자는 라디오 관리 사용자 인터페이스 API를 구현하고 NFP 디바이스 드라이버와 비공개로 통신하는 COM DLL입니다. 사용자가 Windows 설정 애플리케이션에서 NFP 디바이스의 라디오 켜기/끄기 상태를 변경하면 NFP 디바이스 드라이버는 라디오 관리자를 통해 변경 알림을 받습니다. 드라이버 개발자는 라디오 관리자 COM 개체와 NFP 디바이스 드라이버 간에 라디오 관리 상태를 통신하는 프라이빗 인터페이스를 정의해야 합니다. NFP 디바이스 드라이버가 라디오 관리자 개체에서 디바이스의 라디오 켜기/끄기 상태를 해제하는 명령을 받으면 드라이버는 디바이스의 하드웨어 상태를 저장하고, NFP 디바이스와 연결된 RF 구성 요소를 끄고, 디바이스를 D3으로 전환해야 합니다. 디바이스가 D3으로 전환될 때 이미 열려 있는 GUID_DEVINTERFACE_NFP 인터페이스의 모든 핸들 수량과 상태는 디바이스가 D3 상태인 동안 유지되어야 합니다.

라디오 관리자가 NFP 디바이스의 RF 구성 요소를 사용하도록 설정하고 전원을 켜야 한다고 표시한 후 NFP 디바이스는 다음 중 하나가 발생할 때 즉시 D0으로 다시 전환해야 합니다.

  • 클라이언트가 NFP 디바이스 드라이버에 대한 새 핸들을 엽니다.
  • 이미 열려 있는 핸들은 IOCTL_NFP_ENABLE 알림을 받습니다.

플랫폼이 최신 대기 상태를 종료하고 사용자가 암호를 입력하면 IOCTL_NFP_ENABLE 알림은 Windows NFP 디바이스 드라이버로 전송됩니다.

라디오 관리자가 NFP 디바이스의 RF 구성 요소를 사용하지 않도록 설정하고 전원을 꺼야 한다고 표시한 경우 라디오 관리자가 RF 구성 요소를 사용하도록 설정하고 전원을 켜야 한다고 표시할 때까지 새 핸들을 열거나 기존 핸들을 사용하도록 설정한 경우에도 NFP 디바이스는 D3 상태로 남아 있어야 합니다.

NFP 디바이스에서 NFP 디바이스를 유휴 모드로 반환하기 위해 명령을 보내야 하는 경우 이 명령은 통신 버스(일반적으로 I2C)를 통해 전송될 수 있으며 NFP 디바이스 드라이버에서 D0으로의 전환 완료의 일부로 발생해야 합니다.

NFP 디바이스를 D0으로 전환하면 ACPI 네임스페이스의 디바이스에서 _PS0 제어 메서드를 실행할 수 있습니다. 필요한 경우 이 제어 메서드는 SoC에서 NFP 디바이스로 GPIO 줄을 전환하여 디바이스를 유휴 모드로 반환할 수 있습니다.

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

NFP 디바이스는 평균적으로 1밀리와트 이하의 전력을 소비해야 하며 하드웨어 플랫폼은 최신 대기 상태입니다. 디바이스가 대기 모드에 있을 때 디바이스가 1밀리와트 이하의 전원을 소비하는 경우, 디바이스를 사용하지 않을 때 NFP 디바이스 드라이버는 디바이스를 대기 모드로 배치할 수 있습니다. 그렇지 않으면 시스템 디자이너는 디바이스를 사용하지 않을 때 꺼질 수 있는 전용 전원 레일에 디바이스를 연결해야 합니다.

대기 전력이 1밀리와트 미만

NFP 디바이스가 대기 모드에서 1밀리와트 미만의 전력을 소비하는 경우 NFP 디바이스를 모든 시스템 전원 레일에 배치할 수 있으며 이 레일을 다른 디바이스 수와 공유할 수 있습니다. 디바이스가 대기 전원 모드로 전환되는 것은 D3으로의 전환의 일부로 발생합니다.

NFP 디바이스의 대기 모드 진입은 통신 버스(일반적으로 I2C)를 통해 명령을 보내거나 NFP 디바이스로 라우팅되는 SoC GPIO 줄을 전환하여 시작할 수 있습니다.

NFP 디바이스가 대기 모드로 전환하기 위해 SoC에서 GPIO 줄을 전환해야 하는 경우 GPIO 줄은 ACPI 네임스페이스의 GPIO 작업 영역에서 설명해야 합니다. 시스템 통합자는 ACPI 네임스페이스의 NFP 디바이스에서 _PS3 및 _PS0 메서드를 구현해야 합니다. _PS3 메서드의 구현은 NFP 디바이스를 대기 모드로 전환하도록 GPIO 줄을 전환해야 합니다. _PS0 메서드의 구현은 GPIO 줄을 전환하여 NFP 디바이스를 대기 모드에서 유휴 모드로 전환해야 합니다. 이 줄의 전환에는 플랫폼별 또는 디바이스별 타이밍 제약 조건이 적용될 수 있습니다.

앞에서 설명한 대로 NFP 디바이스 드라이버는 모든 핸들이 닫혀 있거나 모든 핸들이 IOCTL_NFP_DISABLE 알림을 받거나 라디오 관리자가 NFP 디바이스의 RF 구성 요소를 비활성화하도록 요청한 경우 D3으로의 전환을 시작해야 합니다.

대기 전력이 1밀리와트 이상

대기 모드에서 NFP 디바이스의 전력 소비량이 1밀리와트 이상인 경우, NFP 디바이스는 SoC에서 GPIO를 독립적으로 켜고 끌 수 있는 전용 전원 레일에 배치해야 합니다. 모든 핸들이 닫혀 있거나 모든 핸들이 IOCTL_NFP_DISABLE 알림을 받거나 라디오 관리자가 RF 구성 요소를 비활성화하도록 요청한 경우 NFP 디바이스는 먼저 D3으로 전환한 다음 전원 레일이 꺼지면 전원 제거 모드로 전환됩니다.

전환 가능한 전원 레일은 SoC 또는 코어 실리콘의 GPIO 라인에 의해 제어되어야 합니다. GPIO 줄은 ACPI 네임스페이스에서 GPIO 작업 영역의 일부로 설명되어야 합니다. 또한 ACPI 네임스페이스에는 전환 가능한 전원 레일을 설명하고 _ON 및 _OFF 제어 메서드를 구현하는 Power Resource가 포함되어야 합니다. _ON 및 _OFF 제어 메서드는 GPIO 작업 영역에 설명된 GPIO 라인을 전환하여 전원 레일을 켜고 끕니다. _PR3 및 _PR0 패키지는 ACPI 네임스페이스의 NFP 디바이스 아래에 있어야 하며 전원 레일을 설명하는 Power Resource에 연결해야 합니다.

앞에서 설명한 대로 NFP 디바이스 드라이버는 D3cold를 사용하도록 설정해야 합니다. 또한 모든 핸들이 닫혀 있거나 모든 핸들이 IOCTL_NFP_DISABLE 알림을 받거나 RF 구성 요소를 비활성화하도록 라디오 관리자가 요청하는 경우 드라이버는 D3으로의 전환을 시작해야 합니다. ACPI 드라이버는 D3 IRP를 받으면 _PR3 패키지로 표시된 Power Resource에서 _OFF 메서드를 실행합니다. 이 메서드는 전원 전환 하드웨어를 제어하는 GPIO 줄을 전환하여 NFP 디바이스에서 전원을 제거합니다.

라디오 관리자가 RF 구성 요소를 사용하도록 설정해야 한다고 표시한 경우 새 핸들이 열리거나 기존 핸들이 IOCTL_NFP_ENABLE 알림을 받으면 NFP 디바이스 드라이버가 D0으로 전환해야 합니다. ACPI 드라이버가 D0 IRP(DevicePowerState 형식의 IRP_MN_SET_POWER 요청)를 받으면 _PR0 패키지로 표시된 Power Resource에서 _ON 메서드를 실행합니다. 이 메서드는 전원 전환 하드웨어를 제어하는 GPIO 줄을 전환하여 NFP 디바이스에 전원을 다시 적용합니다.

절전 모드 해제 문제

NFP 디바이스에 대한 절전 모드 해제 문제는 없습니다. 플랫폼이 최신 대기 상태인 동안에는 NFP 디바이스가 SoC의 절전 모드 해제를 지원할 수 없습니다.

테스트 및 유효성 검사

시스템 디자이너는 최신 대기 상태에 대한 디스플레이 전원이 꺼질 때 NFP 디바이스가 대기 모드 또는 전원 제거 모드로 안정적으로 전환되는지 확인하는 것이 중요합니다. NFP 디바이스에 대한 전원 관리 솔루션은 타사 드라이버의 구현에 따라 크게 달라집니다. 따라서 시스템 통합자는 NFP 디바이스 공급업체와 함께 NFP 디바이스의 기능을 테스트하고 유효성을 검사하는 가장 좋은 방법을 논의하는 것이 좋습니다.

드라이버에 대한 모든 핸들이 닫혀 있거나 비활성화될 때 NFP 디바이스 드라이버가 D3으로의 전환을 시작하는 경우 XPerf 도구를 사용하여 이 전환을 관찰할 수 있습니다. 이 유효성 검사 방법은 터치 컨트롤러 및 센서 디바이스에 대해 다른 곳에서 설명한 것과 유사합니다.

드라이버가 통신 버스를 통해 명령을 보내 디바이스를 대기 모드 안팎으로 전환하는 경우 시스템 통합자가 전원 관리 작업의 유효성을 쉽게 검사할 수 있도록 드라이버에서 이벤트 추적을 지원해야 합니다. ETW(Windows 이벤트 추적) 이벤트를 사용하여 Windows 드라이버에 계측을 쉽게 추가할 수 있습니다. 자세한 내용은 Kernel-Mode 드라이버에 이벤트 추적 추가를 참조하세요. ETW 추적의 장점은 XPerf를 포함하는 도구의 Windows 성능 Toolkit 제품군을 사용하여 확인할 수 있다는 것입니다.

NFP 디바이스 전원 관리 검사 목록

시스템 통합업체 및 NFP 공급업체는 아래 검사 목록을 검토하여 시스템 전원 관리 디자인이 Windows 8 이상과 호환되는지 확인해야 합니다.

  • 평균 1밀리와트 미만의 전력을 소비하는 대기 모드가 있는 NFP 디바이스를 선택합니다.
  • 디바이스에 대한 모든 핸들이 닫혀 있거나 열려 있는 모든 핸들이 IOCTL_NFP_DISABLE 알림을 받거나 라디오 관리자가 NFP 디바이스의 RF 구성 요소를 사용하지 않도록 설정하고 전원을 끄도록 요청할 때 NFP 디바이스 드라이버가 D3으로의 전환을 시작하는지 확인합니다.
  • 라디오 관리자가 RF 구성 요소를 사용하도록 설정해야 한다고 표시된 후 디바이스에 대한 첫 번째 핸들이 열리거나 첫 번째 열린 핸들이 IOCTL_NFP_ENABLE 알림을 받는 경우 NFP 디바이스 드라이버가 D0으로의 전환을 시작하는지 확인합니다.
  • NFP 디바이스 드라이버가 통신 버스를 통해 사용자 지정 명령을 보내 NFP 디바이스에 대기 모드로 전환하도록 지시하는 경우, NFP 디바이스 공급업체와 협력하여 NFP 디바이스가 이 명령에 대한 응답으로 대기 전원 모드로 전환되는지 확인하는 가장 좋은 방법을 결정합니다.
  • NFP 디바이스의 전력 소비량이 1밀리와트보다 큰 경우 디바이스가 전환 가능한 전원 레일에 배치되었는지 확인합니다.
  • NFP 디바이스가 전환 가능한 전원 레일에 있는 경우:
    • 디바이스가 사용되지 않을 때 디바이스에서 전원을 완전히 제거하도록 지원하고 전원을 복원하면 디바이스가 자동으로 다시 활성화되고 다시 초기화되는지 확인합니다.
    • 전원 레일이 SoC 또는 코어 실리콘의 GPIO 줄에 의해 제어되는지 확인합니다.
    • GPIO 줄을 시스템 ACPI 펌웨어에 구현된 GPIO 작업 지역에 매핑합니다.
    • Power Resource 를 제공하여 전원 레일을 설명하고 이 Power Resource에 _ON, _OFF 및 _STA 제어 메서드를 포함합니다.
    • 시스템 ACPI 펌웨어의 NFP 디바이스에서 _PR0 및 _PR3 패키지를 제공하고 Power Resource를 참조하는지 확인합니다.
    • 드라이버가 액세스하기 전에 NFP 디바이스에 전원 켜기 지연이 필요한 경우 _ON 제어 메서드 구현에서 이 지연을 인코딩합니다.
  • 최신 대기 상태에서 여러 전환을 시작한 다음 디스플레이가 켜져 있을 때 NFP 디바이스의 작동을 스트레스 테스트합니다.