다음을 통해 공유


USB 이중 역할 드라이버 스택 아키텍처

USB 이중 역할 컨트롤러는 이제 데스크톱 버전(Home, Pro, Enterprise 및 Education) 및 Windows 10 Mobile 대한 Windows 10 시작하여 Windows에서 지원됩니다.

소개

USB 이중 역할 기능을 사용하면 시스템이 USB 디바이스 또는 USB 호스트가 될 수 있습니다. USB 이중 역할에 대한 자세한 사양은 이동 정보 페이지의 USB-IF USB에서 찾을 수 있습니다.

여기서 중요한 점은 이중 역할 기능을 통해 휴대폰, 패블릿 또는 태블릿과 같은 모바일 디바이스가 자신을 디바이스 또는 호스트로 지정할 수 있다는 것입니다.

모바일 디바이스가 함수 모드인 경우 PC 또는 연결된 모바일 디바이스의 호스트 역할을 하는 다른 디바이스에 연결됩니다.

모바일 디바이스가 호스트 모드인 경우 사용자는 마우스 또는 키보드와 같은 디바이스를 디바이스에 연결할 수 있습니다. 이 경우 모바일 디바이스는 연결된 디바이스를 호스트합니다.

Windows 10 USB 이중 역할에 대한 지원을 제공하여 다음과 같은 이점을 제공합니다.

  • USB를 통한 모바일 주변 장치 연결은 Bluetooth와 같은 무선 프로토콜에 비해 더 큰 데이터 대역폭을 제공합니다.
  • 연결된 상태에서 USB를 통해 배터리를 충전하고 다른 USB 장치와 통신하는 옵션입니다(필요한 하드웨어 지원이 있는 한).
  • 모든 작업에 대해 스마트폰과 같은 모바일 장치를 소유할 가능성이 가장 높은 고객을 사용하도록 설정합니다. 이 기능을 사용하면 모바일 디바이스가 도킹되어 주변 장치를 호스트하는 유선 도킹 시나리오에서 생산성이 향상됩니다.

다음 표에서는 Windows의 데스크톱 및 모바일 SKU에서 사용할 수 있는 호스트 클래스 드라이버 목록을 보여 줍니다.

USB 호스트 클래스 드라이버 Windows 10 Mobile 데스크톱용 Windows 10 버전
USB 허브(USBHUB) Yes 예(Windows 2000 이후)
HID - 키보드/마우스(HidClass, KBDCLass, MouClass, KBDHid, MouHid) Yes 예(Windows 2000 이후)
USB 대용량 스토리지(대량 & UASP) Yes 예(Windows 2000 이후)
일반 USB 호스트 드라이버(WinUSB) Yes 예(Windows Vista 이후)
USB 오디오/출력(USBAUDIO) Yes 예(Windows XP 이후)
직렬 디바이스(USBSER) Yes 예(Windows 10 이후)
Bluetooth(BTHUSB) Yes 예(Windows XP 이후)
인쇄(usbprint) No 예(Windows XP 이후)
검사(USBSCAN) No 예(Windows 2000 이후)
WebCam(USBVIDEO) No 예(Windows Vista 이후)
미디어 전송 프로토콜(MTP 초기자) No 예(Windows Vista 이후)
RNDIS(원격 NDIS) No 예(Windows XP 이후)
USB를 통해 IP(IPoverUSB) No 예(Windows 10 새로운 기능)

테이블의 클래스 드라이버는 디바이스 클래스 원격 분석에 따라 선택되었으며 Windows 10 위해 선택된 주요 시나리오에 따라 선택되었습니다. Windows 10 Mobile 주요 디바이스를 지원하기 위해 제한된 수의 받은 편지함, 타사 호스트 드라이버를 포함할 계획입니다. 데스크톱 버전의 Windows 10 경우 이러한 드라이버는 OEM의 웹 사이트 또는 WU(Windows 업데이트)를 통해 사용할 수 있습니다.

