USB TYPE-C® 커넥터 UCSI(시스템 소프트웨어 인터페이스) 드라이버

Microsoft는 ACPI 전송을 위한 UCSI(USB Type-C® 커넥터 시스템 소프트웨어 인터페이스) 사양 규격 드라이버를 제공합니다. 디자인에 ACPI 전송이 포함된 컨트롤러가 포함된 경우 시스템의 BIOS/EC에서 UCSI를 구현하고 기본 제공 UCSI 드라이버(UcmUcsiCx.sys 및 UcmUcsiAcpiClient.sys)를 로드합니다.

UCSI 규격 하드웨어가 ACPI 이외의 전송을 사용하는 경우 UCSI 클라이언트 드라이버를 작성해야 합니다.

임베디드 컨트롤러가 있는 시스템의 USB Type-C 구성 요소를 지원하기 위한 드라이버

다음은 임베디드 컨트롤러가 있는 시스템의 예입니다.

USB Type-C 소프트웨어 구성 요소의 다이어그램

앞의 예제에서 USB 역할 전환은 시스템의 펌웨어에서 처리되고 USB 역할 스위치 드라이버 스택은 로드되지 않습니다. 다른 시스템에서는 이중 역할이 지원되지 않으므로 드라이버 스택이 로드되지 않을 수 있습니다.

앞의 이미지에서

  • USB 디바이스 쪽 드라이버

    USB 디바이스 쪽 드라이버는 함수/디바이스/주변 장치를 서비스합니다. USB 함수 컨트롤러 클래스 확장은 BC 1.2 충전기를 사용하여 MTP(미디어 전송 프로토콜) 및 충전을 지원합니다. Microsoft는 Synopsys USB 3.0 및 ChipIdea USB 2.0 컨트롤러용 기본 클라이언트 드라이버를 제공합니다. USB 함수 컨트롤러 클라이언트 드라이버 프로그래밍 인터페이스를 사용하여 함수 컨트롤러에 대한 사용자 지정 클라이언트 드라이버를 작성할 수 있습니다. 자세한 내용은 USB 함수 컨트롤러용 Windows 드라이버 개발을 참조하세요.

    SoC 공급업체는 충전기 감지를 위한 USB 기능 하위 필터 드라이버를 제공할 수 있습니다. 기본 제공 Synopsys USB 3.0 또는 ChipIdea USB 2.0 클라이언트 드라이버를 사용하는 경우 사용자 고유의 필터 드라이버를 구현할 수 있습니다.

  • USB 호스트 쪽 드라이버

    USB 호스트 쪽 드라이버는 EHCI 또는 XHCI 규격 USB 호스트 컨트롤러에서 작동하는 드라이버 집합입니다. 역할 스위치 드라이버가 호스트 역할을 열거하는 경우 드라이버가 로드됩니다. 호스트 컨트롤러가 사양을 준수하지 않는 경우 UCX(USB 호스트 컨트롤러 확장) 프로그래밍 인터페이스를 사용하여 사용자 지정 드라이버를 작성할 수 있습니다. 자세한 내용은 USB 호스트 컨트롤러용 Windows 드라이버 개발을 참조하세요.

    모든 USB 디바이스 클래스가 Windows 10 Mobile 지원되지는 않습니다.

  • USB 커넥터 관리자

    Microsoft는 USB Type-C 커넥터 시스템 소프트웨어 인터페이스 사양에 정의된 기능을 구현하는 Windows(UcmUcsiCx.sys)가 포함된 UCSI 기본 제공 드라이버를 제공합니다. 이 사양은 UCSI의 기능을 설명하고 하드웨어 구성 요소 디자이너, 시스템 빌더 및 디바이스 드라이버 개발자를 위한 레지스터 및 데이터 구조를 설명합니다.

    이 드라이버는 임베디드 컨트롤러가 있는 시스템을 위한 것입니다. 이 드라이버는 Microsoft에서 제공하는 USB 커넥터 관리자 클래스 확장 드라이버(Ucmcx.sys)의 클라이언트입니다. 드라이버는 데이터 또는 전원 역할을 변경하기 위해 펌웨어에 대한 요청을 시작하고 사용자에게 문제 해결 메시지를 제공하는 데 필요한 정보를 가져오는 등의 작업을 처리합니다.

Windows에 필요한 UCSI 명령

모든 UCSI 구현에 필요한 명령은 UCSI 사양을 참조하세요.

