다음을 통해 공유


ACPI 배터리 및 전원 하위 시스템 펌웨어 구현

Windows 플랫폼은 ACPI 사양에 설명된 대로 표준화된 제어 메서드 인터페이스를 사용하여 ACPI를 통해 펌웨어에서 배터리 디바이스와 AC 어댑터를 노출해야 합니다.

모든 모바일 Windows 플랫폼에는 하나의 전원 디바이스와 하나 이상의 배터리가 있어야 합니다. 이러한 하위 시스템의 정보는 사용자에게 전원 상태를 전달하는 데 사용됩니다. 이 상태에는 플랫폼이 AC 또는 DC 전원으로 실행 중인지 여부, 각 배터리의 충전 수준 및 배터리 충전 상태와 같은 정보가 포함됩니다. Windows 전원 관리자는 이 정보를 집계하여 Windows 배터리 미터 및 기타 전원 관리 구성 요소에서 사용할 수 있도록 합니다.

이 항목에서는 플랫폼이 Windows 전원 관리자에 전원 하위 시스템 정보를 노출하는 방법에 대해 자세히 설명합니다. 자세한 내용은 ACPI 사양의 10장, 전원 디바이스를 참조하세요.

참고

이 문서에 설명된 정보 중 일부는 Windows에만 해당되며 최신 ACPI 사양에 자세히 설명되어 있지 않습니다.

ACPI 전원 공급 장치 개체

ACPI 펌웨어는 ACPI 사양의 섹션 10.3에 따라 단일 ACPI 전원 디바이스를 제공하고 구현해야 합니다. 이 개체는 _HID(하드웨어 ID) "ACPI0003"로 자체 보고해야 합니다.

참고 여러 전원이 있는 시스템의 경우 모든 물리적 전원은 ACPI의 단일 전원 디바이스 개체를 통해 다중화되어야 합니다. 이 개체는 시스템에 대한 전원 입력의 복합 상태를 나타내야 합니다. 클라이언트 시스템은 여러 전원 디바이스 개체를 제공해서는 안 됩니다. (여러 전원 공급 장치가 있는 서버 시스템에는 추가 전원 공급 개체가 있을 수 있습니다.)

이 개체는 _PSR(전원) 메서드도 구현해야 합니다. 이 메서드는 전원의 상태를 반환하고 전원이 현재 온라인(AC 전원)인지 아니면 오프라인(배터리 전원)인지를 전달합니다. _PSR 메서드는 시스템이 주 전원에 연결된 경우에만 온라인(AC 전원)을 보고해야 합니다. _PSR의 상태가 변경되면 플랫폼은 ACPI 네임스페이스의 디바이스에 대해 인터럽트 및 Notify(0x80) 명령을 생성해야 합니다. 이는 플랫폼이 물리적 상태 변화를 검색한 직후에 수행되어야 합니다.

ACPI 배터리 제어 메서드

ACPI 펌웨어는 ACPI 사양의 섹션 10.2에 따라 시스템의 각 배터리에 대한 ACPI 제어 메서드 개체를 제공하고 구현해야 합니다. 각 배터리 디바이스는 다음을 모두 수행해야 합니다.

  • _HID(하드웨어 ID) "PNP0C0A"로 자신을 식별합니다.
  • _STA(상태) 메서드를 구현하여 디바이스가 사용하도록 설정, 사용하지 않도록 설정 또는 존재하지 않음 상태인지 나타냅니다.
  • _BIX(배터리 정보 확장) 메서드를 사용하여 정적 정보를 보고합니다.
  • _BST(배터리 상태) 제어 메서드를 사용하여 배터리 상태를 보고합니다.
  • _BTP(배터리 트립 포인트) 메커니즘을 사용하여 충전 수준 이벤트를 지원합니다.

선택적으로 배터리 디바이스는 _SUN(슬롯 유닛 번호)를 구현하거나 UI(사용자 인터페이스)에 표시할 목적으로 배터리 순서를 나타낼 수 있습니다.

다음 토론에서는 이러한 방법에 대한 세부 정보를 제공하고 Windows 관련 요구 사항에 대해 설명합니다.

배터리 정적 정보의 ACPI 구현

