다음을 통해 공유


최신 대기 상태 플랫폼의 오디오 하위 시스템 전원 관리

모든 Windows PC에는 사용자가 실시간으로 고품질의 사운드를 듣고 녹음할 수 있는 오디오 하위 시스템이 있습니다. 연결된 대기 전원 모델을 지원하는 하드웨어 플랫폼은 일반적으로 기본 제공되는 절전 오디오 처리 장치가 있는 SoC(System on a Chip) 통합 회로를 기반으로 빌드됩니다.

오디오 처리 장치는 SoC의 주 프로세서(또는 프로세서)에서 오디오 처리를 오프로드합니다. 이러한 장치는 주 프로세서를 사용하지 않고 오디오 데이터를 처리할 수 있으므로 배터리 전원을 절약하기 위해 주 프로세서가 절전 상태로 전환된 후에도 사용자는 오디오를 계속 들을 수 있습니다.

이 비디오에서는 WPA(Windows Performance Analyzer)를 사용하여 화면을 끄고 오디오를 재생(절전 오디오 또는 LPA라고도 함)하는 동안 컴퓨터가 절전 상태로 전환되는지 확인하는 방법을 보여 줍니다.

다음 문서에서는 연결된 대기 플랫폼의 오디오 하위 시스템 전원 관리에 대해 설명합니다. 다음 설명에서 on-SoC 구성 요소는 SoC 칩에 통합된 구성 요소를 의미합니다. off-SoC 구성 요소는 SoC 칩 외부에 있습니다.

오디오 하위 시스템 개요

오프로드된 오디오 처리를 수행하는 SoC 함수 블록 외에도 연결된 각 대기 플랫폼에는 다음을 수행하는 코덱이라는 off-SoC 구성 요소가 포함되어 있습니다.

  • 디코딩된 디지털 스트림을 아날로그 사운드로 변환합니다.
  • 기본 제공 스피커를 구동합니다.
  • 외부에 연결된 아날로그 헤드폰을 구동합니다.

오디오 하위 시스템은 카메라 하위 시스템처럼 on-SoC 및 off-SoC 구성 요소를 모두 갖추고 있습니다. 그러나 Windows에서는 단일 오디오 드라이버가 On-SoC 오디오 처리 엔진과 off-SoC 코덱을 모두 관리해야 합니다. 이 단일 오디오 드라이버는 SoC에 통합된 구성 요소와 시스템 통합자가 선택할 수 있는 off-SoC 구성 요소를 모두 관리합니다. 따라서 시스템 통합자는 오디오 하위 시스템 통합 및 전원 관리에 대해 SoC 실리콘 공급업체와 긴밀히 협력해야 합니다.

오디오 하드웨어 공급업체는 오디오 드라이버를 포트 클래스(Portcls) 미니포트 드라이버로 구현해야 합니다. 오디오 드라이버는 Windows의 받은 편지함 구성 요소인 Portcls 시스템 드라이버 Portcls.sys와 함께 작동합니다.

다른 디바이스 클래스에 비해 오디오 하위 시스템은 플랫폼이 연결된 대기 전원 상태에 있을 때(즉, 화면이 꺼져 있을 때) 전원 관리를 수행하는 방식에 있어서 고유합니다. 플랫폼이 대기 상태로 연결된 경우 시스템은 오디오 사운드를 생성하여 사용자에게 이벤트(예: 새 이메일 도착)를 실시간으로 알릴 수 있습니다. 또한 사용자는 시스템 디스플레이를 끈 다음 애플리케이션에서 재생 중인 오디오를 계속 들을 수 있습니다. 이러한 기능은 시스템이 연결된 대기 상태일 때 오디오 하위 시스템을 꺼야 하는 간단한 전원 관리 전략으로 수행할 수 없습니다. 대신, 시스템이 ACPI 종료(S5) 상태인 경우를 제외하고 오디오 하위 시스템의 전원 관리를 항상 런타임 유휴 상태로 수행해야 합니다(필요한 경우에만 켜지도록).

오디오 드라이버는 Windows 오디오 인프라 및 PortCls 시스템 드라이버와 긴밀하게 협력하여 런타임 유휴 전원 관리를 수행합니다. PortCls는 오디오 장치의 모든 액세스(예: I/O 및 속성 액세스)를 모니터링하고 각 액세스에 대한 유휴 타이머를 다시 설정합니다. 유휴 타이머가 만료되면 PortCls는 오디오 장치(오디오 드라이버의 도움으로)를 절전(D3) 상태로 전환합니다. PortCls는 새 액세스 활동이 발생하면 오디오 장치를 활성(D0) 상태로 반환합니다.