필수로 표시된 명령 외에도 Windows에는 다음 명령이 필요합니다.

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: 시스템 또는 컨트롤러는 SET_NOTIFICATION_ENABLE 내에서 다음 알림을 지원해야 합니다.
    • 지원되는 공급자 기능 변경
    • 협상된 전원 수준 변경
  • GET_CONNECTOR_STATUS: 시스템 또는 컨트롤러는 GET_CONNECTOR_STATUS 내에서 이러한 커넥터 상태 변경 내용을 지원해야 합니다.
    • 지원되는 공급자 기능 변경
    • 협상된 전원 수준 변경

BIOS에서 UCSI를 구현하는 데 필요한 작업에 대한 자세한 내용은 UCSI의 Intel BIOS 구현을 참조하세요.

UCSI 2.0 이상용 UCM-UCSI ACPI 디바이스

Windows 11 버전 22H2 9월 업데이트부터 Windows UCM-UCSI ACPI 디바이스 드라이버는 UCSI 사양 버전 2.0 및 2.1을 지원합니다. UCSI 사양 2.0에는 UCSI 사양 표 3-1 데이터 구조에 정의된 대로 데이터 구조의 메모리 매핑에 대한 호환성이 손상되는 변경이 있습니다. 이전 버전과의 호환성을 유지하기 위해 Windows에서는 ACPI 펌웨어의 UCM-UCSI ACPI 디바이스 에서 다음 _DSM 함수를 구현하고 UCSI OPM이 보고된 UCSI 사양 버전을 따라야 함을 나타내기 위해 0이 아닌 값을 반환하려면 사양 버전 2.0 이상의 UCSI PPM이 필요합니다.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: 수정 버전 ID = 0
  • Arg2: 함수 인덱스 = 5
  • Arg3: 빈 패키지(사용되지 않음)

반환 값:

요소 개체 형식 설명
UsePpmReportedUcsiVersion 정수(32비트) 0x00000000(기본값): UCSI 사양 표 3-1 데이터 구조에 정의된 구조체의 값이 2.0 이상인 경우 VERSION UCSI OPM은 여전히 UCSI 사양 1.2를 따릅니다. 그렇지 않으면 UCSI OPM은 구조체의 값에 따라 UCSI 사양을 VERSION 따릅니다.

참고

UCM-UCSI ACPI 디바이스의 경우 기존 _DSM 메서드의 새로운 함수입니다. 이 _DSM 메서드의 다른 기능은 UCSI 문서의 Intel BIOS 구현 에 따라 구현되어야 합니다. 지원되는 모든 함수의 비트 마스크를 반환하는 함수 0도 그에 따라 업데이트해야 합니다.

UCSI에 대한 예제 흐름

이 섹션에 제공된 예제에서는 USB Type-C 하드웨어/펌웨어, UCSI 드라이버 및 운영 체제 간의 상호 작용에 대해 설명합니다.

DRP 역할 검색

  1. USB Type-C 하드웨어/펌웨어는 디바이스 연결 이벤트를 검색하고 Windows 10 시스템 DRP 시스템은 처음에 UFP 역할이 됩니다.
    1. 펌웨어는 커넥터의 변경 사항을 나타내는 알림을 보냅니다.
    2. UCSI 드라이버는 GET_CONNECTOR_STATUS 요청을 보냅니다.
    3. 펌웨어는 연결 상태 = 1 및 커넥터 파트너 유형 = DFP로 응답합니다. ​
  2. USB 함수 스택의 드라이버는 열거형에 응답합니다.
  3. USB 커넥터 관리자 클래스 확장은 USB 함수 스택이 로드되었으므로 시스템이 잘못된 상태임을 인식합니다. UCSI 드라이버에 USB 작업 역할 설정 및 전원 방향 역할 설정 요청을 펌웨어로 보내도록 지시합니다.
  4. USB Type-C 하드웨어/펌웨어는 DFP를 사용하여 역할 교환 작업을 시작합니다.

