다음을 통해 공유


배터리 및 충전

배터리 충전 사용자 환경

이 항목에서는 Windows 10의 배터리 및 충전에 대한 권장 사항을 다룹니다. Windows를 실행하는 모든 디바이스는 폼 팩터, 지침 또는 플랫폼 아키텍처에 관계없이 일관적인 배터리 충전 환경을 제공합니다. 따라서 사용자는 일관적이고 우수한 환경에서 배터리를 충전할 수 있습니다.

  1. 충전기에 연결하면 항상 충전이 이루어집니다.

    배터리 고장을 제외하고, Windows를 실행하는 디바이스는 충전기에 연결될 때마다 항상 배터리를 충전할 수 있습니다.

  2. Windows는 충전기에 연결된 상태에서 항상 부팅할 수 있습니다.

    • 데스크톱용 Windows 10 버전(Home, Pro, Enterprise 및 Education):

      디바이스가 S5(종료 상태)인 경우 배터리가 분리 가능한 경우 배터리 충전 수준 및 배터리의 존재 상태에 관계없이 충전기에 연결하면 항상 Windows로 부팅할 수 있습니다.

    • Windows 10 Mobile:

      시스템을 부팅하려면 충분히 충전된 배터리가 있어야 합니다.

  3. 하드웨어는 충전을 자율적으로 관리합니다.

    하드웨어는 기본 CPU에서 실행되는 펌웨어, Windows, 드라이버 또는 기타 소프트웨어 없이 디바이스의 배터리를 충전합니다. 이 요구 사항은 데스크톱용 Windows 10 버전 시스템에만 적용됩니다. Windows 10 Mobile 시스템은 배터리를 충전하기 위해 UEFI 충전 앱 및/또는 기타 소프트웨어 구성 요소를 지원해야 할 수 있습니다.

  4. 배터리가 완전히 충전되거나 오류가 발생하면 자동으로 충전이 중지됩니다.

    배터리가 완전히 충전되면 하드웨어가 자동으로 충전을 중지합니다. 이 작업은 펌웨어, Windows, 드라이버 또는 주 CPU에서 실행되는 기타 소프트웨어 없이 수행됩니다. 배터리 또는 열 오류 상태가 있는 경우 충전도 자동으로 중지됩니다.

충전기에 연결하면 충전이 이루어집니다.

사용자는 충전기에 연결할 때마다 디바이스가 충전되기를 기대합니다. 따라서 하드웨어는 전원 상태에 관계없이 디바이스가 충전기에 연결될 때마다 항상 배터리를 충전하려고 시도해야 합니다. 이러한 기대는 활성(S0), 절전 모드(S3), 최대 절전 모드(S4), 종료(S5), 하드 오프(G2/G3) 및 S0 유휴 상태를 포함한 모든 전원 상태에 적용됩니다. 배터리가 완전히 충전되거나 오류 상태가 발생하면 충전이 중지될 수 있습니다.

Windows 또는 펌웨어가 부팅되지 않거나 실행되지 않았을 때 배터리를 감소된 속도로 충전하는 디자인은 권장되지 않습니다. 예를 들어 시스템이 완전히 꺼져 있고 충전기에 연결되면 배터리가 더 느린 속도로 충전될 수 있으며, 디바이스가 부팅되고 ACPI 펌웨어를 사용하여 배터리를 주기적으로 모니터링할 수 있을 때 더 빠른 속도로 충전할 수 있습니다.

마지막으로, 설계상 시스템의 온도가 높은 경우 배터리가 느리게 충전될 수 있습니다. 이 경우 배터리 충전 속도를 늦추거나 완전히 제거하여 발열을 줄일 수 있습니다. 시스템 디자인이 우수하면 발열이 심하지 않습니다.

Windows는 AC 전원에 연결된 경우 항상 부팅할 수 있습니다.

  • 데스크톱용 Windows 10 버전

    사용자는 충전기에 디바이스를 연결할 때마다 즉시 부팅해 사용할 수 있을 것으로 기대합니다. 따라서 디바이스는 항상 부팅되어야 하며 AC 전원에 연결되어 있을 때 완전히 사용할 수 있어야 합니다. 이는 배터리 충전 수준, 배터리/충전기 상태 및 배터리 존재(배터리를 분리할 수 있는 경우)에 관계없이 적용됩니다.

    디바이스가 펌웨어 및 Windows를 부팅하기 위해 최소 배터리 용량이 필요한 경우 하드웨어는 항상 플랫폼에서 배터리 용량을 예약해야 합니다. 예약된 배터리 용량은 Windows에 노출되어서는 안 됩니다.

  • Windows 10 Mobile

    시스템이 AC 전원에 연결되어 있고 배터리가 있는 경우 부팅 프로세스 중에 배터리 잔량이 시스템에 전원을 공급하기에 충분하다면 시스템이 운영 체제로 부팅을 시도해야 합니다.

하드웨어는 충전을 자율적으로 관리합니다.

위에 명시된 바와 같이 사용자는 충전기에 연결할 때마다 디바이스가 충전될 것으로 기대합니다. 따라서 하드웨어는 주 CPU에서 실행되는 펌웨어, Windows, 드라이버 또는 기타 소프트웨어 없이 배터리를 충전해야 합니다. 이러한 구성 요소 중 하나 이상이 작동되지 않거나 지정된 시간에 오류 상태일 수 있기 때문입니다. 이 요구 사항은 데스크톱용 Windows 10 버전 시스템에만 적용됩니다. Windows 10 Mobile 시스템은 배터리를 충전하기 위해 UEFI 충전 앱 및/또는 기타 소프트웨어 구성 요소를 지원해야 할 수 있습니다.