또한 PortCls는 Windows 전원 프레임워크(PoFx)에 등록되므로 시스템 PEP(전원 엔진 플러그 인)에 오디오 장치 전원 상태 변경을 알릴 수 있습니다. 이러한 알림을 통해 PEP는 오디오 처리 장치와 다른 SoC 기능 블록 간에 공유될 수 있는 클록 및 전원 레일을 안전하게 끌 수 있는 시기를 알 수 있습니다.

오디오 하위 시스템을 사용하지 않는 경우 오디오 하위 시스템에서 총 1밀리와트 미만을 사용하는 절전 상태여야 합니다. 이 합계에는 오디오 처리 장치, off-SoC 코덱 및 추가 오디오 회로(예: 스피커 및 헤드폰용 증폭기)에서 사용하는 전원이 포함됩니다.

오디오 하위 시스템 하드웨어 토폴로지

오디오 하위 시스템은 여러 on-SoC 및 off-SoC 구성 요소로 구성되지만 ACPI 네임스페이스에서 단일 디바이스로 Windows에 표시됩니다.

오디오 처리 장치는 SoC에 있습니다. 다른 공급업체의 SoC에는 기능, 전력 소비 및 성능에 따라 달라지는 오디오 처리 장치가 있습니다. 오디오 처리 장치는 오디오 오프로딩을 수행합니다. 즉, 주 프로세서를 사용하지 않고 오디오 스트림을 처리(예: 오디오 효과 혼합 및 적용)합니다. 대기 시간에 민감하지 않은 오디오 재생의 경우 오디오 처리 장치가 주 프로세서보다 전력을 덜 사용하므로 주 프로세서에서 오디오를 오프로딩하는 것이 좋습니다.

오프로드된 오디오에 대한 자세한 내용은 하드웨어 오프로드된 오디오 처리를 참조하세요.

이 시스템에는 디지털 오디오 스트림을 아날로그 출력으로 변환하여 기본 제공 스피커 또는 외부 헤드폰을 구동하는 off-SoC 오디오 코덱도 포함되어 있습니다. 이 코덱에는 스피커 및 헤드폰용 통합 아날로그 증폭기가 포함될 수 있습니다. 또는 불연속 증폭기를 대신 사용할 수 있습니다. 일반적인 코덱은 on-SoC 오디오 처리 장치에 대해 다음과 같은 연결을 사용합니다.

  • 디지털 오디오 인터페이스(I2S 또는 유사한 직렬 버스).
  • 제어 인터페이스(일반적으로 I2C 또는 유사한 직렬 버스).
  • 코덱 상태가 변경되는 경우 전원 관리 회로를 제어하고 SoC를 중단하는 하나 이상의 GPIO 핀.

이러한 연결이 다음 블록 다이어그램에 나와 있습니다.

오디오 장치

Windows 관점에서 오디오 처리 장치와 오디오 코덱이 함께 오디오 장치를 구성합니다. 오디오 장치는 ACPI 네임스페이스에서 단일 디바이스 개체로 열거되어야 합니다.

오디오 하위 시스템은 단일 오디오 드라이버를 통해 Windows에 노출되어야 하지만 오디오 드라이버가 두 개 이상의 개별 드라이버로 분해되는 드라이버 확장 모델을 SoC 공급업체가 옵션으로 채택할 수 있습니다. 예를 들어 오디오 코덱을 직접 관리하는 제어 소프트웨어가 주 오디오 드라이버와 분리된 코덱 드라이버에 배치될 수 있습니다. 이 경우 주 오디오 드라이버는 코덱 드라이버와 통신하여 코덱을 간접적으로 관리합니다. 이 드라이버 확장 모델에 대한 세부 정보는 이 문서에서 다루지 않으며, SoC 공급업체의 오디오 드라이버 독점 기능에 대한 것입니다. 시스템 통합자는 SoC 실리콘 공급업체와 직접 협력하여 오디오 하위 시스템에서 이러한 독점 기능을 구현해야 합니다.

전원 관리 모드

오디오 하위 시스템은 다음 두 가지 전원 관리 모드를 지원해야 합니다.

  • 활성 모드: 사용자를 위해 오디오가 능동적으로 스트리밍됩니다.
  • 절전 모드: 오디오 처리 장치가 꺼지고, off-SoC 코덱이 절전 모드로 배치되고, 결합된 오디오 하위 시스템 구성 요소가 1밀리와트 미만의 전력을 사용합니다.

다음 표에서는 이 두 가지 전력 모드에 대해 설명합니다.