Windows 10 Mobile 경우 받은 편지함이 포함되지 않은 타사 드라이버는 WU에서 사용할 수 없습니다. USB 호스트 스택 + HID의 디스크 공간은 작게 유지되었습니다. 따라서 모든 클래스 드라이버와 거의 타사 드라이버가 Windows 10 Mobile 받은 편지함에 포함되어 있지 않습니다. 타사 드라이버를 사용할 수 있도록 하려는 OEM은 BSP(보드 지원 패키지)를 사용하여 모바일 디바이스의 OS 이미지에 추가할 수 있습니다.

다음 표에서는 Windows의 모바일 SKU에서 사용할 수 있는 함수 클래스 드라이버를 보여줍니다.

참고

함수 드라이버는 데스크톱 버전의 Windows 10 사용할 수 없습니다.

USB 함수 클래스 드라이버 Windows 10 Mobile 데스크톱용 Windows 10 버전 참고
MTP 응답자(미디어 전송 프로토콜) Yes 아니요 데스크톱에는 MTP 응답자에 대한 시나리오가 없습니다. 데스크톱 시스템 간의 P2P 시나리오는 WinUSB를 통한 Easy-MigCable 통해 사용하도록 설정되었습니다.
비디오 표시(vidstream) Yes 아니요
일반 USB 함수 드라이버(GenericUSBFn) Yes 아니요 IPoverUSB 및 기타 데스크톱 플래시 시나리오에서 필요합니다.

디바이스 클래스 인기 목록이 시간이 지남에 따라 변경됨에 따라 추가 클래스 드라이버 지원을 제공해야 하는지 알려드리기 위해 디바이스 첨부 파일 데이터를 모니터링합니다.

드라이버 구현

Microsoft URS(USB 역할 스위치) 드라이버를 사용하면 시스템 구현자가 플랫폼의 이중 역할 USB 기능을 활용할 수 있습니다.

URS 드라이버는 단일 포트를 통해 호스트 및 주변 역할 모두에서 작동할 수 있는 단일 USB 컨트롤러를 사용하는 플랫폼에 이중 역할 기능을 제공하기 위한 것입니다. 주변 역할을함수 역할이라고도 합니다. URS 드라이버는 플랫폼의 하드웨어 이벤트를 기반으로 포트의 현재 역할과 적절한 소프트웨어 스택의 로드 및 언로드를 관리합니다.

USB 마이크로 AB 커넥터가 있는 시스템에서 드라이버는 커넥터의 ID 핀 상태를 나타내는 하드웨어 인터럽트 를 사용합니다. 이 핀은 컨트롤러가 연결에서 호스트 역할 또는 함수 역할을 맡아야 하는지 여부를 감지하는 데 사용됩니다. 자세한 내용은 USB On-The-Go 사양을 참조하세요. USB Type-C 커넥터가 있는 시스템에서 OEM 구현자는 USB Type-C 커넥터 드라이버 프로그래밍 인터페이스를 사용하여 커넥터 클라이언트 드라이버를 제공해야 합니다. 클라이언트 드라이버는 MICROSOFT에서 제공하는 USB 커넥터 UcmCx(Manager 클래스 확장)와 통신하여 CC 감지, PD 메시징 등 USB Type-C 커넥터의 모든 측면을 관리합니다. 역할 전환의 경우 클라이언트 드라이버는 USB Type-C 커넥터의 상태를 URS 드라이버와 통신합니다.

다음 다이어그램에서는 URS 드라이버를 사용하는 이중 역할 컨트롤러에 대한 USB 소프트웨어 드라이버 스택을 보여 줍니다.

usb 역할 스위치 드라이버 스택 아키텍처.

URS 드라이버는 이전 다이어그램에 표시된 함수 및 호스트 스택을 동시에 로드하지 않습니다. URS 드라이버는 USB 컨트롤러의 역할에 따라 함수 스택 또는 호스트 스택을 로드합니다.