완전히 충전되거나 오류가 발생할 때 자동으로 충전이 중지됩니다.

배터리가 완전히 충전되거나 오류가 발생하면 하드웨어가 자동으로 충전을 중지합니다. 충전과 마찬가지로 이 작업은 주 CPU에서 실행되는 펌웨어, Windows, 드라이버 또는 기타 소프트웨어 없이 수행해야 합니다. 또한 하드웨어는 모든 배터리 안전 규정 조건을 준수해야 합니다.

전원 및 충전 표시기

Windows는 사용자가 여러 위치에서 볼 수 있는 아이콘을 사용하여 전원 및 배터리 상태 표시기를 제공합니다. 여기에는 배터리 시스템 트레이 아이콘과 잠금 화면이 포함됩니다.

디바이스에는 충전 상태를 나타내는 LED와 같은 물리적 표시기가 있을 수도 있습니다. 이 표시기는 전력 소비에 거의 영향을 미치지 않아야 합니다.

Windows 전원 및 충전 아이콘

Windows는 다음 세 위치에 전원 및 충전 상태를 표시합니다.

  • 잠금 화면:

    Windows는 전원 및 충전 상태를 보여주는 배터리 아이콘을 표시합니다.

  • 데스크톱 시스템 트레이(데스크톱용 Windows 10 버전만 해당):

    Windows는 전원 및 충전 상태를 보여주는 배터리 아이콘을 표시합니다. 사용자가 배터리 아이콘을 클릭하면 남은 용량, 남은 예상 시간 및 배터리별 세부 정보(여러 배터리가 장착된 경우)와 같은 정보를 볼 수 있습니다.

  • 상태 표시줄(모바일 SKU만 해당):

    Windows는 전원 및 충전 상태를 보여주는 배터리 아이콘을 표시합니다. 사용자가 화면 위쪽에서 아래로 살짝 밀어 작업 센터를 확장하면 실제 배터리 잔량을 백분율로 볼 수 있습니다.

  • 배터리 절약 모드 설정:

    배터리 절약 모드 설정 페이지(설정 -> 시스템 -> 배터리 절약 모드)에서 Windows는 배터리 잔량(백분율), 배터리 상태(충전 및 방전) 및 충전/방전까지 남은 예상 시간을 표시합니다.

S0 유휴 상태일 수 있는 플랫폼의 경우 디스플레이가 표시되면 시스템이 충전기에 연결되거나 분리될 때 Windows에서 디스플레이를 잠시 켜서 사용자에게 전원 변경을 알립니다.

플랫폼 하드웨어 충전 표시기

Windows에 기본 제공되는 아이콘은 Windows가 실행 중이고 디스플레이가 사용자에게 표시되는 시나리오만 다룹니다. 그러나 시스템이 종료되거나 디스플레이가 꺼져 있는 S0 유휴 상태일 때는 화면 표시기가 표시되지 않습니다. 사용자가 화면에서 시각적 신호를 볼 수 없으므로 플랫폼에 전원이 있음을 나타내는 물리적 충전 표시기가 포함될 수 있습니다.

다음 섹션에서는 도킹 솔루션을 사용하여 S0 유휴 플랫폼에서 키보드 및 마우스/터치패드를 구현하기 위한 권장 사항을 제공합니다. 이 섹션에서는 잠재적인 솔루션과 함께 과제와 원칙에 대해서도 설명합니다. 두 가지 잠재적 솔루션은 모두 모바일 및 A/C 전원 고정식 도크에 적용됩니다.

Windows에 전원 및 충전 하위 시스템 노출

Windows를 실행하는 모든 모바일 디바이스에는 하나 이상의 배터리와 AC 어댑터와 같은 전원이 포함되어 있습니다. 이러한 하위 시스템의 정보는 사용자에게 전원 관리 상태를 전달합니다. 상태에는 특정 시점의 배터리 잔량, AC 어댑터 및 배터리 충전 상태, 예상 배터리 지속 시간이 포함됩니다. 전원 하위 시스템 정보는 Windows 배터리 미터 및 기타 전원 관리 진단 유틸리티에 표시됩니다.

다음 섹션에서는 도킹 솔루션을 사용하여 S0 유휴 플랫폼에서 키보드 및 마우스/터치패드를 구현하기 위한 권장 사항을 제공합니다. 이 섹션에서는 잠재적인 솔루션과 함께 과제와 원칙에 대해서도 설명합니다. 두 가지 잠재적 솔루션은 모두 모바일 및 A/C 전원 고정식 도크에 적용됩니다.

일반적인 전원 하위 시스템 하드웨어 토폴로지

일반적으로 Windows는 전원 및 충전 하위 시스템에 대해 두 가지 하드웨어 토폴로지 중 하나를 예상합니다.