모드 설명 디바이스 전원 상태(Dx) 평균 전력 소비량 활성으로 대기 시간 종료 전환 메커니즘
활성(스트리밍) 오디오 처리 장치는 오디오를 능동적으로 스트리밍하고, 코덱은 헤드폰, 기본 제공 스피커 또는 원격 HDMI 출력 장치와 같은 오디오 엔드포인트에 아날로그 또는 디지털 오디오를 제공합니다. D0

<= 100밀리와트

(오디오 처리 + 코덱)

해당 없음

Portcls에서 D0으로 전환을 시작합니다.

애플리케이션 또는 시스템 서비스가 오디오 스트리밍을 시작할 때 발생합니다.

Sleep 잭 삽입 또는 제거를 감지하기에 충분한 대기 전원인 경우를 제외하고 오디오 처리 장치가 오디오를 스트리밍하지 않고, 코덱이 작동하지 않습니다. D3

<= 1밀리와트

(권장)

시스템 시나리오에 따라 <= 35밀리초 또는 <= 300밀리초입니다.

(필수)

Portcls에서 시작한 D3으로 전환을 시작합니다.

모든 애플리케이션이 오디오 스트리밍을 완료하고 드라이버 제공 또는 시스템 제공 유휴 제한 시간이 만료될 때 발생합니다.

일부 SoC 디자인에서 오디오 처리 장치는 비디오 디코딩 및 그래픽 처리와 공유되는 다기능 블록입니다. 이러한 디자인을 사용하면 오디오가 능동적으로 스트리밍되지 않을 때 오디오 처리 장치가 켜지는 상황이 발생할 수 있습니다.

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

오디오 하위 시스템의 기본 소프트웨어 전원 관리 메커니즘은 PortCls에 기본 제공되는 런타임 유휴 검색입니다. 런타임 유휴 검색을 통해 PortCls는 애플리케이션 오디오 스트리밍 활동을 관찰하여 활성 및 절전 전원 모드 간에 오디오 장치를 전환하는 시기를 결정할 수 있습니다. 또한 PortCls를 사용하면 오디오 드라이버와 SoC 공급업체에서 제공하는 PEP(전원 엔진 플러그 인) 간의 독점 확장 메커니즘을 통해 오디오 처리 단위의 성능 상태를 관리할 수 있습니다.

런타임 유휴 검색

오디오 하위 시스템의 구성 요소는 오디오 하위 시스템이 지정된 시간 제한 간격 동안 유휴 상태로 전환된 후 절전 모드로 전환됩니다.

SoC 공급업체에서 제공하는 오디오 드라이버는 다음 두 가지 기본 유휴 시간 제한 설정을 등록해야 합니다.

  • PerformanceIdleTime – 하드웨어 플랫폼이 AC 전원에 연결된 경우 이 시간 제한 간격을 사용합니다.
  • ConservationIdleTime – 플랫폼이 배터리 전원으로 실행 중인 경우 이 시간 제한 간격을 사용합니다.

유휴 시간 제한 설정은 오디오 드라이버의 PowerSettings 레지스트리 키 아래에 있는 레지스트리 항목에 저장됩니다. 자세한 내용은 오디오 장치 클래스 비활성 타이머 구현을 참조하세요.

PerformanceIdleTime과 ConservationIdleTime 시간 제한을 각각 1초로 설정하려면 다음 .inf 지시문을 사용해야 합니다.

[MyAudioDevice.AddReg]
HKR,PowerSettings,ConservationIdleTime,1,01,00,00,00
HKR,PowerSettings,PerformanceIdleTime,1,01,00,00,00
HKR,PowerSettings,IdlePowerState,1,03,00,00,00

PortCls는 플랫폼이 AC 전원과 배터리 전원 간에 전환될 때 Windows 커널 전원 관리자와 협력하여 PerformanceIdleTime과 ConservationIdleTime 시간 제한 값 간에 자동으로 전환합니다.

시스템이 연결된 대기 상태(즉, 화면이 꺼진 상태)이고 오디오 재생이 시작되지 않은 경우 PortCls는 어댑터 드라이버가 .inf 파일에 지정한 시간 제한 설정에 관계없이 항상 1초의 유휴 시간 제한을 사용합니다.

SoC 공급업체에서 제공하는 오디오 드라이버도 IdlePowerState 설정을 등록해야 유휴 시간 제한 만료 시점으로 전환할 전원 상태를 지정할 수 있습니다. 연결된 모든 대기 플랫폼에서 오디오 드라이버는 유휴 시간이 초과하는 경우 전환할 전원 상태로 D3를 등록해야 합니다. D3 상태를 지정하려면 이전 예제의 AddReg 지시문에서 IdlePowerState 값을 03으로 설정합니다.