하드웨어 요구 사항

이중 역할 USB 기능을 제공하기 위해 URS 드라이버를 활용하는 플랫폼을 개발하는 경우 다음 하드웨어 요구 사항을 충족해야 합니다.

  • USB 컨트롤러

    이러한 드라이버는 Microsoft에서 기본 제공 드라이버로 제공합니다.

    Synopsys DesignWare Core USB 3.0 컨트롤러. 받은 편지함 INF: UrsSynopsys.inf.

    Chipidea High-Speed USB OTG 컨트롤러. 받은 편지함 INF: UrsChipidea.inf.

  • ID 핀 인터럽트

    USB가 아닌 Type-C 시스템의 ID 핀 인터럽트는 다음 두 가지 방법 중 하나로 구현될 수 있습니다.

    두 개의 에지 트리거 인터럽트: 커넥터의 ID 핀이 접지될 때 발생하는 인터럽트와 ID 핀이 부동일 때 발생하는 인터럽트입니다.

    ID 핀이 접지될 때 활성 수준에 있는 단일 활성-둘 다 인터럽트입니다.

  • USB 컨트롤러 열거형

    USB 이중 역할 컨트롤러는 ACPI 열거형이어야 합니다.

  • 소프트웨어 지원

    URS 드라이버는 커넥터를 통해 VBus를 제어할 수 있는 소프트웨어 인터페이스를 기대합니다. 이 인터페이스는 SoC에 따라 다릅니다. 자세한 내용은 SoC 공급업체에 문의하세요.

이러한 USB OTG 기능은 Windows에서 지원되지 않습니다.

  • ACA(액세서리 충전기 어댑터 감지).
  • SRP(세션 요청 프로토콜).
  • HNP(호스트 협상 프로토콜).
  • ADP(연결 검색 프로토콜).

ACPI 시스템 구성

URS 드라이버를 사용하려면 시스템에 대한 ACPI 정의 파일을 만들어야 합니다. 또한 고려해야 할 몇 가지 드라이버 관련 고려 사항이 있습니다.

다음은 USB 이중 역할 컨트롤러에 대한 샘플 ACPI 정의입니다.

//
// You may name the device whatever you want; we don't depend on it being called 'URS0'.
//
Device(URS0)
{
    //
    // Replace with your own hardware ID. Microsoft will add it to the inbox INF,
    // or you may choose to author a custom INF that uses Needs & Includes directives
    // to include sections from the inbox INF.
    //
    Name(_HID, "ABCD1234")

    Name(_CRS, ResourceTemplate() {
        //
        // The register space for the controller must be defined here.
        //
        Memory32Fixed(ReadWrite, 0xf1000000, 0xfffff)


        //
        // The ID pin interrupts, if you are using two edge-triggered interrupts.
        //
        GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1001}
        GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1002}

        //
        // Following is an example of a single active-both interrupt.
        //
        // GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x12}
        //

        //
        // For a Type-C platform, you do not need to specify any interrupts here.
        //
    })

    //
    // This child device represents the USB host controller. This device node is in effect
    // when the controller is in host mode.
    // You may name the device whatever you want; we don't depend on it being called 'USB0'.
    //
    Device(USB0)
    {
        //
        // The host controller device node needs to have an address of '0'
        //
        Name(_ADR, 0)
        Name(_CRS, ResourceTemplate() {

            //
            // The controller interrupt.
            //
            Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x10}
        })
    }

    //
    // This child device represents the USB function controller. This device node is in effect
    // when the controller is in device/function/peripheral mode.
    // You may name the device whatever you want; we don't depend on it being called 'UFN0'.
    //
    Device(UFN0)
    {
        //
        // The function controller device node needs to have an address of '1'
        //
        Name(_ADR, 1)
        Name(_CRS, ResourceTemplate() {

            //
            // The controller interrupt (this could be the same as the one defined in
            // the host controller).
            //
            Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x11}
        })
    }
}