다음 그림에서는 플랫폼의 임베디드 컨트롤러를 사용하는 첫 번째 토폴로지를 보여줍니다. 이 토폴로지는 Windows를 실행하는 기존 디바이스에서 일반적입니다. 임베디드 컨트롤러는 전원 제어, 배터리 충전 관리, 전원 단추/스위치 감지, PS/2 호환 키보드 및 마우스 입력을 포함하여 모바일 디바이스에서 여러 기능을 수행합니다. 임베디드 컨트롤러는 일반적으로 LPC(낮은 핀 수) 버스를 통해 코어 실리콘에 연결됩니다. Windows는 ACPI 임베디드 컨트롤러 인터페이스를 통해 전원 하위 시스템 정보를 쿼리하고 이에 대한 알림을 받습니다.

임베디드 컨트롤러를 사용하는 전원 및 충전 하위 시스템

다음 그림은 I²C와 같은 경량 주변 장치 버스를 통해 플랫폼의 코어 실리콘에 직접 연결된 배터리 충전 컨트롤러 및 연료 게이지 구성 요소를 사용하는 두 번째 토폴로지를 보여줍니다. 이 구성에서 Windows는 I²C 버스를 통한 통신을 통해 전원 하위 시스템 변경을 쿼리하고 이에 대한 알림을 받습니다. 배터리 또는 하위 시스템에 장치 드라이버를 사용하는 대신 ACPI 제어 방법 환경이 SPB(단순 주변 장치) 운영 지역을 지원하여 확장됩니다. SPB 작업 영역을 사용하면 ACPI 제어 방법 코드가 I²C를 통해 코어 실리콘에 연결된 배터리 충전 컨트롤러 및 연료 게이지 구성 요소와 통신할 수 있습니다.

플랫폼 컨트롤러를 사용하는 전원 및 충전 하위 시스템

배터리 및 전원 하위 시스템 드라이버 모델

Windows는 강력한 배터리 및 전원 하위 시스템 장치 드라이버 모델을 제공합니다. 전원 관리 정보는 배터리 장치 드라이버를 통해 Windows 전원 관리자에게 전달된 다음, 배터리 디바이스 IRP 및 전원 관리 소프트웨어 API 세트를 통해 Windows 사용자 인터페이스에 집계 및 노출됩니다.

배터리 드라이버 모델은 포트/미니포트 모델입니다. 즉, 배터리 모델 및 인터페이스는 미니포트를 통해 새 배터리 유형을 노출할 수 있도록 정의됩니다. 그러나 실제로 Windows 에코시스템에서 중요한 역할을 하는 미니포트는 ACPI 제어 방법 배터리를 지원하는 배터리 미니포트 드라이버와 USB 연결 UPS(무정전 전원 공급 장치)용 HID 배터리 미니포트 드라이버 두 가지뿐입니다.

배터리 및 전원 시스템 드라이버 모델

모든 PC는 ACPI 제어 방법 인터페이스를 통해 배터리 및 충전 하위 시스템을 노출해야 합니다. 배터리 미니포트 인터페이스는 플랫폼별 배터리 충전 하위 시스템에 사용하면 안 됩니다. Windows에서 배터리 정보 및 상태를 폴링할 수 있는 ACPI 사양 정의 제어 방법이 있습니다. 마찬가지로, 하드웨어 플랫폼이 AC에서 배터리 전원으로의 전환과 같은 배터리 및 전원 변경 사항을 Windows에 알릴 수 있는 이벤트 기반 모델이 있습니다.

상태 폴링

Windows 전원 관리자는 배터리 잔량과 현재 소모율을 포함한 상태 정보를 주기적으로 요청합니다. 이 요청은 전원 관리자, 상위 수준 사용자 인터페이스 구성 요소 또는 애플리케이션에서 시작됩니다. 전원 관리자는 요청을 배터리 디바이스에 대한 IRP(I/O 요청 패킷)로 전환합니다. 배터리가 ACPI 제어 방법 인터페이스를 통해 노출되면 제어 방법 배터리 드라이버(cmbatt.sys)가 적절한 ACPI 제어 방법을 실행합니다. 상태 정보의 경우 _BST(배터리 상태) 메서드가 실행됩니다.

_BST 메서드를 사용하려면 ACPI 펌웨어가 전원 하위 시스템으로부터 현재 정보를 가져온 다음, 해당 정보를 ACPI 사양에 지정된 형식으로 버퍼에 패키징해야 합니다. 임베디드 컨트롤러 또는 I²C를 통해 연결된 배터리 충전기에서 배터리 상태에 액세스하는 데 필요한 특정 코드는 ACPI 펌웨어 및 _BST 메서드를 구성하는 코드의 일부에 포함되어 있습니다. _BST 메서드의 최종 결과는 제어 메서드 배터리 드라이버에 반환되는 필수 정보의 버퍼입니다. 제어 메서드 배터리 드라이버는 최종적으로 버퍼를 배터리 드라이버와 Windows 전원 관리자가 요구하는 형식으로 변환합니다.

상태 변경 알림

전원 및 배터리 하위 시스템은 AC에서 배터리 전원으로의 전환을 포함하여 Windows에 상태 변경에 대한 여러 알림을 생성합니다. Windows에서 이러한 상태 변경을 폴링할 경우 폴링이 필요한 빈도가 높기 때문에 실용적이지 않습니다. 따라서 하드웨어 플랫폼은 배터리 상태가 크게 변경될 때 이벤트 기반 모델을 사용하여 Windows에 알려야 합니다.