유휴 제한 시간이 만료되면 PortCls는 오디오 드라이버의 IAdapterPowerManagement3::PowerChangeState3 메서드를 호출하여 오디오 장치가 절전 모드로 전환(NewPowerState = PowerDeviceD3)할 준비를 하도록 드라이버에 알립니다. 오디오 드라이버는 오디오 처리 장치에 대한 컨텍스트를 저장하고 코덱을 평균적으로 1밀리와트 미만을 사용하는 절전 모드에 배치해야 합니다. 절전 모드에서 코덱은 오디오 잭 삽입/제거를 감지하고 SoC의 주 프로세서에 대한 수준 트리거 인터럽트를 생성하기에 충분한 전원을 계속 유지해야 합니다.

연결된 대기 상태에서 애플리케이션 스트리밍, 시스템 사운드 생성 또는 청각적 알림으로 인해 오디오 재생이 필요한 경우 PortCls는 오디오 드라이버의 PowerChangeState3 메서드를 호출하여 활성(D0) 전원 상태(NewPowerState = PowerDeviceD0)에서 작동할 수 있게 오디오 장치를 구성하도록 드라이버에 알립니다. 오디오 드라이버는 오디오 처리 장치에 대한 컨텍스트를 복원하고 코덱을 다시 사용하도록 설정해야 합니다.

PortCls는 오디오 드라이버의 IAdapterPowerManagement3::D3ExitLatencyChanged 메서드를 호출하여 절전(D3) 상태에서 활성(D0) 상태로 전환을 허용할 수 있는 최대 대기 시간 변경에 대해 드라이버에 알립니다. PortCls는 오디오 드라이버의 D3ExitLatencyChanged 메서드를 호출하여 최대 대기 시간을 35밀리초 또는 300밀리초로 설정합니다. 오디오 드라이버는 최대 대기 시간 허용치를 준수해야 하며 PortCls가 D3ExitLatencyChanged 메서드에 지정한 값보다 다시 시작 대기 시간이 커야 하는 절전 상태로 전환하면 안 됩니다.

코덱 전원 관리

SoC 공급업체에서 제공하는 오디오 드라이버도 off-SoC 오디오 코덱을 구성하고 전원을 관리합니다. 이 드라이버는 일반적으로 SoC에서 I²C 또는 기타 SPB(Simple Peripheral Bus) 연결을 통해 오디오 코덱을 제어합니다. 또한 코덱 디바이스의 인터럽트를 처리해야 합니다.

오디오 하위 시스템이 D3(절전) 상태로 전환되면 오디오 드라이버는 코덱을 절전 모드로 전환해야 합니다.

오디오 하위 시스템이 D0(활성) 상태로 전환되면 오디오 드라이버는 코덱을 활성 전원 모드로 전환해야 합니다.

Windows PoFx(Power Framework) 및 PEP(전원 엔진 플러그인)

PortCls는 Windows 전원 관리 프레임워크에 등록되어 있으므로 SoC 공급업체에서 제공하는 PEP는 활성(D0)과 절전(D3) 전원 모드 간의 오디오 장치 전환에 대한 알림을 받습니다. 많은 SoC 디자인에서 오디오 처리 장치에 대한 클록 및 전원 레일은 다른 on-SoC 기능 블록과 공유됩니다. SoC 공급업체에서 제공하는 PEP는 SoC별 클록 및 전원 토폴로지를 알고 있으며, 절전 모드에 있을 때 시계를 멈추거나 오디오 처리 장치와 연결된 전원 레일을 끄기 위해 적절한 조치를 취합니다.

또한 PortCls는 오디오 드라이버가 PEP와 직접 통신하여 세분화된 전원 관리를 수행할 수 있도록 컨텍스트 공유라는 비공개 메커니즘을 지원합니다. 예를 들어 오디오 드라이버는 컨텍스트 공유를 사용하여 PEP에 현재 오디오 스트림 콘텐츠 형식 및 비트 전송률을 알릴 수 있습니다. PEP는 이 정보를 사용하여 오디오 처리 장치의 클록 주파수를 결함 없이 현재 오디오 스트림을 처리하는 데 필요한 최소값으로 스케일 다운합니다.

컨텍스트 공유 인터페이스는 GUID 식별자를 사용하여 간단한 입출력 버퍼로 정의되며, 다른 확장 가능한 Windows 전원 관리 인터페이스와 유사합니다. 미니포트 드라이버와 PEP 간의 컨텍스트 공유에 대한 자세한 내용은 PortCls 개인 PEP 컨텍스트 공유를 참조하세요.

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

연결된 대기 플랫폼에서 Windows는 오디오 하위 시스템에 대한 단일 하드웨어 전원 관리 구성을 지원합니다.