ACPI 펌웨어는 디자인 용량, 주기 수 및 일련 번호를 포함하여 배터리에 대한 정적 정보를 제공하기 위해 각 배터리에 대해 _BIX 메서드를 구현해야 합니다. 다음 표에서는 ACPI 사양의 섹션 10.2.2.2에 설명된 필드 정의를 확장하고 이 정보에 대한 Windows 관련 요구 사항을 열거합니다.

토픽 Description Windows 관련 요구 사항
수정 버전 _BIX 수정 버전을 나타냅니다. 0x0으로 설정해야 합니다.
전원 장치 하드웨어에서 보고하는 단위가 밀리암페어 및 밀리암페어시 또는 밀리와트 및 밀리와트시인지 확인합니다. 단위가 밀리와트 및 밀리와트시임을 나타내려면 0x0으로 설정해야 합니다. 이 값은 런타임에 변경되어서는 안 됩니다.
디자인 용량 배터리의 원래 용량을 밀리와트시 단위로 나타냅니다. 정확한 값으로 설정해야 하며 0x0 또는 0xFFFFFFFF로 설정할 수 없습니다. 이 값은 런타임에 변경되어서는 안 됩니다.
마지막 완전 배터리 충전 배터리의 현재 완전 충전 용량을 나타냅니다. 정확한 값으로 설정해야 하며 0x0 또는 0xFFFFFFFF로 설정할 수 없습니다. 이 값은 주기 수가 증가할 때마다 업데이트되어야 합니다. 이 값은 배터리가 방전될 때 일정하게 유지되어야 합니다. 배터리가 완전히 충전된 경우에만 이 값을 업데이트하는 것이 좋습니다.
배터리 기술 배터리가 충전식인지 일회용인지 나타냅니다. 배터리가 충전식임을 나타내려면 0x1로 설정해야 합니다.
디자인 전압 배터리의 설계 전압을 나타냅니다. 밀리볼트 단위로 새 배터리일 때 배터리의 설계 전압으로 설정해야 합니다. 0x0 또는 0xFFFFFFFF로 설정하면 안 됩니다. 이 값은 런타임에 변경되어서는 안 됩니다.
경고 디자인 용량 OEM에서 제공하는 배터리 부족 경고 수준을 나타냅니다. Windows는 이 값을 무시합니다.
낮은 디자인 용량 시스템 전원이 꺼지기 전에 Windows를 즉시 종료하거나 최대 절전 모드로 전환해야 하는 위험한 배터리 잔량을 나타냅니다. 배터리 디자인 용량의 0~5% 사이의 값으로 설정해야 합니다.
배터리 용량 단위 세분성 1 경고 디자인 용량과 낮은 디자인 용량 사이에서 하드웨어가 검색할 수 있는 최소 충전 변경량을 나타냅니다. 배터리 디자인 용량의 1%보다 크지 않은 값으로 설정해야 합니다.
배터리 용량 단위 세분성 2 마지막 완전 충전 용량과 경고 디자인 용량 사이에서 하드웨어가 검색할 수 있는 최소 충전 변경량을 나타냅니다. 75밀리와트(25와트시 배터리의 약 0.25%) 이하의 값으로 설정해야 합니다. 배터리 디자인 용량의 (1/400).
주기 수 배터리 주기 수를 나타냅니다. 0x0보다 큰 값으로 설정해야 합니다. 0xFFFFFFFF로 설정하면 안 됩니다.
측정 정확도 배터리 용량 측정의 정확도를 나타냅니다. 95,000 이상으로 설정해야 95% 이상의 정확도를 나타냅니다.
최대 샘플링 시간 두 개의 연속 _BST 평가 간에 지원되는 최대 샘플링 시간으로, 남은 용량의 차이가 표시됩니다. 특별한 요구 사항이 없습니다.
최소 샘플링 시간 두 개의 연속 _BST 평가 간에 지원되는 최소 샘플링 시간으로, 남은 용량의 차이가 표시됩니다. 특별한 요구 사항이 없습니다.
최대 평균 간격 배터리 연료 게이지에서 지원하는 최대 평균 간격(밀리초)입니다. 특별한 요구 사항이 없습니다.
최소 평균 간격 배터리 연료 게이지에서 지원하는 최소 평균 간격(밀리초)입니다. 특별한 요구 사항이 없습니다.
모델 번호 OEM 제공 배터리 모델 번호. NULL이 아니어야 합니다.
일련 번호 OEM 제공 배터리 일련 번호. NULL이 아니어야 합니다.
배터리 유형 OEM 제공 배터리 유형 정보. 특별한 요구 사항이 없습니다.
OEM 정보 OEM 제공 정보. 특별한 요구 사항이 없습니다.