배터리 상태(잔량 또는 충전 상태 포함)가 변경되면 ACPI 펌웨어는 제어 메서드 배터리 디바이스에서 Notify(0x80)를 발행합니다. 그런 다음, Windows 제어 메서드 배터리 드라이버는 _BST 메서드를 평가하고 업데이트된 정보를 전원 관리자에 반환합니다.

배터리 정적 데이터가 변경되면(마지막 완전 충전 용량, 디자인 용량 및 주기 수 포함) ACPI 펌웨어는 제어 메서드 배터리 디바이스에서 Notify(0x81)를 발행합니다. 그런 다음, Windows 제어 메서드 배터리 드라이버는 _BIX 메서드를 평가하고 업데이트된 정보를 전원 관리자에 반환합니다.

이 플랫폼은 임베디드 컨트롤러가 장착된 플랫폼의 경우 SCI(시스템 제어 인터럽트)를 통해 ACPI 펌웨어 환경을 중단하고, 코어 실리콘에 직접 연결된 배터리 하위 시스템 하드웨어가 있는 플랫폼의 경우 GPIO를 통해 ACPI 펌웨어 환경을 중단합니다.

임베디드 컨트롤러를 사용하는 ACPI 작업

일반적인 임베디드 컨트롤러에 연결된 배터리 및 전원 하위 시스템이 있는 플랫폼은 ACPI 임베디드 컨트롤러 작업 영역을 사용하여 ACPI 제어 메서드 환경과 플랫폼 하드웨어 간의 통신을 용이하게 합니다.

ACPI 펌웨어는 다음을 포함하여 ACPI 사양의 섹션 12.11.1에 설명된 대로 ACPI 네임스페이스에 포함된 컨트롤러를 정의해야 합니다.

  • 임베디드 컨트롤러에 대한 Device() 노드.
  • 디바이스가 임베디드 컨트롤러임을 나타내는 _HID 개체.
  • 임베디드 컨트롤러의 IO 리소스를 나타내는 _CRS 개체.
  • 임베디드 컨트롤러에 대한 SCI를 정의하는 _GPE 개체.
  • 배터리 상태 및 정보 메서드를 포함하여 네임스페이스의 다른 ACPI 제어 메서드 코드에서 액세스할 수 있는 임베디드 컨트롤러 내에 포함된 정보를 설명하는 작업 영역입니다.

전체 세부 정보는 ACPI 사양의 섹션 12에 설명되어 있습니다.

임베디드 컨트롤러에서 배터리 정보에 액세스

ACPI 제어 메서드는 임베디드 컨트롤러의 작업 영역에 설명된 값을 읽어 임베디드 컨트롤러의 정보에 액세스합니다.

배터리 상태가 변경되면 운영 체제에 알림

임베디드 컨트롤러는 충전 상태 또는 _BTP에 의해 지정된 남은 용량 변화를 포함하여 배터리 상태의 변화를 감지하면 SCI를 생성하고 임베디드 컨트롤러 상태 명령(EC_SC) 레지스터에 SCI_EVT 비트를 설정합니다. Acpi.sys Windows ACPI 드라이버는 임베디드 컨트롤러와 통신하고 쿼리 명령(QR_EC)을 실행하여 전송될 알림에 대한 특정 정보를 요청합니다. 그런 다음, 임베디드 컨트롤러는 실행할 _QXX 메서드에 해당하는 바이트 값을 설정합니다. 예를 들어 임베디드 컨트롤러 및 ACPI 펌웨어는 배터리 상태 정보에 대한 업데이트로 0x33 값을 정의할 수 있습니다. 임베디드 컨트롤러가 0x33 값을 알림으로 설정하면 ACPI 드라이버는 _QXX 메서드를 실행합니다. _QXX 메서드의 내용은 일반적으로 네임스페이스의 제어 메서드 배터리 디바이스에 있는 Notify(0x80)입니다.

I²C에 연결된 충전 시스템을 사용하는 ACPI 작업

플랫폼은 I²C와 같은 저전력 직렬 버스를 통해 코어 칩셋에 연결된 배터리 및 전원 하위 시스템을 연결할 수도 있습니다. 이러한 디자인에서 ACPI 제어 방법과 배터리 하위 시스템 하드웨어 간에 통신하는 데 ACPI GenericSerialBus 작업 영역이 사용됩니다. 배터리 하위 시스템 하드웨어를 GPIO 인터럽트에 연결하면 배터리 상태가 변경될 때 ACPI 제어 메서드를 실행할 수 있습니다.

I²C를 통해 배터리 및 전원 하위 시스템 하드웨어를 연결하는 경우 ACPI 펌웨어는 다음을 정의해야 합니다.

  • 다음을 포함하여 I²C 인터럽트가 연결된 GPIO 컨트롤러 디바이스에 대한 Device() 노드:

    • GPIO 컨트롤러의 하드웨어 ID를 설명하는 _HID 개체.
    • GPIO 컨트롤러의 인터럽트 및 하드웨어 리소스를 설명하는 _CSR 개체.
    • 하나 이상의 GPIO 라인을 ACPI 이벤트 메서드 실행에 매핑하는 _AEI 개체. 이렇게 하면 GPIO 라인 중단에 대한 응답으로 ACPI 메서드를 실행할 수 있습니다.
  • 다음을 포함하여 배터리 연료 게이지와 충전 하드웨어가 연결된 I²C 컨트롤러에 대한 Device() 노드:

    • I²C 컨트롤러의 하드웨어 ID 및 리소스를 설명하는 _HID 및 _CSR 개체.
    • I²C 디바이스에 대한 가상 명령 레지스터를 설명하는 I²C 디바이스 범위 내의 GenericSerialBus OperationRegion.
    • GenericSerialBus OperationRegion 내의 필드 정의. 필드 정의를 사용하면 I²C 디바이스 외부의 ASL 코드에서 I²C 디바이스의 가상 명령 레지스터에 액세스할 수 있습니다.