예상되는 구성에서 오디오 처리 장치는 SoC에 있으며 외부 오디오 코덱은 SoC 호환 디지털 오디오 인터페이스, I²C와 같은 SPB(Simple Peripheral Bus) 및 하나 이상의 GPIO 핀을 통해 SoC에 연결됩니다. 오디오 코덱 및 외부 논리는 절전 모드에서 1밀리와트 이하를 사용하는 것이 좋습니다.

다음 블록 다이어그램은 예상되는 하드웨어 구성, 오디오 장치 드라이버 스택 및 사용자 모드 구성 요소를 보여 줍니다.

오디오 스택

오디오 하위 시스템에는 코덱 뒤에 있어 운영 체제 및 해당 드라이버에 표시되지 않는 구성 요소가 있을 수 있습니다. 예를 들어 이러한 구성 요소에는 스피커 및 헤드폰용 증폭기가 포함될 수 있습니다. 이러한 구성 요소는 플랫폼과 관련된 것으로, Windows 인증 프로그램의 일부로 설명된 요구 사항 내에서 시스템 통합자가 선택할 수 있습니다.

시스템 통합자는 APCI 네임스페이스 계층 구조의 루트에 SoC 오디오 장치를 열거해야 합니다. 오디오 처리 장치 및 외부 코덱에 필요한 모든 메모리, I/O, GPIO 및 I²C(또는 기타 SPB) 리소스는 네임스페이스의 디바이스 아래에 있는 _CRS 개체에 나열되어야 합니다. 시스템 통합자 및 ACPI 펌웨어 개발자는 오디오 드라이버 개발자와 소통하여 GPIO 핀과 같은 하드웨어 리소스 주문 규칙을 이해해야 합니다. 예를 들어 두 개의 GPIO 리소스를 수신하는 드라이버는 리소스 목록에 표시되는 순서에 따라 이 둘을 구분합니다. 자세한 내용은 GPIO 기반 하드웨어 리소스를 참조하세요.

ACPI 드라이버(Acpi.sys)는 디바이스 전원 IRP가 오디오 스택을 통해 흐를 때 활성(D0)과 절전(D3) 전환을 관찰할 수 있지만 시스템 통합자가 오디오 코덱을 전원 리소스의 일부로 설명하거나 _PS0 및 _PS3 ACPI 제어 메서드를 사용하여 코덱 전원 상태를 변경해서는 안 됩니다. 절전 모드에서 코덱은 잭 삽입 및 제거를 감지하기 위해 항상 켜져 있을 수 있을 정도의 낮은 전력으로 작동해야 합니다.

오디오 코덱 및 외부 증폭기는 시스템이 ACPI 종료(S5) 상태일 때를 제외하고 항상 전원이 켜지는 전원 레일에 배치해야 합니다. GPIO 핀을 사용하여 요청 시 증폭기를 사용하거나 사용하지 않도록 설정할 수 있습니다. 증폭기는 코덱 또는 SoC에서 GPIO 핀을 사용하여 제어할 수 있습니다.

코덱 자체는 항상 전원을 공급하여 절전 모드인 경우에도 잭 삽입 및 제거를 감지할 수 있어야 합니다. 코덱은 헤드폰 잭 삽입 및 제거를 처리하기 위해 가장 깊은 유휴 상태에서 SoC의 절전 모드를 해제할 수 있는 인터럽트를 생성해야 합니다.

절전 모드 해제 문제(헤드폰 및 마이크 잭 감지)

오디오 하위 시스템은 언제든지 발생할 수 있는 오디오 출력 장치의 상태 변경을 처리해야 합니다. 가장 일반적인 오디오 장치 상태 변경은 기본 제공 헤드폰 잭에 출력 장치를 삽입하고 잭에서 이 장치를 제거하는 것입니다. 마이크 및 디지털 신호 포트를 비롯하여 기타 연결된 오디오 포트에 대해서도 잭 삽입 및 제거를 감지해야 합니다.

항상 오디오 스택은 잭 삽입 및 제거를 감지할 수 있어야 합니다. 오디오 코덱의 인터럽트 선은 항상 전원이 공급되고 항상 가장 깊은 유휴 상태에서 SoC의 절전 모드를 해제할 수 있는 GPIO 핀에 연결되어야 합니다. 잭 감지를 통해 Windows에서 시스템이 연결된 대기 상태일 때를 포함하여 항상 오디오 입력 및 출력 장치에 대한 최신 정보를 실시간으로 유지할 수 있습니다. 예를 들어 사용자가 헤드폰 잭에 플러그를 끼우면 Windows에 즉시 알림이 전송됩니다. 이 알림에 대한 응답으로 향후 연결된 대기 알림 경고 소리가 플랫폼의 기본 제공 스피커 대신 헤드폰으로 라우팅됩니다.