충전기 불일치 오류 조건 검색

  1. USB Type-C 하드웨어/펌웨어는 충전기가 연결되어 있음을 감지하고 기본 전원 계약을 협상합니다. 또한 충전기가 시스템에 충분한 전력을 제공하지 않는 것을 관찰합니다.

  2. USB Type-C 하드웨어/펌웨어는 느린 충전 비트를 설정합니다.

    1. 펌웨어는 커넥터의 변경 사항을 나타내는 알림을 보냅니다.
    2. UCSI 드라이버는 GET_CONNECTOR_STATUS 요청을 보냅니다.
    3. 펌웨어는 연결 상태 = 1, 커넥터 파트너 유형=DFP 및 배터리 충전 상태 = 느린/세류로 응답합니다.
  3. USB 커넥터 관리자 클래스 확장은 UI에 알림을 보내 충전기 불일치 문제 해결 메시지를 표시합니다.

UCSI를 테스트하는 방법

UCSI 구현을 테스트하는 방법에는 여러 가지가 있습니다. UCSI BIOS/EC 구현에서 개별 명령을 테스트하려면 MUTT 소프트웨어 팩에 제공되는 UCSIControl.exe 사용합니다. 전체 UCSI 구현을 테스트하려면 Windows HLK(하드웨어 랩 키트)에서 찾을 수 있는 UCSI 테스트와 Type-C 수동 Interop 프로시저의 단계를 모두 사용합니다.

UCSIControl.exe

UCSIControl.exe 사용하여 UCSI BIOS/EC 구현에서 개별 명령을 테스트할 수 있습니다. 이 도구를 사용하면 UCSI 드라이버를 통해 UCSI 명령을 펌웨어로 보낼 수 있습니다. 드라이버를 로드하고 실행해야 하며 드라이버에 대한 테스트 인터페이스도 사용하도록 설정해야 합니다. 기본적으로 이 인터페이스는 소매 시스템의 권한이 없는 사용자가 액세스할 수 없도록 사용하도록 설정되지 않습니다.

  1. UCSI USB 커넥터 관리자라는 장치 관리자(devmgmt.msc)에서 디바이스 노드를 찾습니다. 노드는 유니버설 직렬 버스 컨트롤러 범주에 속합니다 .

  2. 디바이스를 길게 누르거나 마우스 오른쪽 단추로 클릭하고 속성을 선택하고 세부 정보 탭을 엽니다.

  3. 드롭다운에서 디바이스 인스턴스 경로를 선택하고 속성 값을 기록해 둡니다.

  4. 레지스트리 편집기(regedit.exe)를 엽니다.

  5. 이 키 아래의 디바이스 instance 경로로 이동합니다.

    <device-instance-path>\Device 매개 변수 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\

  6. TestInterfaceEnabled라는 DWORD 값을 만들고 값을 0x1 설정합니다.

  7. 장치 관리자 디바이스 노드에서 사용 안 함 옵션을 선택한 다음 사용을 선택하여 디바이스를 다시 시작합니다. 또는 PC를 다시 시작할 수 있습니다.

/?UcsiControl.exe 실행하여 도움말을 볼 수 있습니다.

일반적인 명령은 다음과 같습니다.

UCSI 명령 UcsiControl.exe 명령
PPM 초기화 UcsiControl.exe 보내기 0 1
커넥터 다시 설정 일시 재설정: UcsiControl.exe 보내기 0 10003

하드 재설정: UcsiControl.exe 보내기 0 810003
알림 사용 설정 모든 알림: UcsiControl.exe 보내기 0 ffff0005

명령 완료만: 보내기 0 00010005UcsiControl.exe

알림 없음: UcsiControl.exe 0 보내기 00000005
기능 가져오기 UcsiControl.exe 보내기 0 6
커넥터 기능 가져오기 UcsiControl.exe Send 0 10007
UOM 설정 DFP: UcsiControl.exe 0 보내기 810008

UFP: UcsiControl.exe 보내기 0 1010008

DRP: UcsiControl.exe Send 0 2010008
UOR 설정 DFP: UcsiControl.exe 보내기 0 810009

UFP: UcsiControl.exe Send 0 1010009

수락: UcsiControl.exe 보내기 0 2010009
PDR 설정 공급자: UcsiControl.exe 보내기 0 81000B

소비자: UcsiControl.exe 보내기 0 101000B

수락: UcsiControl.exe Send 0 201000B
PDO 가져오기 로컬 원본: UcsiControl.exe 보내기 7 00010010

로컬 싱크: UcsiControl.exe 송신 3 00010010

원격 원본: UcsiControl.exe 보내기 7 00810010

원격 싱크: UcsiControl.exe 송신 3 00810010
커넥터 상태 가져오기 UcsiControl.exe 보내기 0 010012
오류 상태 가져오기 UcsiControl.exe 보내기 0 13