GPIO 컨트롤러를 설명하고 GPIO 라인을 ACPI 이벤트에 매핑하면 I²C 디바이스에서 GPIO 인터럽트가 발생할 때 배터리 상태 및 알림에 대한 제어 메서드를 실행할 수 있습니다. GenericSerialBus 작업 영역을 설명하면 배터리 상태에 대한 ACPI 코드가 I²C 버스를 통해 통신하고 배터리 연료 게이지 및 충전 하위 시스템의 레지스터 및 정보를 읽을 수 있습니다.

충전 시스템에서 배터리 정보에 액세스

배터리 상태는 배터리 하위 시스템 하드웨어가 연결되어 있는 I²C 버스를 통해 명령을 주고받아 ACPI 제어 방법으로 실행할 수 있습니다. 상태 및 배터리 정적 정보 메서드를 지원하는 제어 메서드 코드는 ACPI 네임스페이스에 설명된 GenericSerialBus 작업 영역에서 데이터를 읽고 씁니다. 제어 메서드 코드는 연료 게이지 디바이스에서 데이터를 읽거나 GenericSerialBus 작업 영역을 통해 I²C 버스의 배터리 용량 및 주기 수에 대한 정적 정보를 읽습니다.

배터리 상태가 변경되면 Windows에 알림

상태가 변경되고 인터럽트를 코어 실리콘의 GPIO 라인에 물리적으로 연결할 때 배터리 하위 시스템 하드웨어에서 인터럽트를 생성할 수 있습니다. GPIO 라인은 ACPI에 설명된 GPIO 컨트롤러 아래의 _AEI 개체를 사용하여 특정 제어 메서드 실행에 매핑할 수 있습니다. GPIO 인터럽트 발생 시 Windows ACPI 하위 시스템은 제어 메서드 배터리 디바이스에서 Notify()를 수행할 수 있는 특정 GPIO 라인과 연결된 메서드를 실행하여 Windows 상태 및 정적 정보 메서드를 다시 평가해 배터리 상태를 업데이트합니다.

전원 공급 장치 개체의 ACPI 구현

ACPI 펌웨어는 ACPI 전원 디바이스를 구현해야 합니다. 이 개체는 "ACPI0003"의 하드웨어 ID(_HID)로 자체 보고해야 합니다. 이 개체는 ACPI _PSR(전원) 메서드도 구현해야 합니다. 이 메서드는 전원의 상태를 반환하고 전원이 현재 온라인(AC 전원)인지 아니면 오프라인(배터리 전원)인지 알려줍니다. 시스템의 모든 입력 전원은 단일 _PSR 메서드를 통해 멀티플렉싱되어야 합니다. 예를 들어 시스템이 DC 배럴 커넥터 또는 별도의 도크 커넥터를 통해 구동되는 경우 _PSR은 온라인으로 전달해야 합니다. 여러 ACPI 전원 디바이스를 사용하지 마세요.

_PSR 메서드는 시스템이 주 전원에 연결된 경우에만 온라인(AC 전원)을 보고해야 합니다. _PSR의 상태가 변경되면 플랫폼은 ACPI 네임스페이스의 디바이스에 대해 인터럽트 및 Notify(0x80)를 생성해야 합니다. 이는 플랫폼에서 물리적 상태 변경을 검색한 직후에 수행해야 합니다.

배터리 정적 정보의 ACPI 구현

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

필드 Description Windows 관련 요구 사항
수정 버전 _BIX 수정 버전을 나타냅니다. 0x0으로 설정해야 합니다.
전원 장치 하드웨어에서 보고하는 단위를 결정합니다. MA/MAh 또는 mW/mWh입니다. 단위를 mW/mWh로 하려면 0x0으로 설정해야 합니다.
디자인 용량 배터리의 원래 용량을 mWh 단위로 나타냅니다. 정확한 값으로 설정해야 하며 0x0 또는 0xFFFFFFFF이면 안 됩니다.
마지막 완전 충전 용량 배터리의 현재 완전 충전 용량을 나타냅니다.

정확한 값으로 설정해야 하며 0x0 또는 0xFFFFFFFF이면 안 됩니다.

이 값은 주기 수가 증가할 때마다 업데이트되어야 합니다.

배터리 기술 배터리가 충전식인지 아니면 일회용인지 나타냅니다. 배터리가 충전식임을 나타내려면 0x1로 설정해야 합니다.
디자인 전압 배터리의 설계 전압을 나타냅니다.

새 배터리의 경우 mV 단위의 설계 전압으로 설정해야 합니다.

0x0 또는 0xFFFFFFFF로 설정하면 안 됩니다.