앞에서 설명한 대로 시스템 펌웨어는 오디오 장치에 하드웨어 리소스 집합을 할당합니다. 이러한 리소스는 ACPI _CRS 개체에 설명되어 있으며 운영 체제는 이러한 리소스 목록을 오디오 드라이버에 전달합니다. 이 리소스 목록에는 오디오 출력 장치의 상태 변경(예: 헤드폰 삽입)을 감지하는 데 사용되는 모든 GPIO 인터럽트가 포함됩니다. 이러한 인터럽트는 시스템 ACPI 펌웨어에서 절전 모드 해제 소스로 표시되어야 합니다. 오디오 드라이버는 이러한 각 절전 모드 해제 인터럽트에 대한 인터럽트 처리기를 추가해야 합니다. 인터럽트 처리기는 신호를 받은 인터럽트 기반의 오디오 장치, 오디오 코덱 및 오디오 드라이버 상태를 필요에 따라 업데이트해야 합니다.

_CRS 개체의 리소스 순서는 오디오 드라이버 개발자가 정의한 디바이스별 규칙을 기반으로 합니다. 예를 들어 드라이버가 두 개의 인터럽트 리소스를 수신하는 경우 드라이버는 리소스 목록에서 발생하는 순서에 따라 두 리소스를 구분합니다. ACPI 펌웨어 개발자는 동일한 순서를 사용하여 ACPI 펌웨어에서 이러한 리소스를 설명해야 합니다.

여러 하드웨어, 펌웨어 및 소프트웨어 하위 시스템이 협업하여 오디오 잭 삽입 및 제거 감지가 올바르게 작동하도록 해야 합니다. 시스템 통합자 및 오디오 드라이버 개발자는 다음 구현 지침을 준수해야 합니다.

하드웨어 및 SoC

  • 오디오 코덱 하드웨어는 시스템이 연결된 대기 상태일 때를 포함하여 시스템이 전원이 켜져 있는 헤드폰, 마이크 및 기타 잭 삽입 및 제거 이벤트를 항상 감지해야 합니다.
  • 오디오 코덱 하드웨어는 전원을 거의 사용하지 않으면서(평균 1밀리와트 미만) 잭 삽입 및 제거를 감지할 수 있어야 합니다.
  • 오디오 코덱 인터럽트는 가장 깊은 전원 상태에서 SoC의 절전 모드를 해제할 수 있는 SoC의 GPIO 핀에 연결되어야 합니다.

ACPI 펌웨어

  • 오디오 장치는 ACPI 네임스페이스에서 설명해야 합니다.
  • 잭 삽입을 감지하는 데 사용되는 GPIO 선은 ACPI 펌웨어에서 배타적 및 절전 모드 해제 인터럽트로 설명해야 합니다. GpioInt 설명자 매크로를 사용하고 Shared 인수를 ExclusiveAndWake로 설정합니다.
  • 오디오 장치의 하드웨어 리소스는 오디오 드라이버에서 예상하는 순서대로 나열되어야 합니다.

오디오 드라이버 소프트웨어

  • 오디오 드라이버는 인터럽트 처리기를 GPIO 절전 모드 해제 인터럽트에 연결해야 합니다.
  • 오디오 드라이버가 인터럽트를 처리할 때 오디오 입출력 장치의 상태를 평가하고 적절한 작업을 수행합니다.

테스트 및 유효성 검사

시스템 통합자는 WPA(Windows Performance Analyzer)를 사용하여 오디오 장치가 활성(D0)과 절전(D3) 상태 간에 예상대로 런타임 유휴 전원 관리 및 전환을 올바르게 수행하는지 확인할 수 있습니다. WPA는 Microsoft Connect 웹 사이트에서 사용할 수 있습니다. WPA 및 WPA 전원 관리 확장 프로그램을 가져오는 데 도움이 필요하면 Microsoft 담당자에게 문의하세요. 또한 시스템 통합자는 WPA 전원 관리 분석 도구 패키지를 가져와야 합니다. 이 패키지에는 시스템 전원 관리 분석을 사용하도록 설정하는 WPA에 대한 확장 프로그램이 포함되어 있습니다.

WPA는 Windows 커널 및 PortCls를 포함한 기타 Windows 구성 요소에 기본 제공되는 ETW(Windows용 이벤트 추적) 계측을 사용합니다. ETW 추적을 사용하기 위해 추적 공급자 집합이 사용하도록 설정되고 테스트 시나리오가 실행되는 동안 해당 이벤트가 로그 파일에 기록됩니다. 시나리오가 완료되면 추적 공급자가 중지됩니다. WPA를 사용하면 테스트 중인 시나리오에서 생성된 로그 파일의 후처리 및 시각적 분석을 사용할 수 있습니다.