다음은 ACPI 파일의 기본 섹션에 대한 몇 가지 설명입니다.

  • URS0은 USB 이중 역할 컨트롤러에 대한 ACPI 정의입니다. URS 드라이버가 로드할 ACPI 디바이스입니다.

  • USB0 및 UFN0은 URS0의 scope 내의 자식 디바이스입니다. USB0 및 UFN0은 각각 URS 드라이버에 의해 열거되는 두 개의 자식 스택과 호스트 및 함수 스택을 나타냅니다. _ADR ACPI가 이러한 디바이스 정의를 URS 드라이버가 만드는 디바이스 개체와 일치시키는 수단입니다.

  • 컨트롤러가 두 역할에 대해 동일한 인터럽트 를 사용하는 경우 두 자식 디바이스에서 동일한 컨트롤러 인터럽트 를 설명할 수 있습니다. 이 경우에도 인터럽트는 여전히 "배타적"으로 설명할 수 있습니다.

  • 필요에 따라 이 ACPI 정의 파일을 추가할 수 있습니다. 예를 들어 ACPI 정의 파일의 디바이스에서 필요한 다른 메서드 또는 속성을 설정할 수 있습니다. 이러한 추가는 URS 드라이버의 작동을 방해하지 않습니다. 스택에 필요한 추가 리소스는 적절한 디바이스의 _CRS 설명될 수도 있습니다.

URS 드라이버는 호스트 및 함수 스택에 하드웨어 ID를 할당합니다. 이러한 하드웨어 ID는 URS 디바이스의 하드웨어 ID에서 파생됩니다. 예를 들어 하드웨어 ID가 ACPI\ABCD1234 URS 디바이스가 있는 경우 URS 드라이버는 다음과 같이 호스트 및 함수 스택에 대한 하드웨어 ID를 만듭니다.

  • 호스트 스택: URS\ABCD1234&HOST

  • 함수 스택: URS\ABCD1234&FUNCTION

INF 드라이버 설치 패키지

타사 드라이버 패키지는 필요한 경우 이 체계에 종속할 수 있습니다.

IHV 또는 OEM이고 사용자 고유의 드라이버 패키지를 제공할 생각인 경우 고려해야 할 몇 가지 사항은 다음과 같습니다.

  • URS 드라이버 패키지

    각 플랫폼의 이중 역할 컨트롤러에 대한 하드웨어 ID가 URS용 받은 편지함 INF에 추가될 것으로 예상됩니다. 그러나 어떤 이유로 ID를 추가할 수 없는 경우 IHV/OEM은 받은 편지함 INF가 필요/포함되고 하드웨어 ID와 일치하는 INF를 드라이버 패키지에 제공할 수 있습니다.

    IHV/OEM에 드라이버 스택에 필터 드라이버가 있어야 하는 경우에 필요합니다.

  • 호스트 드라이버 패키지.

    받은 편지함 usbxhci.inf 가 필요/포함되고 호스트 디바이스 하드웨어 ID와 일치하는 IHV/OEM 제공 드라이버 패키지가 필요합니다. 하드웨어 ID 일치는 이전 섹션에 설명된 체계를 기반으로 합니다.

    IHV/OEM에 드라이버 스택에 필터 드라이버가 있어야 하는 경우에 필요합니다.

    URS 드라이버가 호스트 디바이스에 대한 XHCI 호환 ID를 할당하도록 하는 작업이 진행 중입니다.

  • 함수 드라이버 패키지

    받은 편지함 Ufxsynopsys.inf 를 필요로/포함하고 주변 장치 하드웨어 ID와 일치하는 IHV/OEM 제공 드라이버 패키지가 필요합니다. 하드웨어 ID 일치는 이전 섹션에 설명된 체계를 기반으로 합니다.

    IHV/OEM은 드라이버 패키지에 필터 드라이버를 포함할 수도 있습니다.

참고 항목

이중 역할 컨트롤러 드라이버 참조