경고 디자인 용량 OEM에서 제공하는 배터리 부족 경고 수준을 나타냅니다. 이 값은 Windows에서 무시됩니다.
낮은 디자인 용량 시스템 전원이 꺼지기 전에 Windows를 즉시 종료하거나 최대 절전 모드로 전환해야 하는 배터리 위험 수준을 나타냅니다. 배터리 디자인 용량의 0x0~5% 값으로 설정해야 합니다.
배터리 용량 단위 세분성 1 경고 디자인 용량과 낮은 디자인 용량 사이에서 하드웨어가 검색할 수 있는 최소 충전 변경량을 나타냅니다. 배터리 디자인 용량의 1% 이하로 설정해야 합니다.
배터리 용량 단위 세분성 2 마지막 완전 충전 용량과 경고 디자인 용량 사이에서 하드웨어가 검색할 수 있는 최소 충전 변경량을 나타냅니다. 배터리 디자인 용량의 1/400인 75mW(25Whr 배터리의 약 0.25%) 이하로 설정해야 합니다.
주기 수 배터리 주기 수를 나타냅니다. 0x0보다 큰 값으로 설정해야 합니다. 0xFFFFFFFF로 설정하면 안 됩니다.
측정 정확도 배터리 용량 측정의 정확도를 나타냅니다. 95% 이상의 정확도를 나타내는 95,000 이상으로 설정해야 합니다.
최대 샘플링 시간 두 개의 연속 _BST 평가 간에 지원되는 최대 샘플링 시간으로, 남은 용량의 차이가 표시됩니다. 특별한 요구 사항이 없습니다.
최소 샘플링 시간 두 개의 연속 _BST 평가 간에 지원되는 최소 샘플링 시간으로, 남은 용량의 차이가 표시됩니다. 특별한 요구 사항이 없습니다.
최대 평균 간격 배터리 연료 게이지에서 지원하는 최대 평균 간격(밀리초)입니다. 특별한 요구 사항이 없습니다.
최소 평균 간격 배터리 연료 게이지에서 지원하는 최소 평균 간격(밀리초)입니다. 특별한 요구 사항이 없습니다.
모델 번호 OEM 제공 배터리 모델 번호 NULL이 아니어야 합니다.
일련 번호 OEM 제공 배터리 일련 번호 NULL이 아니어야 합니다.
배터리 유형 OEM 제공 배터리 유형 정보 특별한 요구 사항이 없습니다.
OEM 정보 OEM 제공 정보 특별한 요구 사항이 없습니다.

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

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

필드 Description Windows 관련 요구 사항
배터리 상태 배터리가 현재 충전 중인지, 방전 중인지 또는 위험 상태인지 나타냅니다. 배터리 상태는 배터리가 충전 중인 경우에만 충전을 보고해야 합니다. 마찬가지로 배터리 상태는 배터리가 방전 중인 경우에만 방전을 보고해야 합니다. 충전도 방전도 아닌 배터리는 둘 다 보고하지 않아야 합니다.
배터리 현재 속도 배터리의 현재 소모율(mW)을 제공합니다.

0x0보다 크고 0xFFFFFFFF보다 작아야 합니다.

_BIX의 측정 정확도 값 내에서 정확해야 합니다.

배터리 잔량 배터리 잔량을 mWh 단위로 제공합니다.

0x0보다 크고 0xFFFFFFFF보다 작아야 합니다.

_BIX의 측정 정확도 값 내에서 정확해야 합니다.

배터리 현재 전압 배터리 단자의 전류 전압을 나타냅니다. 0x0에서 0xFFFFFFFF 사이의 값(mV)이어야 합니다.

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

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

배터리 제어 메서드

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

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

열 충전율 방향

필드 설명
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 제어 메서드 배터리 드라이버 지원에 대한 확장을 나타내는 GUID
수정 ID 0x0 이 기능의 첫 번째 수정 버전
함수 인덱스 0x1 배터리 충전 제한 설정
인수 열 제한

열 충전 한계를 나타내는 0에서 100 사이의 정수 값.

40% 값은 배터리가 최대 속도의 40%로 충전되어야 함을 나타냅니다.

0% 값은 이 메서드가 다시 호출될 때까지 배터리 충전을 중지해야 함을 나타냅니다.

반환 값 None 해당 없음

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

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

배터리를 사용자가 수리할 수 없고 최종 사용자가 교체할 수 없거나 최종 사용자가 추가 도구로 교체할 수 있는 경우 0x0입니다.

최종 사용자가 추가 도구 없이 배터리를 교체할 수 있는 경우 0x1입니다.

충전 워치독 필요

필드 설명
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 제어 메서드 배터리 드라이버 지원에 대한 확장을 나타내는 GUID
수정 ID 0x0 이 기능의 첫 번째 수정 버전
함수 인덱스 0x3 이 _DSM은 OSPM이 제어 메서드 배터리가 고전류 충전을 유지하기 위해 주기적 워치독 다시 설정이 필요한지 여부와 워치독을 다시 설정해야 하는 기간을 결정하기 위한 것임을 나타냅니다.
인수 없음 필수 인수는 없습니다.
반환 값 단일 정수를 포함하는 패키지. 배터리에 워치독 서비스가 필요하지 않은 경우 0x0입니다.

0x0000001e 및 0x12C를 포함하는 값은 최대 폴링 간격(초)을 나타냅니다.

다른 모든 값은 무시되고 0x0으로 처리되며 워치독 다시 설정이 필요하지 않습니다.

