최신 대기 상태 플랫폼을 위한 GNSS 수신기 관리
이 항목에서는 최신 대기 상태를 지원하는 플랫폼에 대한 GNSS(Global Navigation Satellite System) 전원 관리에 대해 설명합니다.
최신 대기 전원 모델을 구현하는 Windows PC에는 GNSS(Global Navigation Satellite System) 디바이스도 포함될 수 있습니다. GNSS 디바이스가 있으면 사용자가 GPS(Global Positioning Systems) 또는 GLONASS(Global Orbiting Navigation Satellite System)와 같은 위성 탐색 시스템에서 정밀한 위치 정보를 얻을 수 있습니다. 하드웨어 플랫폼이 최신 대기 상태로 전환되면 GNSS 디바이스는 1mW 이하의 전력을 소비하는 저전력 작동 모드로 전환되어야 합니다. 그 후 플랫폼이 최신 대기 모드를 종료할 때까지 GNSS 디바이스가 이 모드로 유지되어야 합니다.
GPS 및 GLONASS(Global Orbiting Navigation Satellite System)을 지원하는 GNSS 디바이스는 이전부터 사용할 수 있었지만, 최신 GNSS 디바이스는 BDS(BeiDou Navigation Satellite System) 및 Galileo와 같은 위성 탐색 시스템을 지원합니다.
최신 대기 플랫폼은 일반적으로 SoC(System on a Chip) 통합 회로를 중심으로 빌드됩니다. Windows는 이러한 플랫폼에 GNSS 디바이스를 추가할 수 있도록 다음 옵션을 지원합니다.
- 통합 GNSS 디바이스를 포함하는 MBB(모바일 광대역) 모듈을 통합합니다. 이 방법은 휴대 전화에서 일반적입니다.
- 통합 GNSS 디바이스가 포함된 SoC를 선택합니다.
- I2C, SPI 또는 UART와 같은 저전력 버스를 사용하여 독립 실행형 GNSS 디바이스를 SoC에 연결합니다.
가급적이면 시스템 통합업체는 디바이스 소비 전력이 1mW 이하인 저전력 절전 모드를 구현하는 GNSS 디바이스를 선택해야 합니다. GNSS 디바이스 공급업체는 위치 데이터를 GNSS 디바이스에서 클라이언트 애플리케이션에 필요한 형식으로 변환하는 위치 센서 드라이버를 제공해야 합니다. 이러한 애플리케이션은 Windows 위치 API를 통해 GNSS 디바이스에 연결합니다. GNSS 디바이스의 위치 센서 드라이버는 다음 정보를 추적합니다.
- 위치 API를 통해 현재 GNSS 디바이스에 연결된 클라이언트 수
- GNSS 디바이스의 라디오 켜기/끄기 스위치 상태. 사용자는 Windows 설정 애플리케이션을 통해 이 스위치를 제어합니다. 자세한 내용은 라디오 관리 통합을 참조하세요.
위치 센서 드라이버는 이 정보를 사용하여 GNSS 디바이스가 유휴 상태인지 확인하여 저전력 모드로 배치할 수 있습니다. 하나 이상의 클라이언트가 디바이스에 연결된 경우에만 GNSS 디바이스가 적극적으로 사용됩니다. 그렇지 않으면 디바이스가 유휴 상태입니다.
시스템 배터리 수명을 연장하기 위해 최신 대기 모드 중에는 GNSS 디바이스에 대한 액세스가 제한됩니다. 잠금 화면 애플리케이션은 최신 대기 모드 중에 지오펜싱 및 위치 정보에 액세스할 수 있습니다. 그러나 비 잠금 화면 애플리케이션은 디스플레이가 켜져 있고 플랫폼이 사용자와 상호 작용하는 동안에만 위치 API를 사용하여 GNSS 디바이스에서 위치 데이터를 가져올 수 있습니다. 디스플레이가 꺼지고 플랫폼이 최신 대기 모드로 전환된 직후, GNSS 디바이스에 연결된 모든 비 잠금 화면 애플리케이션은 Windows에 의해 자동으로 연결이 끊어지고 애플리케이션이 일시 중단됩니다.
전원 관리 모드
GNSS 수신기에는 아래 설명과 같이 4가지 전원 관리 모드가 있어야 합니다.
GNSS 수신기 전원 모드
디바이스 전원 모드 | 설명 | 디바이스 전원 상태(Dx) | 라디오 상태(사용자에게 표시됨) | 연결된 클라이언트 수 | 평균 전력 소비량(mW) | 전환 메커니즘 |
---|---|---|---|---|---|---|
활성(획득) |
GNSS 수신기가 위성 수정 정보를 획득하고 있습니다. |
D0 |
설정 |
>= 1 |
~200mW |
해당 없음 |
활성(1Hz 추적) |
GNSS 수신기가 위성 수정 정보를 획득했으며 정기적으로 하나 이상의 애플리케이션에 데이터를 제공하고 있습니다. |
D0 |
설정 |
>= 1 |
~100mW(디바이스별) |
해당 없음 |
절전 |
GNSS 수신기에 연결된 클라이언트가 없습니다. 디바이스의 컨텍스트를 유지하고 활동 모드로 돌아가는 대기 시간을 줄이기 위해 GNSS 수신기 하드웨어에 여전히 전원이 공급됩니다. |
D3(D3hot) |
OFF 또는 ON |
0 |
<1mW(디바이스별) |
소프트웨어에서 시작합니다. USB(Universal Serial Bus) 버스 또는 USB 복합 디바이스에 직접 연결된 GNSS 라디오의 선택적 일시 중단 상태입니다. |
전원 제거됨 |
GNSS 수신기에 연결된 클라이언트가 없고, 라디오가 꺼져 있고, GNSS 수신기의 모든 전원이 외부 엔터티에 의해 제거되었습니다. |
D3(D3cold) |
OFF 또는 ON |
0 |
0mW |
소프트웨어에서 시작하며 전원을 제거하기 위해 하드웨어 조정이 필요합니다. |
GNSS 수신기의 소프트웨어 드라이버도 아래 설명처럼 라디오 관리를 처리해야 합니다.
플랫폼 구현 요구 사항
최신 대기 플랫폼은 GNSS 수신기를 물리적으로 통합하는 여러 옵션을 제공합니다. GNSS 수신기는 저전력 통신 버스를 통해 SoC에 연결된 독립 실행형 디바이스에 포함될 수 있습니다. 또한 GNSS 수신기는 휴대 전화에 일반적으로 사용되므로 GNSS 수신기를 MBB(모바일 광대역) 라디오에 통합할 수 있습니다. 마지막으로, GNSS 수신기를 SoC 자체에 통합할 수 있습니다.
이러한 여러 옵션은 GNSS 기능이 필요한 플랫폼의 구현 방법을 결정할 때 시스템 통합자에게 고민을 안겨 줍니다. Windows 최신 대기 플랫폼의 경우 시스템 통합업체는 다음과 같은 우선 순위에 따라 GNSS를 통합하는 것이 좋습니다.
- 시스템에 MBB 라디오가 장착된 경우 MBB 모듈에 통합된 GNSS 수신기를 사용합니다.
- 시스템에 온보드 GNSS 수신기가 있는 SoC가 장착된 경우 SoC에 통합된 GNSS 수신기를 사용합니다.
- 저전력 통신 버스(예: UART, SPI 또는 I2C)를 통해 SoC에 연결된 독립 실행형 GNSS 수신기를 통합합니다.
시스템 통합업체는 불필요한 GNSS 수신기를 Windows에 노출하면 안 됩니다. 여러 GNSS 수신기가 운영 체제에 노출되면 Windows는 모든 GNSS 디바이스의 위치 정보를 집계하지 않습니다.
소프트웨어 전원 관리 메커니즘
Windows 플랫폼의 GNSS 디바이스는 Windows 센서 클래스 확장 모델을 사용하여 ISensorDriver 인터페이스를 구현하는 UMDF(User-Mode Driver Framework) 드라이버를 통해 관리되어야 합니다. 위치 센서 드라이버라고 불리는 이 GNSS 드라이버는 기본 GNSS 수신기의 전원을 관리하고 위치 정보를 요청하는 애플리케이션에 데이터를 제공해야 합니다.
개요 및 애플리케이션 모델
위치 센서 드라이버는 연결된 애플리케이션 클라이언트 수를 기본 메커니즘으로 사용하여 GNSS 디바이스가 절전 모드 또는 전원 제거 모드로 전환할 수 있는 시기를 결정합니다. 위치 센서 드라이버는 사용자가 GNSS 라디오를 켜고 끄는 기능을 제어할 수 있도록 GNSS 공급업체에서 제공한 라디오 관리자 라이브러리와 통신하는 역할도 담당합니다. 위치 센서 드라이버는 연결된 클라이언트 수와 라디오 상태에 대한 사용자의 기본 설정을 모두 사용하여 가급적이면 GNSS 디바이스를 저전력 절전 모드 또는 전원 제거 모드로 유지할 수 있습니다.
Microsoft Store 앱은 포그라운드 및 백그라운드 애플리케이션의 수명을 관리하므로 위치 센서 드라이버에 연결된 애플리케이션 클라이언트 수에 상당한 영향을 미칩니다. 포그라운드 애플리케이션은 Windows 위치 API를 통해 위치 정보를 요청합니다. 사용자가 포그라운드 애플리케이션을 백그라운드로 전환하면 Microsoft Store 앱 모델은 클라이언트 애플리케이션과 GNSS 수신기의 연결을 끊습니다.
이 애플리케이션 모델 메커니즘을 사용하면 연결된 애플리케이션 클라이언트 수를 위치 센서 드라이버가 쉽게 추적할 수 있습니다. 연결된 애플리케이션 클라이언트가 없을 때마다 위치 센서 드라이버는 GNSS 디바이스를 절전 모드 또는 전원 제거 모드로 전환할 수 있습니다.
시스템이 최신 대기 상태로 전환되면 Windows는 모든 포그라운드 애플리케이션을 자동으로 일시 중단하므로 연결된 클라이언트 수를 관찰하는 위치 센서 드라이버가 0으로 전환됩니다.
라디오 관리 통합
위치 센서 드라이버는 공급업체에서 제공하는 라디오 관리자 라이브러리와 통신하는 인터페이스도 구현해야 합니다. 라디오 관리자 라이브러리를 사용하면 Windows는 GNSS 디바이스 라디오 "켜기/끄기" 컨트롤을 Windows 설정 애플리케이션에 노출할 수 있습니다.
위치 센서 드라이버 구현 요구 사항
위치 센서 드라이버는 GNSS 디바이스가 사용되지 않을 때에는 GNSS 디바이스를 저전력 D3 상태로 전환해야 합니다. 현재 연결된 클라이언트가 없거나 라디오 관리자를 통해 GNSS를 사용하지 않도록 설정한 경우 GNSS 디바이스가 사용되지 않습니다.
라디오 관리자를 통해 GNSS 디바이스를 사용하지 않도록 설정한 경우 위치 센서 드라이버는 항상 GNSS 디바이스를 D3 상태로 유지해야 합니다. 이 요구 사항은 드라이버가 전원 관리 큐를 사용하고 단순히 연결된 클라이언트의 요청을 전달하지 못하도록 방지합니다. 위치 센서 드라이버는 I/O용 비전력 관리 큐를 사용해야 하며 StopIdle 및 ResumeIdle 메서드를 사용하여 직접 유휴 상태를 관리해야 합니다. 위치 센서는 계속해서 GNSS 디바이스의 드라이버 스택에 대한 전원 정책 소유자여야 합니다. 드라이버는 I/O 큐를 만들기 위해 IWDFDevice::CreateIoQueue를 호출할 때 bPowerManaged 값을 FALSE로 설정해야 합니다.
위에서 설명한 것처럼 드라이버는 연결된 클라이언트 수와 라디오 관리자의 라디오 상태를 사용하여 GNSS 디바이스가 유휴 상태인지 확인합니다. GNSS 디바이스가 유휴 상태이면 드라이버는 ResumeIdle 메서드를 호출하여 드라이버 프레임워크의 D3 전환을 시작합니다. 드라이버 프레임워크는 드라이버의 OnD0Exit 메서드 구현을 실행합니다.
새 클라이언트가 연결되거나 라디오가 켜져서 GNSS 디바이스를 다시 활성화해야 하는 경우 드라이버는 StopIdle 메서드를 호출합니다. 드라이버 프레임워크는 드라이버의 OnD0Entry 메서드 구현을 실행합니다. 드라이버는 WaitForD0 매개 변수를 FALSE로 설정하고 StopIdle 메서드를 실행해야 합니다.
아래에 제공된 상태 다이어그램은 이 관계를 보여주며 StopIdle 및 ResumeIdle 메서드를 언제 호출해야 하는지 드라이버 개발자를 위한 가이드 역할을 합니다.
드라이버는 디바이스가 유휴 상태인지 추적해야 하므로 I/O 큐 및 그로 인한 하드웨어 디바이스 액세스를 직접 관리해야 합니다.
위치 센서 드라이버는 IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend 및 IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart 메서드를 모두 구현해야 합니다. 드라이버 프레임워크는 시스템 부팅을 포함하여 디바이스가 시작될 때 IPnpCallbackSelfManagedIo::OnSelfManagedIoInit를 호출합니다. 후속 호출은 IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart 콜백입니다. 드라이버 프레임워크에서 CreateDevice 메서드를 호출할 때 이러한 인터페이스를 등록해야 합니다.
IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart는 ISensorDriver:: 콜백의 요청을 포함하여 드라이버로 전송되는 요청이 GNSS 디바이스 하드웨어와 직접 상호 작용할 수도 있다고 위치 센서 드라이버에 알립니다. 드라이버 프레임워크는 OnD0Exit 및 OnD0Entry 메서드 둘 다에서 디바이스 하드웨어에 액세스할 수 있도록 보장합니다.
마찬가지로 프레임워크에서 IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend 메서드를 호출하면 드라이버는 모든 ISensorDriver 요청을 완료한 직후에 OnSelfManagedIoSuspend에서 해제되어야 합니다. 이렇게 하면 이러한 요청이 1초 이내에 완료되지 않을 수도 있으므로 드라이버가 디바이스 하드웨어에 액세스할 수 없습니다. 위치 센서 드라이버에 GNSS 디바이스 하드웨어에 대한 보류 중인 요청이 있는데 이 시간 제약 조건을 위반하지 않고 요청을 완료할 수 있는 다른 방법이 없는 경우에는 요청을 취소해야 합니다.
드라이버가 하드웨어 디바이스와 직접 상호 작용하지 않거나 아직 처리되지 않은 모든 하드웨어 요청이 1초 이내에 완료된다는 보장이 있는 경우 드라이버는 다음 절차에 따라 OnSelfManagedIoSuspend 메서드를 구현해야 합니다.
- 디바이스가 비활성 상태임을 나타내는 전역 플래그를 설정합니다.
- WDF(Windows Driver Frameworks) 큐에서 StopSynchronously 메서드를 호출합니다.
- GNSS 디바이스 하드웨어에 액세스하는 다른 비동기 작업을 중지합니다.
- WDF 큐에서 Start 메서드를 호출합니다.
- 1단계에서 설정된 전역 플래그를 지웁니다.
이러한 작업을 수행하는 코드 예제는 센서 지리적 위치 샘플 드라이버(UMDF 버전 1)의 OnSelfManagedIoSuspend 구현을 참조하세요.
드라이버가 하드웨어 디바이스와 직접 상호 작용하는 경우 하드웨어에 대한 미해결 요청을 취소한 후 I/O 큐를 플러시해야 합니다. 드라이버는 다음 절차에 따라 OnSelfManagedIoSuspend 메서드를 구현해야 합니다.
- 디바이스가 비활성 상태임을 나타내는 전역 플래그를 설정합니다.
- WDF 큐에서 Stop 메서드를 호출합니다.
- 대기 중인 모든 하드웨어 요청을 취소하여 모든 ISensorDriver 콜백 스레드가 완료되도록 합니다.
- WDF 큐에서 StopSynchronously 메서드를 호출합니다.
- GNSS 디바이스 하드웨어에 액세스하는 다른 비동기 작업을 중지합니다.
- WDF 큐에서 Start 메서드를 호출합니다.
- 1단계에서 설정된 전역 플래그를 지웁니다.
모든 위치 센서 드라이버는 OnSelfManagedIoFlush 메서드 구현 내에서 I/O 큐를 동기적으로 제거해야 합니다.
절전 모드 및 전원 제거 모드
디바이스의 로컬 컨텍스트가 유지되고 외부 신호 없이 통신 버스를 통해 요청에 계속 응답할 수 있는 경우 GNSS 디바이스는 절전 모드와 전원 제거 모드를 모두 지원할 수 있습니다. (일반적으로 전원 제거 모드인 디바이스는 버스 요청에 응답할 수 없습니다.) 기본 디바이스에서 전원 제거 모드를 사용할 수 있는지 알아보려면 위치 센서 드라이버를 작성해야 합니다. 기본 디바이스가 전원 제거 모드를 사용할 수 있고 드라이버가 컨텍스트를 저장/복원하고 디바이스를 다시 초기화할 수 있는 경우에만 위치 센서 드라이버에서 D3cold를 사용하도록 설정해야 합니다. 그렇지 않은 경우 위치 센서는 계속해서 D3를 유휴 상태로 사용하고, D3cold를 사용하도록 설정하면 안 됩니다. 이렇게 하면 기본 버스 및 필터 드라이버가 디바이스를 전원 제거 모드가 아닌 절전 모드로 전환할 수 있습니다.
위치 센서 드라이버가 D3cold를 지원하고 D3 전환을 시작했음을 알리면 기본 버스 및 필터 드라이버는 디바이스에서 전원을 제거해야 합니다. UART 연결 GNSS 디바이스의 경우 ACPI에서 이 메커니즘을 구현할 수 있습니다. 또는 USB 열거형 GNSS 디바이스의 경우 USB 허브 드라이버와 ACPI 드라이버의 조합으로 이 메커니즘을 사용할 수 있습니다.
GNSS 디바이스가 SoC에 있는 경우 기본 드라이버에 구현된 SoC 공급업체의 독점 드라이버 및 펌웨어는 GNSS 디바이스에서 전원을 제거하는 작업을 담당합니다. GNSS 디바이스의 절전 모드 소비 전력이 1mW를 초과하는 경우에는 모든 클라이언트의 연결이 끊어질 때 디바이스를 전원 제거 모드로 전환하도록 GNSS 드라이버, 플랫폼 펌웨어 및 하드웨어를 엔지니어링해야 합니다.
유휴 탐지
GNSS 디바이스의 위치 센서 드라이버는 가능할 때마다 디바이스를 절전 모드로 전환해야 합니다. 앱에서 긴 보고서 간격을 요청하면 위치 센서 드라이버는 다음 수정이 요청될 때까지 GNSS 디바이스를 절전 모드로 전환해야 합니다. 위치 센서 드라이버는 수정 사항을 면밀하게 검토하고 앱에 위치 데이터를 제공하기에 충분한 시간을 두고 GNSS 디바이스를 활성 전원 모드로 전환해야 합니다.
예를 들어 요청된 가장 짧은 보고서 간격이 30분이고 디바이스가 준비를 마치고 위치 수정 사항을 획득하는 데 1분이 필요하다고 가정하겠습니다. 이 시나리오에서 위치 센서 드라이버는 다음을 수행해야 합니다.
- 위치 정보를 제공한 직후 ResumeIdle을 호출하여 GNSS 디바이스를 절전 모드(D3)로 전환합니다.
- 28분 후 만료되는 타이머를 설정합니다. (TimerExpiration = ReportInterval – WarmUpTime).
- 타이머가 만료되면 StopIdle을 호출하여 GNSS 디바이스를 D0로 전환합니다.
- 디바이스가 수정 사항을 획득하면 애플리케이션에 위치 정보를 제공합니다. 참고 위치 센서 드라이버는 D3cold를 신중하게 구성해야 합니다.
WarmUpTime의 다시 시작 대기 시간을 달성하기 위해 디바이스에 지속적인 전원이 필요한 경우 D3cold를 사용하면 안 됩니다. D3cold는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에서 ExcludeD3Cold 값을 변경하여 런타임에 동적으로 사용하도록 설정할 수 있습니다.
USB 연결 GNSS 디바이스가 D3cold를 사용하지 않은 채 절전 모드(D3)로 전환되면 디바이스는 USB 일시 중단 상태로 전환되어 상당한 칩셋 및 프로세서 전원을 절약합니다. 위치 센서 드라이버가 D3cold를 사용하도록 설정하고 절전 모드(D3)로 전환되면 기본 플랫폼은 USB 버스를 통해 연결된 경우에도 디바이스에서 전원을 제거할 수 있습니다.
지원되는 하드웨어 구성
Windows는 GNSS 디바이스에 대한 4가지 물리적 하드웨어 구성을 지원합니다. 연결 버스는 각 하드웨어 구성을 구분합니다.
UART를 통해 SoC에 연결된 GNSS
이 구성에서 GNSS 라디오는 SoC의 UART에 연결된 독립 실행형 디바이스입니다. GNSS 라디오는 활성 모드와 절전 모드 간에 전환하거나 초기화 및 전원 켜기 시퀀싱 조건을 처리하기 위해 라디오와 SoC 간에 하나 이상의 GPIO를 가질 수 있습니다.
GNSS 라디오가 절전 모드에서 소비하는 전력이 1mW 미만인 경우 디바이스의 사양을 충족하는 모든 시스템 전원 레일에 GNSS 라디오를 연결할 수 있습니다.
GNSS 디바이스는 ACPI 네임스페이스에서 선언해야 하고, 전원 관리를 위한 GPIO는 ACPI 네임스페이스에서 디바이스 아래에 있는 _PS3 및 _PS0 제어 메서드를 통해 제어되어야 합니다. _PS3 및 _PS0 메서드는 위치 센서 드라이버에서 시작된 D3 및 D0 전환에 대한 응답으로 ACPI 드라이버에 의해 실행됩니다. 시스템 통합업체는 ACPI 네임스페이스에서 GPIO 작업 영역의 일부로 GPIO를 선언해야 합니다.
GNSS 수신기가 절전 모드에서 소비하는 전력이 1mW를 초과하는 경우 SoC의 ACPI 펌웨어로 제어되는 GPIO를 사용하여 켜고 끌 수 있는 전원 레일에 GNSS 수신기를 연결해야 합니다. 이 구성에서는 위치 센서 드라이버가 D3cold를 사용해야 합니다. 전환 가능한 전원 레일을 제어하기 위한 GPIO는 ACPI GPIO 운영 지역에 노출되어야 합니다. 시스템 통합업체는 _OFF 및 _ON 메서드를 비롯한 전환 가능한 전원 레일의 전원 리소스와 네임스페이스에서 GNSS 디바이스 아래에 있는 전원 리소스에 대한 참조를 설명해야 합니다.
Windows ACPI 드라이버는 위치 센서 드라이버가 D3로 전환될 때 _OFF 메서드를 평가합니다. 위치 센서 드라이버가 D0로 전환되면 Windows ACPI 드라이버는 전원 리소스 아래에서 _ON 메서드를 평가합니다. _OFF 및 _ON 메서드의 구현은 전환 가능한 전원 레일을 제어하는 GPIO를 전환하고 필요한 전원 시퀀싱 지연을 구현해야 합니다.
SoC에 통합된 GNSS
GNSS 디바이스가 SoC에 물리적으로 통합된 경우 통신 및 전원 관리 구현은 SoC 자체와 관련이 있습니다.
기본 GNSS 수신기에 대한 통신은 SoC 공급업체에서 제공하는 전송 드라이버를 통해 발생할 수 있지만, GNSS 디바이스는 여전히 ACPI를 통해 열거되어야 합니다. 마찬가지로 이 구성에서 위치 센서 드라이버는 모든 클라이언트의 연결이 끊어지면 절전 모드 또는 전원 제거 모드로 전환하도록 D3 전환을 구현해야 합니다. D3 전환을 통해 Windows OS 전원 관리 도구 및 진단에서 GNSS 디바이스의 전원 상태를 쉽게 관찰할 수 있습니다.
시스템 SoC에 통합된 GNSS 라디오를 활용하려는 시스템 통합업체는 SoC 공급업체와 긴밀히 협의하여 펌웨어, 드라이버 및 전원 관리 지원을 받아야 합니다.
USB 연결 MBB 라디오에 USB 복합 디바이스로 통합된 GNSS
시스템 디자이너는 임베디드 GNSS 수신기가 포함된 USB 연결 MBB 모듈을 통합하도록 선택할 수 있습니다. 이 하드웨어 구성에서 위치 센서 드라이버는 USB 복합 디바이스의 기능 중 하나로 USB 버스를 통해 직접 임베디드 GNSS 수신기와 통신합니다.
참고 GNSS 디바이스가 MBB 모듈에 있는 시스템은 통합 고려 사항을 신중하게 검토해야 합니다. 이러한 솔루션에 대한 하드웨어, 소프트웨어 및 펌웨어 디자인을 검토하려면 Microsoft 담당자에게 문의하세요.
이 구성에서 GNSS 디바이스는 MBB 모듈에 통합됩니다. GNSS 라디오는 처리, 전원 공급 장치 및 RF 안테나 구성 요소를 MBB 라디오와 공유할 수 있습니다. GNSS 라디오는 USB 복합 디바이스에서 하나의 인터페이스로 소프트웨어에 직접 노출됩니다. 위치 센서 드라이버는 위치 센서 드라이버 내부에 구현된 USB 드라이버 인터페이스를 사용하여 USB 버스를 통해 직접 GNSS 라디오와 통신합니다.
GNSS 하드웨어의 전원 관리는 GNSS 모듈에 대한 대역 내 통신을 통해 구동됩니다. GNSS 모듈 및 위치 센서 드라이버는 GNSS 라디오를 켜고 끄는 대역 내 메커니즘을 지원해야 합니다. 이 메커니즘은 SoC에서 MBB+GNSS 모듈로의 GPIO 사용에 의존해서는 안 됩니다.
마찬가지로, GNSS 모듈 및 위치 센서 드라이버는 디바이스를 D3 상태로 전환할 수 있도록 지원해야 합니다. 그래야만 USB 복합 디바이스가 USB 일시 중단(선택적 일시 중단) 상태로 전환할 수 있습니다. 복합 디바이스가 일시 중단되려면 USB 복합 디바이스의 모든 기능을 일시 중단해야 합니다. GNSS 기능과 전체 USB 복합 디바이스가 일시 중단 상태가 되려면 GNSS 디바이스가 절전 모드(D3) 모드여야 합니다.
참고 GNSS 디바이스와 드라이버가 선택적 일시 중단을 지원해야 합니다. 그렇지 않으면 SoC의 USB 호스트 컨트롤러가 저전력 모드로 전환할 수 없으며 최신 대기 모드인 동안 전원을 절약할 수 없습니다.
이 구성에서는 GNSS 디바이스가 USB 및 USB 복합 드라이버를 통해 열거되지만 ACPI 네임스페이스에 설명됩니다. 이 구성에서는 MBB 모듈의 GNSS 디바이스와 SoC 간의 GPIO 통신이 지원되지 않습니다. GNSS 디바이스는 사용자가 라디오를 사용하지 않도록 설정한 경우에도 플랫폼이 S0 시스템 전원 상태로 유지되는 전체 시간 동안 ACPI를 통해 Windows에 열거된 상태로 유지되어야 합니다. GNSS 디바이스는 시스템의 어느 부분에서도 정시에 USB 버스에서 사라지면 안 됩니다.
디바이스 서비스를 사용하여 USB 연결 MBB 라디오에 통합된 GNSS
시스템 디자이너는 임베디드 GNSS 수신기가 포함된 USB 연결 MBB 모듈을 통합하도록 선택할 수 있습니다. 이 하드웨어 구성에서 위치 센서 드라이버는 독립 실행형 USB 기능이 전체 MBB 모듈을 나타내는 복합 디바이스의 일부로 노출되는 GNSS 디바이스와 달리 모바일 광대역 디바이스 서비스 인터페이스를 통해 임베디드 GNSS 수신기와 통신합니다.
참고 이 구성은 지원되지 않습니다. 이 GNSS 디바이스 통합 방법을 선택하는 시스템 통합업체는 Microsoft 담당자에게 문의하여 올바른 구현의 유효성을 검사해야 합니다. MBB 모듈을 나타내는 USB 복합 디바이스의 일부로 GNSS 디바이스를 노출하는 것이 좋습니다.
이 구성에서 GNSS 디바이스는 MBB 모듈에 통합됩니다. GNSS 라디오는 처리, 전원 공급 장치 및 RF 안테나 구성 요소를 MBB 라디오와 공유할 수 있습니다. GNSS 라디오는 WindowsIMbnDeviceServices COM 인터페이스를 사용하여 액세스할 수 있는 디바이스 서비스 인터페이스를 통해 소프트웨어에 간접적으로 노출됩니다. 위치 센서 드라이버는 IMbnDeviceServices 인터페이스를 통해 GNSS 라디오와 통신합니다.
GNSS 하드웨어의 전원 관리는 MBB 모듈에 대한 디바이스 서비스 인터페이스를 통한 대역 내 통신에 의해 구동됩니다. GNSS 하드웨어는 라디오를 끄고 GNSS 디바이스를 저전력 모드로 전환할 수 있도록 디바이스 서비스 인터페이스를 통한 대역 내 메커니즘을 지원해야 합니다. 위치 센서 드라이버가 디바이스 서비스 인터페이스를 통해 이러한 메커니즘에 액세스할 수 있어야 합니다.
이 구성에서 GNSS 디바이스는 ACPI에 열거되고 ACPI 네임스페이스에 모바일 광대역 모듈의 자식으로 설명되어야 합니다. GNSS 디바이스는 ACPI 네임스페이스에서 디바이스 아래에 설명된 하드웨어 리소스가 없습니다.
위치 센서 드라이버는 이전 드라이버 구현 요구 사항 섹션에 설명된 것과 동일한 전원 관리 구현 지침을 계속 수행해야 합니다.
이 구성에서는 MBB 모듈의 GNSS 디바이스와 SoC 간의 GPIO 통신이 지원되지 않습니다. 모든 전원 관리 및 라디오 통신은 USB 버스를 통해 물리적으로 수행되며 디바이스 서비스 인터페이스를 통해 위치 센서 드라이버에 노출됩니다. 사용자가 라디오를 사용하지 않도록 설정한 경우에도 GNSS 디바이스는 시스템의 모든 부분에서 정시에 ACPI를 통해 Windows에 열거된 상태로 유지되어야 합니다.
이 하드웨어 구성을 구현할 때 시스템 통합업체는 MBB 모듈 공급업체와 긴밀히 협력하여 GNSS 디바이스가 ACPI 네임스페이스에 올바르게 노출되도록 하는 것이 좋습니다.
절전 모드 해제 문제
GNSS 디바이스는 절전 모드 해제 문제가 없습니다. GNSS 디바이스는 SoC를 저전력 상태에서 깨우는 기능을 지원하지 않습니다.
테스트 및 유효성 검사
GNSS 디바이스 공급업체, MBB 모듈 공급업체 및 시스템 통합업체는 다음 권장 사항에 따라 GNSS 디바이스 및 관련 소프트웨어 구성 요소의 전원 관리 구현을 테스트하고 유효성을 검사해야 합니다. 자세한 내용은 GNSS(Global Navigation Satellite System) 테스트 지침을 참조하세요.
위치 센서 전원 관리
시스템 통합업체는 모든 클라이언트의 연결이 끊어지거나 라디오가 비활성화되었을 때 GNSS 디바이스의 위치 센서 드라이버가 전원 관리 전환을 수행하고 D3 상태로 전환되는지 확인해야 합니다.
기본 테스트 사례는 다음과 같습니다.
- 최신 대기 모드로 전환하기 위해 화면이 꺼진 후 10초 이내에 위치 센서 드라이버가 D3로 전환되는지 관찰합니다.
- Windows 설정 애플리케이션에서 라디오가 꺼진 후 10초 이내에 위치 센서 드라이버가 D3로 전환되는지 관찰합니다.
- 최신 대기 모드를 종료하고 위치 API를 사용하는 애플리케이션을 시작한 직후 위치 센서 드라이버가 D0로 전환되는지 관찰합니다.
위치 센서 드라이버의 Dx 상태 전환을 관찰하는 가장 쉬운 방법은 Windows Performance Toolkit을 사용하여 다른 Windows 센서 디바이스와 비교하는 것입니다. 이 방법은 Windows 계측을 사용하여 D3 IRP가 GNSS 디바이스를 구성하는 장치 드라이버 스택을 통해 전환되는지 확인합니다. Windows 전원 관리자에는 디바이스 전원(Dx) IRP 계측을 포함하여 ETW(Windows용 이벤트 추적) 계측이 내장되어 있습니다. 수동 모드에서 이 정보를 보려면 WPT(Windows Performance Toolkit)를 받아서 테스트 중인 시스템에 설치합니다.
다음 명령을 사용하여 사용자 모드 XPerf 추적을 시작합니다.
관리자 명령 프롬프트를 엽니다.
\%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ 폴더를 찾습니다.
xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power
명령을 실행하여 Xperf를 시작합니다.전원 단추를 사용하여 시스템을 최신 대기 모드로 전환합니다.
120초 동안 기다립니다.
전원 단추를 사용하여 시스템을 최신 대기 모드에서 해제합니다.
60초 동안 기다립니다.
xperf.exe -stop power_session
명령을 실행하여 이벤트 로깅을 중지합니다.xperf.exe –i \user.etl > power.txt
명령을 실행하여 이진 추적 파일을 .csv 및 사람이 읽을 수 있는 형식으로 변환합니다.텍스트 편집기에서 power.txt 파일을 열고 GNSS 디바이스의 하드웨어 ID를 검색합니다. 디바이스 인스턴스 경로 아래의 디바이스 관리자에서 디바이스 속성의 세부 정보 탭을 선택하여 GNSS 디바이스의 하드웨어 ID를 확인할 수 있습니다. 아래 예제에서 GNSS 디바이스의 디바이스 인스턴스 경로는 ACPI\MST0731\2&daba3ff&0입니다.
GNSS 디바이스의 D3 IRP는 GNSS 디바이스의 디바이스 인스턴스 경로가 있는 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
이 이벤트는 power.txt 출력 파일의 시작 부분에 기록되어야 합니다. 위의 예제에서 0x868e2728 매개 변수는 D3 IRP 구조에 대한 포인터입니다. IRP 포인터가 이와 동일한 후속 이벤트를 찾으면 GNSS 디바이스를 구성하는 드라이버 스택을 통해 흐르는 D3 IRP의 뷰를 찾을 수 있습니다. IRP 포인터는 시스템 및 부팅 수명과 관계가 있습니다.
Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3
Microsoft-Windows-Kernel-Power/Driver/Start , 7605416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\gpsdrv"
Microsoft-Windows-Kernel-Power/Driver/Stop , 7605515, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0
Microsoft-Windows-Kernel-Power/Driver/Start , 7608351, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90, "\Driver\ACPI"
Microsoft-Windows-Kernel-Power/Driver/Stop , 7608416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90
Microsoft-Windows-Kernel-Power/Driver/Start , 7608424, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"
화면이 켜져 있을 때 GNSS 디바이스가 D0로 돌아가는지 확인하는 프로세스도 비슷합니다. GNSS 디바이스의 Microsoft-Windows-Kernel-Power/IRP/Start 이벤트는 대상 상태 0(D0)으로 기록됩니다. D0 IRP는 D3 IRP와 비슷한 방식으로 GNSS 디바이스 스택을 구성하는 드라이버를 통해 흐릅니다.
GNSS 전원 관리 검사 목록
시스템 통합업체, GNSS 라디오 공급업체 및 SoC 공급업체는 다음 검사 목록을 사용하여 시스템 전원 관리 디자인이 Windows 8 이상과 호환되는지 확인해야 합니다.
다음과 같은 구성 기본 순서에 따라 GNSS 디바이스를 최신 대기 모드 지원 플랫폼에 통합합니다.
- MBB 모듈(MBB가 장착된 시스템의 경우)과 통합하고 USB를 통해 연결합니다.
- SoC에 통합합니다(GNSS가 SoC에 있는 시스템의 경우).
- UART, I2C 또는 다른 저전력 버스에 연결된 SoC 외부에서 독립 실행형으로 사용합니다.
버스 연결 인터페이스를 포함한 절전 모드(라디오 끔) 평균 소비 전력이 1mW 미만인 GNSS 디바이스를 선택합니다.
GNSS 디바이스의 절전 모드(라디오 끔) 평균 소비 전력이 1mW를 초과하는 경우 시스템 통합업체와 GNSS 디바이스 공급업체는 연결된 애플리케이션 클라이언트가 없거나 사용자가 라디오를 끌 때 GNSS 디바이스에서 전원을 완전히 제거할 수 있게 지원해야 합니다.
GNSS 디바이스 공급업체는 연결된 클라이언트 수와 GNSS 라디오 상태에 따라 런타임 전원 관리를 구현하는 위치 센서 드라이버를 제공해야 합니다.
GNSS 디바이스 공급업체는 Windows 설정 애플리케이션에 GNSS 라디오를 노출하는 라디오 관리자 라이브러리를 제공해야 합니다.
위치 센서 드라이버는 공급업체에서 제공하는 라디오 관리자 라이브러리와 공급업체에서 제공하는 위치 센서 드라이버 간에 라디오 켜기/끄기 상태를 전달하는 프라이빗 인터페이스를 구현해야 합니다.
GNSS가 UART, I2C 또는 기타 저전력 버스를 통해 연결된 SoC 외부의 독립 실행형 디바이스인 경우 시스템 통합업체와 GNSS 디바이스 공급업체는 다음을 수행해야 합니다.
- GNSS 디바이스와 SoC 자체 간의 모든 GPIO를 문서화합니다.
- 전원 관리를 위한 모든 GPIO를 GPIO 작업 영역의 일부로 ACPI 네임스페이스에 노출합니다.
GNSS가 UART, I2C 또는 기타 저전력 버스를 통해 연결된 SoC 외부의 독립 실행형 디바이스이고 절전 모드에서 GNSS 디바이스의 평균 소비 전력이 1mW를 초과하는 경우 시스템 통합업체와 GNSS 디바이스 공급업체는 다음을 수행해야 합니다.
- GNSS 전원 도메인을 설명하는 ACPI 전원 리소스 및 _ON/_OFF 제어 메서드를 제공합니다.
- ACPI 네임스페이스에서 GNSS 디바이스 아래에 설명된 ACPI 전원 리소스를 참조하는 _PR0 및 _PR3 메서드를 제공합니다.
- 위치 센서 드라이버가 D3 전환을 수행하고 드라이버에서 D3cold를 사용하도록 합니다.
GNSS가 MBB 모듈에 포함된 경우 시스템 통합업체와 GNSS 디바이스 공급업체는 다음을 수행해야 합니다.
- GNSS 디바이스를 USB 복합 디바이스의 일부로 노출합니다.
- USB 버스를 통해 직접 GNSS 디바이스와 통신하는 위치 센서 드라이버를 제공합니다.
- 라디오 켜기/끄기 및 GNSS 디바이스의 모든 전원 관리를 대역 내에서 USB 버스를 통해 수행할 수 있는지 확인합니다. 이 하드웨어 구성에서는 GNSS 라디오 또는 전원 상태를 변경하는 데 GPIO를 사용할 수 없습니다.
- MBB 모듈을 설명하는 USB 디바이스 또는 MBB 및 GNSS 라디오를 모두 설명하는 USB 복합 디바이스가 최신 대기 모드 중에 USB 일시 중단 상태로 전환되는지 확인합니다.
- 디바이스 서비스 인터페이스를 통해 디바이스와 통신하는 경우에도 위치 센서 드라이버는 모든 클라이언트의 연결이 끊어지거나 라디오가 꺼지면 D3(절전 모드)로 전환해야 합니다.
- GNSS 디바이스가 모바일 광대역 디바이스 서비스 인터페이스를 통해 제어되는 경우(권장하지 않음) 하드웨어 리소스가 없는 시스템 ACPI 네임스페이스에서 GNSS 디바이스를 설명해야 합니다. GNSS 디바이스는 ACPI 네임스페이스에서 모바일 광대역 모듈의 자식으로 설명되어야 합니다.
GNSS 디바이스와 위치 센서 드라이버가 전원 관리를 올바르게 수행하는지 테스트하고 유효성을 검사합니다. 적어도 다음 테스트 사례의 유효성을 검사해야 합니다.
- 최신 대기 모드로 전환하기 위해 화면이 꺼진 후 10초 이내에 위치 센서 드라이버가 D3로 전환되는지 관찰합니다.
- Windows 설정 애플리케이션에서 라디오가 꺼진 후 10초 이내에 위치 센서 드라이버가 D3로 전환되는지 관찰합니다.
- 최신 대기 모드를 종료하고 위치 API를 사용하는 애플리케이션을 시작한 직후 위치 센서 드라이버가 D0로 전환되는지 관찰합니다.
절전 모드(D3) 상태에서 GNSS 디바이스의 소비 전력을 확인하여 평균 1mW 미만으로 만듭니다.