이러한 요구 사항 외에도 플랫폼 펌웨어는 _BIX의 배터리 상태 데이터가 변경될 때마다 ACPI 네임스페이스의 배터리 디바이스에 대해 인터럽트 및 Notify(0x81) 명령을 생성해야 합니다. 여기에는 마지막 완전 충전 용량, 디자인 용량 및 주기 수가 포함됩니다. 이는 플랫폼이 상태 변경을 검색한 직후에 수행해야 합니다.

마지막 완전 충전 용량은 배터리가 마지막으로 완전히 충전되었을 때 배터리가 보유할 것으로 예상되는 예상 에너지 양을 나타냅니다. Windows는 배터리가 충전된 경우에만 이 값이 업데이트된다고 가정합니다. 따라서 마지막 완전 충전 용량 값은 배터리가 방전되는 동안 변경되지 않아야 합니다. 배터리가 완전히 충전된 경우에만 업데이트하는 것이 좋습니다.

배터리 실시간 상태 정보의 ACPI 구현

ACPI 펌웨어는 남은 용량 및 현재 소모율을 포함하여 배터리에 대한 실시간 상태 정보를 제공하기 위해 각 배터리에 대해 _BST 메서드를 구현해야 합니다. 다음 표에서는 ACPI 사양의 섹션 10.2.2.6에 설명된 필드 정의를 확장하고 이 정보에 대한 Windows 관련 요구 사항을 열거합니다.

토픽 Description Windows 관련 요구 사항
배터리 상태 배터리가 현재 충전 중인지, 방전 중인지 또는 위험 상태인지 나타냅니다. 배터리 상태는 배터리가 충전 중인 경우에만 충전을 보고해야 합니다. 마찬가지로 배터리 상태는 배터리가 방전 중인 경우에만 방전을 보고해야 합니다. 충전도 방전도 아닌 배터리는 둘 다 보고하지 않아야 합니다.
배터리 현재 속도 배터리의 현재 소모율(밀리와트)을 제공합니다. 0x0보다 크고 0xFFFFFFFF보다 작은 값이어야 합니다. _BIX의 측정 정확도 값 내에서 정확해야 합니다.
배터리 잔량 남은 배터리 용량을 밀리와트시 단위로 제공합니다. 0x0보다 크고 0xFFFFFFFF보다 작아야 합니다. _BIX의 측정 정확도 값 내에서 정확해야 합니다.
배터리 현재 전압 배터리 단자의 전류 전압을 나타냅니다. 0x0에서 0xFFFFFFFF 사이의 값(밀리볼트)이어야 합니다.

_BST의 데이터가 변경되면 플랫폼은 ACPI 네임스페이스의 배터리 디바이스에 대해 인터럽트 및 Notify(0x80)를 생성해야 합니다. 이는 플랫폼에서 물리적 상태 변경을 검색한 직후에 수행해야 합니다. 여기에는 충전 비트(Bit0) 또는 방전 비트(Bit1)에 대한 배터리 상태 필드의 모든 변경이 포함됩니다.

또한 플랫폼은 _BTP-Battery Trip Point 방식을 구현해야 합니다. _BTP를 사용하면 Windows에서 초과된 경우 플랫폼이 ACPI 네임스페이스의 배터리 디바이스에 대해 인터럽트 및 Notify(0x80)를 생성하도록 하는 남은 용량 임계값을 지정할 수 있습니다. _BTP 메서드는 Windows에서 배터리를 주기적으로 폴링할 필요가 없도록 합니다.

Windows OS별 배터리 제어 메서드