유효한 감시 간격이 지정되면 Windows는 _BST 메서드의 BatteryState 값이 충전으로 설정될 때마다 지정된 워치독 값보다 크지 않은 간격으로 _BST 메서드를 실행합니다.

이 값의 동적 업데이트는 지원되지 않습니다.

타사 배터리 미니포트 드라이버

Windows 10에서 OEM 및 IHV는 타사 배터리 미니포트 드라이버를 개발하여 Microsoft cmbatt.sys 드라이버를 교체하고 배터리 하드웨어와 직접 통신할 수 있습니다. 샘플 배터리 드라이버는 Microsoft에서 GitHub 및 WDK 샘플 키트의 일부로 제공됩니다.

USB 충전(데스크용 Windows 10 버전)

Microsoft는 모바일 디바이스의 USB 충전을 지원하는 옵션을 제공하는 것의 가치를 인식하고 있습니다. 휴대폰 충전기를 표준화하기 위한 EU의 움직임과 같은 표준화 노력으로 USB 충전기는 널리 사용 가능하며 Windows 휴대폰, MP3 플레이어, GNSS 디바이스 등을 포함한 다양한 디바이스에서 작동합니다. Microsoft는 Windows를 실행하는 디바이스를 포함하여 여러 디바이스를 충전하는 데 사용할 수 있는 단일 충전기를 제공하는 것의 가치를 이해합니다. 또한 USB 충전에 대한 광범위한 업계 지원을 감안할 때 비용과 환경에 미치는 영향을 줄이는 보조 혜택이 있습니다.

Windows 8부터 아래에 설명된 배터리 충전 요구 사항이 충족되는 경우 USB를 통해 모바일 디바이스에 전원을 공급하거나 충전할 수 있습니다. 또한 고품질 사용자 환경을 보장하기 위해 충족해야 하는 여러 USB 관련 요구 사항이 있습니다.

  1. USB 전원/충전은 플랫폼 펌웨어에서 전적으로 구현되어야 합니다. 운영 체제, 드라이버 또는 애플리케이션이 없어도 지원을 받을 수 있어야 합니다.

  2. 다른 디바이스에 연결되면 디바이스가 열거되지 않아야 합니다. 따라서 이러한 포트는 기본적으로 500mA로 제한되므로 표준 PC USB 포트에 연결된 경우 디바이스가 충전되지 않습니다. 유일한 예외는 이 포트가 디버깅 및 초기 팩터리 펌웨어 프로그래밍에 사용되는 경우입니다.

  3. 디바이스는 전용 USB 충전 포트에서 충전을 지원합니다. USB 배터리 충전 사양 버전 1.2를 준수하는 충전기에 연결된 경우 디바이스가 충전되어야 합니다. 디바이스를 표준 USB 충전기에 연결하여 충전할 때 충전 표준에 따라 전류가 1.5A를 초과하면 안 됩니다. OEM은 다음 조건이 충족되는 경우 더 높은 전류 수준을 지원하도록 선택할 수 있습니다.

    • 디바이스는 충전기 유형을 자동으로 감지하고 특정 충전기 유형에 적절한 속도로 충전합니다.
    • 디바이스와 충전기는 모든 관련 전기 및 안전 표준을 충족합니다.
    • OEM은 충전기 및 관련 케이블을 디바이스와 함께 배송합니다.
  4. USB 충전은 표준 마이크로 AB 리셉터클, USB-C(권장) 또는 독점 도크 커넥터를 통해 지원됩니다. 마이크로 B 리셉터클은 디바이스에서 허용되지 않습니다. 독점 도크 커넥터를 사용하는 경우 OEM은 표준 USB 충전기에서 충전할 수 있도록 디바이스와 적절한 케이블을 제공해야 합니다.

  5. 마이크로 AB 포트가 구현된 경우 디바이스는 케이블 유형, 구성을 자동으로 검색하고 적절한 역할을 가정해야 합니다. 마이크로 B 플러그가 삽입되고 포트에서 디버깅을 사용하도록 설정되지 않은 경우 충전기 역할을 가정해야 합니다. 마이크로 B 플러그를 삽입하고 포트에서 디버깅을 사용하도록 설정한 경우 디버그 역할을 가정해야 합니다(예: 충전이 지원되지 않음). 마이크로 A 플러그를 삽입하면 Windows에서 연결된 USB 디바이스가 인식되는 USB 호스트 역할이 가정됩니다.

  6. 마이크로 AB 포트도 디버그 포트로 작동하는 경우 디바이스는 펌웨어를 통해 충전기와 디버그 역할 간에 전환할 수 있는 수단을 제공해야 합니다. 최종 사용자에게 제공된 기본 설정에서 디버그가 비활성화되어 있어야 합니다.

  7. 마이크로 AB 포트도 디버그 포트로 작동하는 경우 디바이스는 전용 배럴 커넥터 또는 독점 도크 커넥터를 통해 대체 입력 전원 경로를 제공해야 합니다.

플랫폼 디자이너 및 구현자 검사 목록

다음 검사 목록을 사용하여 플랫폼 디자인 및 시스템 펌웨어가 배터리 및 충전 하위 시스템 지침을 준수하는지 확인할 수 있습니다.

배터리 하위 시스템 및 ACPI 펌웨어 구현 검사 목록