WPA가 설치된 시스템에서 일련의 명령을 사용하여 오디오 장치의 전원 관리 유효성을 검사하기 위한 전원 관리 계측을 수집할 수 있습니다. Xperf.exe 도구는 \%Program Files%\Windows Kits\8.0\Windows Performance Analyzer 폴더에 설치됩니다.

전원 관리 ETW 추적을 시작하려면 관리자 권한으로 명령 프롬프트 창을 열고 WPA가 포함된 디렉터리로 변경한 다음 아래 명령을 실행합니다.

>xperf -start powertracesession -on Microsoft-Windows-Kernel-Power
>xperf -capturestate powertracesession Microsoft-Windows-Kernel-Power

이러한 명령은 Windows에 Microsoft-Windows-Kernel-Power ETW 이벤트 공급자를 사용하도록 설정하고 Microsoft-Windows-Kernel-Power 공급자에서 이벤트의 초기 상태를 캡처하도록 지시합니다.

ETW 추적이 시작되면 개발자는 시스템 시나리오를 실행하여 오디오 장치가 활성(D0)과 절전(D3) 전원 모드 간에 올바르게 전환되는지 확인해야 합니다. 개발자는 다음 시나리오에서 오디오 장치의 유효성을 검사해야 합니다.

  • 오디오 장치를 D3 상태에서 D0 상태로 전환하는 애플리케이션을 시작합니다.
  • 모든 오디오 애플리케이션을 닫고 1초 후에 오디오 장치가 D0 상태에서 D3 상태로 전환됩니다.
  • 시스템이 연결된 대기 상태인 경우 오디오 장치는 D3 상태로 유지됩니다.
  • 연결된 대기 상태에서 청각적 알림이 생성되면 오디오 장치가 D3에서 D0으로 전환되고 오디오가 재생된 다음 1초 후에 D3으로 돌아갑니다.

이러한 테스트 시나리오가 완료되면 다음 명령 중지 ETW 추적 수집을 사용합니다.

>xperf -stop powertracesession -d trace.etl

WPA를 사용하여 결과 Trace.etl 파일을 엽니다. 명령줄에서 WPA를 시작하려면 Wpa.exe 명령을 입력합니다.

WPA 도구의 Graph 탐색기 목록에서 디바이스 Dstate 그래프를 선택하면 다음 보기가 표시됩니다.

Graph 탐색기 목록의 디바이스 d-state 그래프

이 보기에서 디바이스는 ACPI 이름(예: \_SB)으로 식별됩니다. AUDI) 또는 디바이스 인스턴스 경로(예: ACPI\MSFT0731\4%ffff367&2). ACPI 이름과 디바이스 인스턴스 경로는 모두 디바이스 Dstate 그래프에 대한 요약 필드에 나열됩니다.

오디오 장치에서 수행한 D 상태 전환을 보려면 요약 테이블에서 디바이스 이름을 찾고, 이름을 마우스 오른쪽 단추로 클릭한 다음, 선택 항목으로 필터링을 선택합니다. 결과 그래프에는 다음 스크린샷과 같이 오디오 장치의 D 상태 전환만 표시됩니다.

d 상태 전환

이 예제 추적은 추적 시작 후 약 290초에서 5초를 제외하고 전체 추적 기간 동안 오디오 장치가 D3 상태(세로 축 좌표에 3으로 표시됨)에 있음을 보여 줍니다.

전원 관리 검사 목록