ACPI 사양은 디바이스별 메서드 또는 _DSM 제어 메서드를 통해 디바이스 및 운영 체제별 제어 메서드를 제공합니다. _DSM은 ACPI 사양의 섹션 9.14.1에 설명되어 있습니다.

Windows8은 제어 메서드 배터리 디바이스에 대해 다음 _DSM 메서드를 지원합니다.

열 충전율 방향

토픽 설명
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 제어 메서드 배터리 드라이버 지원에 대한 확장을 나타내는 GUID입니다.
수정 ID 0 이 기능의 첫 번째 수정 버전입니다.
기능 인덱스 0x1 배터리 충전 제한을 설정합니다.
인수 열 제한 열 충전 한계를 나타내는 0에서 100 사이의 정수 값. 40% 값은 배터리가 최대 속도의 40%로 충전되어야 함을 나타냅니다. 0% 값은 이 메서드가 다시 호출될 때까지 배터리 충전을 중지해야 함을 나타냅니다.
반환 값 None 해당 없음

사용자가 수리할 수 있는 배터리

토픽 설명
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 제어 메서드 배터리 드라이버 지원에 대한 확장을 나타내는 GUID입니다.
수정 ID 0 이 기능의 첫 번째 수정 버전입니다.
기능 인덱스 0x2 이 _DSM은 배터리 디바이스를 사용자가 수리할 수 있는지 여부를 확인하기 위한 OSPM에 대한 것임을 나타냅니다.
인수 없음 인수가 필요하지 않습니다.
반환 값 단일 정수를 포함하는 패키지. 배터리를 사용자가 수리할 수 없고 최종 사용자가 교체할 수 없거나 최종 사용자가 추가 도구로 교체할 수 있는 경우 0x0입니다. 최종 사용자가 추가 도구 없이 배터리를 교체할 수 있는 경우 0x1입니다.

충전 워치독 필요

토픽 설명
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 제어 메서드 배터리 드라이버 지원에 대한 확장을 나타내는 GUID입니다.
수정 ID 0 이 기능의 첫 번째 수정 버전입니다.
기능 인덱스 0x3 이 _DSM은 OSPM이 제어 메서드 배터리가 고전류 충전을 유지하기 위해 주기적 워치독 다시 설정이 필요한지 여부와 워치독을 다시 설정해야 하는 기간을 결정하기 위한 것임을 나타냅니다.
인수 없음 인수가 필요하지 않습니다.
반환 값 단일 정수를 포함하는 패키지. 배터리에 워치독 서비스가 필요하지 않은 경우 0x0입니다. 0x0000001e 및 0x12C를 포함하는 값은 최대 폴링 간격(초)을 나타냅니다. 다른 모든 값은 무시되고 0x0으로 처리되며 워치독 다시 설정이 필요하지 않습니다. 유효한 감시 간격이 지정되면 Windows는 _BST 메서드의 BatteryState 값이 충전으로 설정될 때 지정된 워치독 값보다 크지 않은 간격으로 _BST 메서드를 실행합니다. 이 값의 동적 업데이트는 지원되지 않습니다.

Windows는 데스크톱 트레이 애플리케이션에서 시스템 배터리에 대한 자세한 보기를 제공합니다. 각 배터리는 현재 상태와 함께 UI에 나열됩니다. 다음 예시 UI는 2개의 배터리를 보여 줍니다.

Windows에서 배터리를 표시하는 순서는 펌웨어에서 지정할 수 있습니다. 이는 ACPI 사양의 섹션 6.1.11에 정의된 _SUN(슬롯 사용자 번호) 방법을 사용하여 수행됩니다. _SUN 메서드는 배터리의 고유 ID를 나타내는 정수를 반환합니다. Windows는 _SUN 메서드의 값에 따라 각 배터리 개체를 오름차순으로 나열합니다.

한 배터리 개체에 _SUN 메서드가 포함된 경우 다른 모든 배터리 개체도 _SUN 메서드를 제공해야 합니다. Windows는 일부 배터리에는 _SUN 방식이 있고 다른 배터리에는 없는 경우를 지원하지 않습니다. _SUN 개체가 제공되지 않으면 Windows는 전체 디바이스 인스턴스 경로를 기반으로 배터리를 정렬합니다. 이 구성은 지원되지만 권장되지는 않습니다.