시스템 디자이너는 ACPI 펌웨어에서 다음 작업을 완료하여 배터리 및 전원 하위 시스템 정보가 Windows에 올바르게 보고되도록 해야 합니다.

  • ACPI 네임스페이스의 각 배터리 디바이스에 대한 Device() 개체를 추가합니다.

  • 각 배터리 디바이스는 다음과 같은 제어 메서드 및 개체를 제공해야 합니다.

    • 값이 "PNP0C0A"인 _HID.
    • _BIX 배터리 정보 확장:

    마지막 완전 충전 용량, 설계 용량 및 주기 수를 포함한 배터리 정적 정보를 전달합니다.

    • _BST 배터리 상태:

      잔량, 소모율 및 충전 상태를 포함한 현재 배터리 상태를 전달합니다.

    • _BTP 배터리 트립 포인트:

      이벤트 기반 배터리 상태 모델을 활성화하여 폴링에 대한 정기적인 작업을 줄일 수 있습니다. _BTP를 사용하면 Windows에서 배터리 상태 정보를 업데이트하도록 Windows에 요청하기 위해 플랫폼이 배터리 디바이스의 Notify(0x80)에서 발행해야 하는 남은 충전 용량 임계값을 지정할 수 있습니다.

    • _STA 일반 상태:

      분리식 배터리를 사용할 수도 있는 디바이스에 현재 배터리가 있는지 또는 휴대용 도크에 배터리가 있는지 여부를 Windows에서 알 수 있습니다.

  • ACPI 네임스페이스에서 AC 어댑터/전원에 대한 단일 Device() 개체를 추가합니다.

  • 전원 디바이스는 다음과 같은 제어 메서드 및 개체를 제공해야 합니다.

    • 값이 ACPI0003인 _HID

    • _PSR 전원:

      전원이 현재 온라인(AC 전원)인지 또는 오프라인(배터리 전원)인지를 전달합니다. 디바이스의 모든 입력 전원은 _PSR 메서드를 통해 멀티플렉싱되어야 합니다. 예를 들어 디바이스가 DC 배럴 커넥터 또는 별도의 도크 커넥터를 통해 구동되는 경우 _PSR은 온라인으로 전달해야 합니다. 여러 ACPI 전원 디바이스를 사용하지 마세요.

  • _BIX 메서드는 위의 배터리 정적 정보에 설명된 다음 필드와 제약 조건을 지원해야 합니다.

    • 개정 필드는 0x0으로 설정해야 합니다.
    • 전원 장치 필드는 0x0으로 설정해야 합니다.
    • 디자인 용량마지막 완전 충전 용량 값은 배터리 및 충전 하위 시스템의 정확한 값으로 설정해야 하며 0xFFFFFFFF 또는 0x00000000으로 설정하면 안 됩니다.
    • 배터리 기술 필드는 0x1로 설정해야 합니다.
    • 디자인 전압 필드는 정확하게 설정해야 하며 0x00000000 또는 0xFFFFFFFF이면 안 됩니다.
    • 낮은 용량 디자인은 시스템이 완전히 켜진 상태에서 최대 절전 모드로 전환하거나 종료하는 데 필요한 최솟값으로 설정해야 합니다.
    • 배터리 용량 세분성 1배터리 용량 세분성 2 필드는 배터리 설계 용량의 1%를 초과하지 않는 값으로 설정해야 합니다.
    • 배터리 하위 시스템에서 주기 수 필드를 정확하게 채워야 합니다.
    • 측정 정확도 필드는 80,000d 이상으로 설정해야 합니다.
    • 모델 번호 및 일련 번호 필드는 NULL로 설정하면 안 됩니다.
  • Windows에서 실시간 배터리 상태를 폴링할 수 있는 _BST 메서드를 제공합니다. _BST 메서드의 필드는 모든 기본 전원 및 배터리 충전 하위 시스템에서 동적으로 반환되어야 합니다. 해당 정확도는 _BIX 메서드의 측정 정확도 값 내에 있어야 합니다.

  • 배터리 디바이스의 Notify(0x80)를 사용하여 플랫폼이 Windows를 중단하는 남은 충전 용량 임계값을 Windows에 지정할 수 있는 _BTP 메서드를 제공합니다.

  • 배터리 상태 변경 또는 _BTP 충전 용량 제한 트립에 대한 응답으로만 Notify(0x80)가 발급되었는지 확인합니다. Notify(0x80)를 주기적으로 실행하지 마세요.

  • 배터리 잔량이 _BIX.DesignCapacityofLow에 지정된 값에 도달하면 플랫폼은 제어 메서드 배터리 디바이스에서 Notify(0x80)를 생성해야 합니다.

  • 여러 개의 배터리가 있는 시스템의 경우 각 배터리에 대한 제어 메서드 배터리 디바이스를 완전히 구현합니다.

    • 네임스페이스의 첫 번째 배터리는 시스템의 디버깅을 지원하기 위한 기본 배터리여야 합니다.
  • 각 배터리 디바이스 아래에 _DSM 메서드를 구현하여 배터리를 사용자가 수리할 수 있는지 여부를 나타냅니다.

  • 충전 중에 주기적 감시 재설정이 필요하고 Windows가 해당 폴링 창 내에서 _BST 메서드의 주기적 실행을 보장하는 경우 _DSM 메서드를 구현합니다.

  • 플랫폼의 열 모델에 배터리 충전 속도 제어가 필요한 경우 _DSM 메서드를 구현합니다.