시스템 통합업체 및 SoC 공급업체는 다음 검사 목록을 사용하여 오디오 하위 시스템 전원 관리 디자인이 Windows 8.1과 호환되는지 확인해야 합니다.

  • 시스템 통합자는 SoC 공급업체와 긴밀히 협력하여 오디오 하위 시스템 장치를 통합해야 합니다.

  • SoC 공급업체에서 개발한 오디오 드라이버는 다음을 수행해야 합니다.

    • 시스템이 AC 전원 및 배터리 전원에서 실행되는 경우 런타임 유휴 시간 제한을 설정합니다. 오디오 드라이버에서 PerformanceIdleTime 값과 ConservationIdleTime 값을 1초로 설정해야 합니다.

    • IdlePowerState 값을 D3으로 설정합니다.

    • 오디오 드라이버의 .inf 파일에서 IdlePowerState, PerformanceIdleTime 및 ConservationIdleTime을 다음 값으로 설정합니다.

      [MyAudioDevice.AddReg]
      HKR,PowerSettings,ConservationIdleTime,1,01,00,00,00
      HKR,PowerSettings,PerformanceIdleTime,1,01,00,00,00
      HKR,PowerSettings,IdlePowerState,1,03,00,00,00
      
    • PortCls가 D3 디바이스 전원 상태로 드라이버의 IAdapterPowerManagement3::PowerChangeState3 메서드를 호출하면 오디오 드라이버는 모든 오디오 처리 장치 컨텍스트를 저장하고 코덱을 절전 모드로 전환해야 합니다.

    • PortCls가 D0 디바이스 전원 상태로 드라이버의 PowerChangeState3 메서드를 호출하면 오디오 드라이버는 모든 오디오 처리 장치 컨텍스트를 복원하고 코덱을 다시 사용하도록 설정해야 합니다.

    • 오디오 드라이버는 PortCls가 IAdapterPowerManagement3:D3ExitLatencyChanged 메서드에 제공한 D3 종료 대기 시간 요구 사항을 위반하는 전원 상태를 사용하지 않아야 합니다.

    • 오디오 드라이버는 외부 코덱의 구성 및 전원 관리를 처리해야 합니다.

    • 코덱이 잭 삽입 또는 제거를 감지하면 오디오 드라이버가 외부 코덱의 수준 트리거 인터럽트를 처리해야 합니다.

  • SoC 공급업체는 다음을 수행하는 PEP(전원 엔진 플러그인)를 제공해야 합니다.

    • 오디오 드라이버가 절전(D3) 모드로 전환되면 오디오 처리 장치를 절전 상태로 전환합니다.
    • 오디오 드라이버가 활성(D0) 전원 모드로 전환되면 오디오 처리 장치에 필요한 모든 클록 및 전원 레일을 켭니다.
    • 오디오 형식, 콘텐츠 형식 및 비트 전송률에 따라 필요한 처리 작업 수준에 따라 오디오 처리 장치에 제공된 클록 및 전압의 크기를 올바르게 조정합니다.
  • 오디오 하위 시스템에 대한 하드웨어 및 펌웨어 플랫폼을 개발하려면 시스템 통합자가 다음을 수행해야 합니다.

    • 절전 모드에서는 1밀리와트 미만을 사용하지만 잭 삽입 및 제거 이벤트를 감지할 수 있는 코덱을 사용합니다.
    • 시스템이 ACPI 종료(S5) 상태인 경우를 제외하고 항상 켜져 있는 시스템 전원 레일에 코덱을 배치합니다.
    • ACPI 네임스페이스 계층 구조의 루트에 오디오 하위 시스템을 단일 디바이스로 열거하도록 ACPI 펌웨어를 디자인합니다.
    • 오디오 드라이버에서 예상하는 메모리, 인터럽트, I/O, GPIO 및 I²C 리소스 순서 규칙을 확인하고 리소스가 ACPI _CRS 개체에 동일한 순서로 나열되는지 확인합니다.
  • 오디오 하위 시스템의 전원 관리를 테스트하고 유효성을 검사하려면 시스템 통합자가 다음을 수행해야 합니다.

    • 애플리케이션이 오디오 하위 시스템을 사용하지 않거나 사용자에 대한 오디오를 생성하지 않는 경우 오디오 드라이버가 D3 전원 상태로 전환되는지 확인합니다.
    • 대기 상태에서 유휴 상태인 경우 화면이 꺼진 경우 오디오 재생 중을 포함하여 애플리케이션 또는 시스템에서 오디오를 생성할 때 오디오 드라이버가 활성 D0 전원 상태로 유지되는지 확인합니다.
    • 절전 모드에서 절전 모드로 전환할 때(전원 단추 누르기, 애플리케이션 또는 시스템이 오디오를 생성할 때 모든 오디오 스트림이 OS에서 닫히고 오디오 드라이버가 D3 전원 상태로 전환되는지 확인합니다(OS 24H2의 새로운 기능).
    • HLK(Windows 하드웨어 랩 키트)에 제공된 테스트를 사용하여 오디오 재생이 글리치 없는 오류 없는 방식으로 수행되는지 확인합니다.
    • 시스템이 연결된 대기 상태일 때 잭 감지가 올바르게 작동하고 사용자가 헤드폰 잭에 플러그를 꽂거나 잭에서 플러그를 뽑을 때 오디오가 헤드폰 또는 스피커로 올바르게 라우팅되는지 확인합니다.
    • 오디오 처리 장치, 외부 코덱 및 추가 아날로그 증폭 회로에서 사용하는 전력을 측정합니다. 전체 오디오 하위 시스템이 절전(D3) 전원 상태일 때 1밀리와트 미만을 사용하는지 확인합니다.