이 항목에서는 USB 디바이스 및 드라이버를 Windows 운영 체제와 개발 및 통합하는 데 익숙하지 않은 드라이버 개발자에게 자주 묻는 질문을 제공합니다.
나는 거의 서로 교환 주위에 던져 수많은 USB 용어를 들을 수 있습니다. 그들은 모두 무엇을 의미합니까?
"USB 3.0 덕분에 SuperSpeed USB 썸 드라이브를 PC의 xHCI 호스트 컨트롤러에 연결하고 파일을 더 빠르게 복사할 수 있습니다."
해당 문장의 USB 용어를 이해해 보겠습니다. USB 3.0, USB 2.0 및 USB 1.0은 USB 구현자 포럼의 USB 사양 수정 번호를 참조합니다. USB 사양은 호스트 PC와 USB 디바이스가 서로 통신하는 방법을 정의합니다.
버전 번호는 최대 전송 속도도 나타냅니다. 최신 사양 수정 버전은 최대 5Gbps의 전송 속도를 지정하는 USB 3.0입니다. USB 1.0은 두 가지 데이터 속도, 즉 저속 USB(최대 1.5Mbps) 및 전속 USB(최대 12Mbps)를 정의합니다. USB 2.0은 새로운 데이터 속도, 고속 USB(480Mbps)를 정의하면서 저속 및 전속 디바이스에 대한 지원을 유지합니다. USB 3.0은 이전에 정의된 모든 데이터 속도에서 계속 작동합니다. 제품 패키징을 살펴보면 SuperSpeed USB는 최신 USB 3.0 디바이스를 참조합니다. 고속 USB는 고속 USB 2.0 디바이스를 설명하는 데 사용됩니다. 설명자가 없는 USB는 저속 및 전속 디바이스를 나타냅니다.
USB 프로토콜 외에도 디바이스가 연결된 PC의 하드웨어 부분인 USB 호스트 컨트롤러에 대한 두 번째 사양이 있습니다. 호스트 컨트롤러 인터페이스 사양은 호스트 컨트롤러 하드웨어 및 소프트웨어가 상호 작용하는 방법을 정의합니다. xHCI(eXtensible Host Controller Interface)는 USB 3.0 호스트 컨트롤러를 정의합니다. EHCI(고급 호스트 컨트롤러 인터페이스)는 USB 2.0 호스트 컨트롤러를 정의합니다. UHCI(유니버설 호스트 컨트롤러)와 OHCI(Open Host Controller)는 USB 1.0 호스트 컨트롤러의 두 가지 대체 구현입니다.
내 PC에 USB 3.0 포트가 있나요?
USB 3.0 포트는 SuperSpeed USB 로고로 표시되거나 포트가 일반적으로 파란색입니다.
최신 PC에는 USB 3.0 및 USB 2.0 포트가 모두 있습니다. SuperSpeed USB 디바이스가 최고 속도로 수행되도록 하려면 USB 3.0 포트를 찾아 해당 포트에 디바이스를 연결합니다. USB 2.0 포트에 연결된 SuperSpeed 디바이스는 고속으로 작동합니다.
특정 포트가 장치 관리자 USB 3.0 포트인지 확인할 수도 있습니다. Windows Vista 이상 버전의 Windows에서 장치 관리자 열고 목록에서 포트를 선택합니다.
확장 가능한 호스트 컨트롤러가 있는 경우 USB 3.0을 지원합니다.
내 eXtensible 호스트 컨트롤러용 드라이버를 설치해야 하나요?
Windows 8 및 Windows Server 2012 USB 3.0에 대한 지원이 포함됩니다.
PC에 USB 3.0 포트가 있고 Windows 8 이전 버전의 Windows를 실행하는 경우 호스트 컨트롤러 드라이버는 PC 제조업체에서 제공합니다. 해당 드라이버를 다시 설치해야 하는 경우 제조업체에서 가져와야 합니다.
Windows 8 이전 버전의 Windows를 실행하는 PC에 USB 3.0 컨트롤러 카드 추가한 경우 컨트롤러 카드 제조업체에서 제공하는 드라이버를 설치해야 합니다.
Windows 8 Microsoft에서 제공하는 USB 3.0 드라이버 세트(USB 드라이버 스택)는 대부분의 호스트 컨트롤러에서 작동합니다. Microsoft USB 3.0 드라이버 스택은 Fresco Logic FL1000 컨트롤러에서 작동하지 않습니다. FL1000 컨트롤러가 있는지 확인하려면 장치 관리자 열고 유니버설 직렬 버스 컨트롤러를 확장합니다. 컨트롤러 노드를 선택하고 유지(또는 마우스 오른쪽 단추로 클릭)하여 컨트롤러 속성을 봅니다. 세부 정보 탭의 목록에서 하드웨어 ID 속성을 선택합니다. 하드웨어 ID가 PCI\VEN_1B73&DEV_1000 시작하는 경우 FL1000입니다. 해당 컨트롤러의 경우 PC 또는 컨트롤러 카드 제조업체에서 드라이버를 다운로드하여 설치합니다.
내 시스템에 여러 호스트 컨트롤러가 표시되는 이유는 무엇인가요?
PC에 연결하는 USB 장치 외에도 웹캠, 지문 판독기, SD 카드 판독기 등 USB를 통해 연결될 수 있는 여러 디바이스가 PC 내에 통합되어 있습니다. 이러한 모든 디바이스를 연결하고 외부 USB 포트를 계속 제공하기 위해 PC는 여러 USB 호스트 컨트롤러를 지원합니다.
USB 3.0 xHCI 호스트 컨트롤러는 모든 USB 장치 속도, SuperSpeed, 고속, 최고 속도 및 저속과 완전히 이전 버전과 호환됩니다. 모든 디바이스를 xHCI 컨트롤러에 직접 연결하고 해당 디바이스가 작동할 것으로 예상할 수 있습니다. EHCI 컨트롤러의 경우 그렇지 않습니다. USB 2.0 사양은 모든 디바이스 속도를 지원하지만 EHCI 컨트롤러는 고속 USB 디바이스만 지원합니다. 최대 속도 및 저속 USB 디바이스가 작동하려면 USB 2.0 허브를 통해 EHCI 컨트롤러에 연결해야 하거나 UHCI 또는 OHCI 컨트롤러에 연결해야 합니다.
최신 PC의 경우 PC에서 노출하는 대부분의 USB 2.0 포트는 USB 2.0 허브의 다운스트림입니다. 이 허브는 EHCI 컨트롤러에 연결됩니다. 이렇게 하면 PC의 USB 2.0 포트가 모든 디바이스 속도에서 작동할 수 있습니다. SuperSpeed 디바이스는 2.0 포트에 연결할 때 고속 디바이스로 작동합니다.
USB 2.0 사양이 릴리스된 후 PC는 모든 디바이스 속도를 지원하기 위해 호스트 컨트롤러의 조합을 사용했습니다. 단일 USB 2.0 포트는 EHCI 호스트 컨트롤러와 UHCI 또는 OHCI 호스트 컨트롤러의 두 호스트 컨트롤러에 연결됩니다. 디바이스를 연결할 때 하드웨어는 연결을 두 호스트 중 하나로 동적으로 라우팅합니다. 루틴은 디바이스의 속도에 따라 달라집니다.
USB 3.0 허브를 하나만 연결한 경우 장치 관리자 두 개의 허브가 표시되는 이유는 무엇인가요?
xHCI 호스트 컨트롤러는 모든 속도의 디바이스에서 작동하지만 SuperSpeed 허브는 SuperSpeed 디바이스에서만 작동합니다. USB 3.0 허브가 모든 속도로 작동할 수 있도록 하려면 SuperSpeed 허브와 USB 2.0 허브의 두 부분으로 구성됩니다. USB 3.0 허브는 디바이스 속도에 따라 디바이스를 SuperSpeed 허브 또는 2.0 허브로 동적으로 라우팅하여 모든 속도를 지원할 수 있습니다.
장치 관리자 열고 연결별로 디바이스를 확인한 다음, 확장 가능한 호스트 컨트롤러를 찾습니다. 단일 USB 3.0 허브를 USB 3.0 포트에 연결하는 경우 컨트롤러 루트 허브의 두 허브 다운스트림이 있습니다.
아래 예제에서는 SuperSpeed USB 스토리지 디바이스와 USB 오디오 디바이스가 모두 USB 3.0 허브에 연결됩니다. 스토리지 디바이스가 SuperSpeed 허브의 다운스트림이고 오디오 디바이스가 USB 2.0 허브의 다운스트림임을 확인할 수 있습니다.
2.0 포트에 연결된 디바이스에 대해 로드되는 드라이버 집합은 무엇인가요?
호스트 컨트롤러의 각 유형에 대해 다른 이진 집합이 로드됩니다. Windows에서 로드하는 USB 드라이버 스택은 연결된 디바이스의 속도가 아니라 호스트 컨트롤러 유형과 상관 관계가 있음을 이해하는 것이 중요합니다.
이 이미지에서는 각 유형의 USB 호스트 컨트롤러에 대해 로드되는 드라이버를 확인할 수 있습니다.
USB 3.0 포트가 xHCI 컨트롤러로 올바르게 라우팅되면 Windows는 xHCI 드라이버 스택(USB 3.0 드라이버 스택이라고도 함)을 로드합니다.
USB 2.0 포트가 USB 2.0 허브를 통해 EHCI 컨트롤러에 연결된 경우 트래픽이 EHCI 컨트롤러를 통해 이동하고 USB 2.0 드라이버 스택이 로드됩니다.
USB 드라이버 스택의 드라이버에 대한 자세한 내용은 Windows의 USB 호스트 쪽 드라이버를 참조하세요.
PC의 USB 2.0 포트가 도우미 컨트롤러를 사용하는 경우 포트가 라우팅되는 호스트 컨트롤러는 디바이스 속도에 따라 달라집니다. 예를 들어 저속 디바이스는 UHCI 또는 OHCI 컨트롤러를 통해 연결되고 USBUHCI 또는 USBOHCI 드라이버를 사용합니다. PC는 고속 디바이스를 EHCI 컨트롤러로 라우팅하므로 Windows는 USBEHCI 드라이버를 사용합니다.
다른 디바이스 속도는 컨트롤러에 대해 로드되는 드라이버를 결정하지 않습니다. 그러나 디바이스 속도가 다르면 사용되는 컨트롤러가 결정될 수 있습니다. 컨트롤러는 항상 동일한 드라이버를 사용합니다.
USB 3.0 디바이스가 SuperSpeed로 작동하고 있는지 여부를 확인할 어떻게 할까요? 있나요?
Windows 8 먼저 USB 3.0 포트와 xHCI 호스트 컨트롤러가 있는지 확인합니다. SuperSpeed USB 디바이스가 xHCI 호스트 컨트롤러에 연결된 경우 Windows 8 Windows 8 UI의 특정 부분에 "USB 3.0에 연결됨" 메시지를 표시합니다. 디바이스가 XHCI 컨트롤러 대신 EHCI 컨트롤러에 연결된 경우 메시지는 대신 "USB 3.0에 연결될 때 디바이스가 더 빠르게 수행될 수 있습니다"라고 읽습니다.
PC 설정에서 이러한 UI 메시지를 볼 수 있습니다.
- 참 모음을 엽니다(커서를 화면의 오른쪽 위 또는 아래쪽 모서리로 끌어오거나, Windows 키 + C를 입력하거나, 손가락으로 오른쪽에서 안쪽으로 살짝 밉니다).
- 설정을 선택한 다음, PC 설정 변경을 선택합니다.
- PC 설정에서 디바이스를 선택합니다.
이 이미지는 USB 3.0 디바이스가 SuperSpeed에서 작동할 때의 UI 메시지를 보여 줍니다.
이 이미지는 USB 디바이스가 SuperSpeed보다 낮은 버스 속도로 작동할 때의 UI 메시지를 보여 줍니다.
이러한 이미지와 같이 디바이스 및 프린터에서 유사한 메시지를 볼 수 있습니다.
USB 3.0 디바이스가 스토리지 디바이스인 경우 아래와 같이 볼륨 레이블을 선택하면 Windows Explorer 유사한 메시지가 표시됩니다. 메시지를 표시하려면 보기 -> 세부 정보 창을 선택해야 합니다.
디바이스 드라이버를 작성하는 경우 WDK(Windows 드라이버 키트)에 포함된 USBView 도구가 매우 유용합니다. Windows 8 WDK의 경우 Microsoft는 SuperSpeed USB 정보를 표시하도록 USBView를 업데이트했습니다. 이 도구를 사용하여 장치가 SuperSpeed에서 작동하고 있는지 여부를 확인할 수 있습니다. 이 이미지는 USBView의 SuperSpeed에서 작동하는 USB 3.0 디바이스를 보여줍니다.
디바이스 드라이버 개발자인 경우 USB 드라이버 스택 은 USB 3.0 디바이스에 대한 속도 정보를 쿼리하는 데 사용할 수 있는 IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 라는 새 IOCTL을 노출합니다.
SuperSpeed USB 디바이스가 동일한 고속 USB 디바이스보다 빠르지 않은 이유는 무엇인가요?
일반적으로 USB 3.0 USB 디바이스가 고속 USB 디바이스보다 빠르지 않으면 SuperSpeed에서 작동하지 않습니다. SuperSpeed USB 디바이스가 USB 3.0 포트에 연결된 경우 다음과 같은 이유로 SuperSpeed에서 작동하지 않을 수 있습니다.
USB 2.0 허브를 사용하고 있습니다.
허브를 사용하는 경우 허브가 USB 3.0 허브인지 확인합니다. USB 2.0 허브를 사용하는 경우 연결된 모든 SuperSpeed USB 디바이스가 고속으로 작동합니다. 허브를 USB 3.0 허브로 바꾸거나 디바이스를 USB 3.0 포트에 직접 연결합니다.
USB 3.0 허브의 펌웨어가 최신 상태가 아닙니다.
이전의 특정 USB 3.0 허브가 제대로 작동하지 않았습니다. 따라서 Windows는 해당 허브의 2.0 부분만 사용합니다. 장치 관리자 이 이미지에 표시된 대로 "비기능적" 허브를 나타내는 경우 Windows 8 허브의 3.0 부분을 사용하지 않습니다.
SuperSpeed 디바이스를 USB 3.0 포트에 직접 연결하거나 허브에서 펌웨어를 업데이트할 수 있습니다. Windows 8 최신 펌웨어가 있는 허브를 인식합니다.
장치가 USB 2.0 케이블로 연결되어 있습니다.
디바이스를 연결하는 데 사용되는 케이블이 USB 3.0 케이블인지 확인합니다. USB 3.0 케이블에 신호 무결성 문제가 발생할 수도 있습니다. 이 경우 디바이스가 고속으로 전환될 수 있습니다. 이 경우 다른 USB 3.0 케이블을 사용해야 합니다.
디바이스의 펌웨어가 최신 상태가 아닙니다.
제조업체의 웹 사이트에서 최신 버전을 가져와 SuperSpeed USB 디바이스의 펌웨어를 업데이트합니다. 일부 SuperSpeed USB 디바이스 제조업체는 펌웨어 업데이트로 디바이스에서 발견된 버그에 대한 수정 사항을 릴리스합니다.
호스트 컨트롤러의 펌웨어가 최신 상태가 아닙니다.
PC 제조업체의 사이트 또는 카드 제조업체 사이트의 추가에서 최신 버전을 가져와 USB 3.0 컨트롤러의 펌웨어를 업데이트합니다. 일부 USB 3.0 컨트롤러 제조업체는 펌웨어 업데이트로 컨트롤러에서 발견된 버그에 대한 수정 사항을 릴리스합니다.
시스템의 BIOS가 최신 상태가 아닙니다.
PC 제조업체에서 최신 버전을 가져와 시스템에 대한 BIOS를 업데이트합니다. 일부 마더보드에서 BIOS는 xHCI 호스트 컨트롤러에 연결된 디바이스를 EHCI 컨트롤러로 잘못 라우팅할 수 있습니다. 잘못된 라우팅으로 슈퍼스피드 USB 디바이스가 고속으로 작동합니다. BIOS 업데이트는 이 문제를 해결할 수 있습니다.
하나의 하드웨어에 복합 디바이스와 복합 디바이스를 사용할 수 있나요?
예. 3포트 버스 구동 허브가 있는 Microsoft Natural Keyboard Pro는 복합 복합 USB 디바이스의 예입니다. 디바이스에 포트 1에 연결된 복합 디바이스가 있습니다. 두 개의 추가 포트가 최종 사용자에게 노출됩니다.
포트 1에 연결된 디바이스는 저속 복합 디바이스입니다. 디바이스에는 두 개의 인터페이스가 있으며, 둘 다 HID(휴먼 인터페이스 디바이스)에 대한 USB 표준 디바이스 클래스 정의를 준수합니다. 복합 디바이스는 최상위 컬렉션을 사용하여 단일 HID 인터페이스를 통해 모든 컬렉션을 멀티플렉싱하는 대신 두 개의 HID 인터페이스를 제공합니다. 이 디자인은 이전 BIOS와의 호환성을 위해 선택되었습니다.
일부 USB 디바이스가 새 포트로 이동될 때 다시 설치되는 이유는 무엇인가요?
Windows 2000 이상 운영 체제에서는 USB 디바이스를 한 포트에서 다른 포트로 이동할 때 새 PDO(물리적 디바이스 개체)가 만들어집니다. 하드웨어에서 고유한 USB 일련 번호를 보고하는 경우 새 PDO가 만들어지지 않습니다.
동일한 PDO를 다시 사용하고 디바이스가 동일한 포트 또는 새 포트에 다시 삽입되었는지 여부에 관계없이 디바이스 환경이 변경되지 않도록 하려면 하드웨어 공급업체가 디바이스에 일련 번호를 저장해야 합니다. Windows 하드웨어 인증 프로그램 요구 사항에 따라 일련 번호는 디바이스 설치 식별자를 공유하는 모든 디바이스에 대해 고유해야 합니다.
USB 제품 패키징에 대한 디자인 권장 사항 목록이 있나요?
USB-IF는 Microsoft 및 기타 USB-IF 회원 회사와 협력하여 독립 하드웨어 공급업체가 패키징에 포함할 권장 사항 목록을 개발했습니다.
자세한 내용은 USB 웹 사이트에서 확인할 수 있습니다.
USB 고속 및 SuperSpeed의 경우 을 참조하세요 https://www.usb.org/.
USB 3.0 디바이스를 지원하려면 클라이언트 드라이버를 다시 작성해야 하나요?
낮은, 전체 또는 고속 디바이스가 USB 3.0 포트에 연결된 경우 모든 기존 클라이언트 드라이버는 그대로 계속 작동해야 합니다. Windows 8 기존 클라이언트 드라이버와의 호환성을 보장했습니다.
USB 3.0 드라이버 스택은 IRQL 수준, 호출자 컨텍스트 및 오류 상태 유지 관리하며, 디바이스와 상호 작용할 때 빈도 및 타이밍을 다시 시도하여 기존 드라이버가 계속 작동하도록 합니다. 테스트하는 것은 여전히 매우 중요합니다.
일반적인 오류는 다음과 같은 이유로 발생합니다.
- SuperSpeed 엔드포인트 도우미 설명자가 있어 드라이버의 엔드포인트 설명자 구문 분석 중단이 발생합니다.
- 속도가 향상되어 애플리케이션 프로토콜 수준에서 타이밍 문제가 발생할 수 있습니다.
- 엔드포인트에서 지원하는 최대 패킷 크기는 다를 수 있습니다.
- 함수 전원 관리로 인해 선택적 일시 중단 작업의 타이밍이 다를 수 있습니다.
Windows 7 및 이전 버전의 운영 체제에서는 타사에서 USB 3.0 드라이버 스택을 제공합니다. 따라서 타사 USB 드라이버 스택으로 작동하도록 드라이버를 테스트하는 것이 좋습니다.
고속 및 SuperSpeed USB 디바이스용 Windows 8 새 클라이언트 드라이버는 새로운 기능을 선택해야 합니다.
SuperSpeed 스토리지 디바이스 사용, Uaspstor.sys 또는 Usbstor.sys 위해 로드되는 드라이버는 무엇인가요?
UAS(USB 연결된 SCSI) 프로토콜은 설정된 USB 대용량 스토리지 프로토콜인 BOT(대량 전용 전송)을 통해 성능을 향상하도록 설계된 새로운 대용량 스토리지 프로토콜입니다. 이렇게 하려면 프로토콜 오버헤드를 줄이고, SATA 네이티브 명령 큐(NCQ)를 지원하고, 여러 명령을 병렬로 처리합니다. 이를 위해 UAS는 스트림이라는 대량 전송에 새 USB 3.0 기능을 사용합니다.
기존 대용량 스토리지 드라이버인 Usbstor.sys BOT 프로토콜을 사용합니다. SuperSpeed USB 디바이스를 비롯한 모든 디바이스 속도에서 작동합니다.
Windows 8 경우 Microsoft에는 UAS 프로토콜을 사용하는 Uaspstor.sys 새 대용량 스토리지 클래스 드라이버가 포함되어 있습니다. 스트림은 USB 3.0에 익숙하지 않으므로 Uaspstor.sys 하드웨어가 스트림을 지원하는 경우에만 스트림을 사용할 수 있습니다(SuperSpeed USB 디바이스는 xHCI 호스트 컨트롤러에 연결됨). 드라이버에는 소프트웨어 스트림에 대한 지원도 포함되어 있으므로 호스트 유형에 관계없이 고속으로 작동하는 디바이스에 대해서도 로드할 수 있습니다.
대용량 스토리지 디바이스를 Windows 8 연결하고 해당 디바이스가 UAS를 지원하는 경우 Windows는 Uaspstor.sys 로드합니다. 경우에 따라 특정 xHCI 호스트 컨트롤러의 하드웨어 스트림에 대한 알려진 문제 또는 디바이스의 UAS 프로토콜 구현과 관련된 알려진 문제가 있을 수 있습니다. 이러한 경우 Windows는 BOT 프로토콜로 돌아가서 대신 Usbstor.sys 드라이버를 로드합니다.
Uaspstor.sys Windows 8 새로운 기능입니다. 이전 버전의 Windows에는 없습니다.
Microsoft에서 지원하는 USB DWG 클래스는 무엇입니까?
Windows는 USB DWG(디바이스 작업 그룹)에서 정의한 여러 USB 클래스를 지원합니다. USB 클래스 사양 및 클래스 코드의 현재 목록은 의 USB DWG 웹 사이트를 https://www.usb.org/documents방문하세요.
이 표에서는 Windows에서 지원되는 USB DWG 클래스를 강조 표시하고 각 클래스를 지원하는 Windows 버전을 식별합니다.
클래스 사양 | bDeviceClass 코드 | 드라이버 이름 | Windows 지원 |
---|---|---|---|
Bluetooth 클래스 | 0xE0 | Bthusb.sys | Windows XP 이상 |
CCID(칩/스마트 카드 인터페이스 디바이스) | 0x0B | Usbccid.sys | Windows Server 2008 이상 Windows Vista 이상 Windows Server 2003 Windows XP Windows 2000 |
Hub 클래스 | 0x09 | Usbhub.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
HID(휴먼 인터페이스 디바이스) | 0x03 | Hidusb.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
MSC(대용량 스토리지 클래스) | 0x08 | Usbstor.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
USB 연결 SCSI(UAS) | 0x08 | Uaspstor.sys | Windows Server 2012 Windows 8 |
인쇄 클래스 | 0x07 | Usbprint.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
PTP(스캔/이미징) | 0x06 | WpdUsb.sys Usbscan.sys |
Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
MTP(미디어 전송) | 0x06 | WpdUsb.sys | Windows Server 2003 이상 Windows XP 이상 |
USB 오디오 클래스 | 0x01 | Usbaudio.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
모뎀 클래스(CDC) | 0x02 | Usbser.sys | Windows Server 2003 이상 Windows XP 이상 Windows 2000 이상 |
비디오 클래스(UVC) | 0x0E | Usbvideo.sys | Windows Vista 이상 Windows XP |
*이 드라이버가 운영 체제보다 나중에 릴리스되었을 수 있으므로 이 드라이버를 로드하려면 특별한 지침이 필요합니다. Windows 클래스 드라이버는 DWG 클래스 사양에 설명된 모든 기능을 지원하지 않을 수 있습니다. 이 경우 드라이버는 클래스 일치에 따라 로드되지 않습니다. 클래스 사양 내에서 구현된 기능에 대한 자세한 내용은 WDK 설명서를 참조하세요.
사용자 지정 USB 디바이스에 사용해야 하는 디바이스 설정 클래스는 무엇입니까?
Microsoft는 대부분의 디바이스 유형에 대해 시스템 정의 설정 클래스를 제공합니다. 시스템 정의 설정 클래스 GUID는 Devguid.h에 정의되어 있습니다. 자세한 내용은 WDK를 참조하세요. Windows 클래스 GUID 목록은 다음 topics 참조하세요.
독립 하드웨어 공급업체는 버스 유형이 아닌 USB 디바이스 유형과 연결된 설정 클래스를 사용해야 합니다. Microsoft에서 기존 클래스 GUID를 제공하지 않은 디바이스 유형을 개발하는 경우 새 디바이스 설정 클래스를 정의할 수 있습니다.
Windows 8 USBDevice라는 새 설정 클래스가 정의되었습니다(ClassGuid = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}). 디바이스 유형을 개발하는 경우 설정 클래스인 USB 대신 USBDevice와 디바이스를 연결합니다. USBDevice 클래스는 Windows Vista 이상 버전의 운영 체제에서 작동합니다.
설치 클래스 USB (ClassGuid = {36fc9e60-c465-11cf-8056-44455354000})는 USB 호스트 컨트롤러 및 USB 허브용으로만 예약되며 다른 디바이스 범주에만 사용해서는 안 됩니다. 이 설정 클래스를 잘못 사용하면 디바이스 드라이버가 Windows 로고 테스트에 실패할 수 있습니다.
일부 USB 장치를 연결할 때 CPU가 C3에 들어가지 않는 이유는 무엇인가요?
USB 디바이스가 연결되면 USB 호스트 컨트롤러는 DMA(직접 메모리 액세스) 버스 master 작업인 프레임 스케줄러를 폴링합니다. 버스 master 트래픽, 인터럽트 또는 기타 여러 시스템 활동과 같은 "중단 이벤트"는 정의상 C3에 있는 동안 CPU의 캐시를 스누핑할 수 없으므로 CPU를 C3 밖으로 이동합니다.
두 가지 방법으로 이 문제를 해결할 수 있습니다.
하드웨어 제거.
때때로 하드웨어는 유니버설 직렬 버스에서 전자적으로 연결이 끊어질 수 있습니다. 예를 들어 USB 판독기에서 스토리지 미디어를 제거하면 USB 판독기는 전자 연결 끊기를 에뮬레이트하고 미디어를 다시 삽입할 때 다시 연결할 수 있습니다. 이 경우 호스트 컨트롤러에 USB 디바이스가 없으므로 C3 전환이 발생할 수 있습니다.
선택적 일시 중단.
Windows XP 이상 운영 체제에서 사용할 수 있는 유일한 대안은 USB 선택적 일시 중단을 지원하는 것입니다. 이 기능을 사용하면 드라이버가 시스템 자체가 완전 작동 전원 상태(S0)로 유지되더라도 디바이스가 유휴 상태가 될 때 제어하는 USB 디바이스를 일시 중단할 수 있습니다. 선택적 일시 중단은 모든 USB 함수 드라이버가 지원하는 경우에 특히 강력합니다. 드라이버가 하나라도 지원하지 않는 경우 CPU는 C3을 입력할 수 없습니다. 선택적 일시 중단에 대한 자세한 내용은 WDK를 참조하세요.
선택적 일시 중단을 지원하는 USB 클래스 드라이버는 무엇입니까?
다음은 선택적 일시 중단을 지원하는 Windows 8 USB 클래스 드라이버 목록입니다.
Bluetooth
이 드라이버는 Windows XP 서비스 팩 2 이상 버전의 Windows를 실행하는 컴퓨터에서 디바이스를 선택적으로 일시 중단할 수 있습니다. 드라이버에는 구성 설명자에서 자체 전원 및 원격 절전 모드 해제 비트를 설정하기 위해 Bluetooth 라디오가 필요합니다. 활성 Bluetooth 연결이 없으면 드라이버가 Bluetooth 라디오를 선택적으로 일시 중단(D2)합니다.
USB HID
이 드라이버는 HID 디바이스를 선택적으로 일시 중단할 수 있습니다. 모든 디바이스 상태 변경에서 원격 절 해제 신호를 트리거하는 것은 사용자의 책임입니다. HID 스택에서 선택적 일시 중단을 사용하도록 설정하려면 디바이스의 특정 VID+PID에 대해 SelectiveSuspendEnabled 레지스트리 값을 사용하도록 설정해야 합니다. 예제는 Input.inf를 참조하세요.
Windows 8 연결된 대기를 지원하는 시스템에서 이 드라이버는 시스템이 연결된 대기 상태일 때 선택적 일시 중단(D2)에 들어갑니다. 이 드라이버는 시스템을 절전 모드에서 해제하고 화면을 켤 수 있습니다.
USB 허브
이 드라이버는 디바이스가 연결되어 있지 않거나 해당 허브에 연결된 모든 디바이스를 선택적으로 일시 중단할 수 있는 경우 루트 또는 외부 허브를 선택적으로 일시 중단할 수 있습니다.
USB 모뎀
활성 모뎀 연결이 없는 경우 이 드라이버는 디바이스를 선택적으로 일시 중단할 수 있습니다.
USB 스토리지(BOT)
이 드라이버는 연결된 대기 모드로 전환할 때 Windows 8 연결된 대기를 지원하는 시스템에서 (D3) 스토리지 디바이스를 선택적으로 일시 중단할 수 있습니다. HID와 마찬가지로 모든 Windows 8 시스템에서 선택적 일시 중단을 사용하도록 설정하는 레지스트리 재정의가 있습니다.
USB 스토리지(UAS)
이 드라이버는 디스크 시간 제한 기간 동안 유휴 상태일 때 스토리지 디바이스를 선택적으로 일시 중단(D3)할 수 있습니다.
USB 비디오
이 드라이버는 Windows Vista 이상 운영 체제에서 웹캠을 선택적으로 일시 중단(D3)할 수 있습니다.
USB 오디오
이 드라이버는 컴퓨터의 배터리 전원이 켜져 있을 때 Windows 7 이상 운영 체제에서 USB 오디오 디바이스를 선택적으로 일시 중단(D3)할 수 있습니다.
복합 USB
이 드라이버는 모든 자식이 일시 중단된 경우 (D3) 복합 디바이스를 선택적으로 일시 중단할 수 있습니다. D3-Cold를 지원하는 시스템에서는 모든 어린이가 D3-Cold를 선택해야 합니다.
USB 스마트 카드
이 드라이버는 Windows 7 이상 운영 체제에서 기본적으로 선택적으로 (D2) 스마트 카드 인터페이스 디바이스를 일시 중단할 수 있습니다.
일반 USB 주변 장치(WinUSB)
이 드라이버는 Windows Vista 이상 운영 체제에서 기본적으로 선택적으로 (D3) 디바이스를 일시 중단할 수 있습니다.
WWAN: 3G 또는 위맥스 동글
이 드라이버는 디바이스를 선택적으로 일시 중단할 수 있습니다. 활성 구독이 있는 경우 디바이스는 활성 구독 없이 D2를 입력하고 디바이스는 D3을 입력합니다.
USB 장치가 S3에서 Windows를 깨우지 못하는 이유는 무엇인가요?
USB 디바이스는 다음을 비롯한 여러 가지 이유로 S3에서 Windows를 각성할 수 없습니다.
잘못된 BIOS입니다.
컴퓨터에 최신 BIOS가 설치되어 있는지 확인합니다. 컴퓨터에 대한 최신 BIOS 수정 버전을 가져오려면 OEM 또는 ODM의 웹 사이트를 방문하세요.
절전 모드 해제를 사용하도록 설정되지 않은 BIOS입니다.
일부 BIOS를 사용하면 S3 및 S4에서 절전 모드 해제를 사용하지 않도록 설정할 수 있습니다. BIOS가 S3에서 절전 모드 해제되도록 설정되어 있는지 확인합니다.
USBBIOSx 레지스트리 키가 설정되지 않았습니다.
Windows XP의 클린 설치에는 USBBIOSx 레지스트리 키가 없습니다. OEM 또는 ODM이 BIOS가 S3에서 절전 모드를 해제할 수 있는지 확인하는 경우 이 레지스트리 키를 0x00 설정하고 컴퓨터를 다시 시작합니다.
호스트 컨트롤러에는 S3 또는 S4의 전원이 없습니다.
PC가 더 낮은 전원 상태일 때 PC가 추가 기능 카드 전원을 절삭하는 경우가 많습니다. 추가 기능 카드 전원이 없으면 절전 모드 해제 이벤트를 검색할 수 없으며 PC의 절전 모드를 해제할 수 없습니다.
자세한 내용은 Windows XP 및 이후 버전의 Windows 도움말 및 지원 센터에서 USB 문제 해결사를 참조하세요.
향상된(USB 2.0) 호스트 컨트롤러용 드라이버를 설치해야 하나요?
다음 버전의 Windows는 USB 2.0 향상된 호스트 컨트롤러를 지원합니다.
- Windows Vista 이상
- Windows Server 2003 이상
- Windows XP 서비스 팩 1
- Windows 2000 서비스 팩 4
참고 USB 2.0 하드웨어를 사용할 수 있기 전에 Windows 2000 및 Windows XP가 릴리스되었기 때문에 서비스 팩의 운영 체제에 대해 드라이버가 릴리스되었습니다. 드라이버를 설치하려면 다음을 수행합니다.
첫 번째 질문에 대한 답변에 설명된 절차에 따라 컴퓨터에 USB 2.0 포트가 있고 향상된 호스트 컨트롤러용 드라이버를 설치해야 하는지 확인합니다.
장치 관리자 창에서 첫 번째 질문에 설명된 대로 기타 디바이스 섹션을 확장한 다음 USB(유니버설 직렬 버스) 컨트롤러를 두 번 클릭합니다.
속성 대화 상자의 일반 탭에서 드라이버 다시 설치를 선택합니다.
새 하드웨어 추가 마법사에서 자동으로 소프트웨어 설치(권장)를 선택한 다음, 다음을 선택합니다. 마법사의 마지막 페이지에 도달할 때까지 모든 기본 옵션을 수락하고 마법사를 계속 진행한 다음 마침을 선택합니다. 설치를 완료하려면 컴퓨터를 다시 시작해야 할 수 있습니다.
참고 컴퓨터에 최신 업데이트가 설치되어 있는지 확인하려면 정기적으로 Windows 업데이트 방문하세요.
"HI-SPEED USB 포트에 연결된 HI-SPEED USB 디바이스" 알림을 사용하지 않도록 설정할 수 있나요?
Windows XP 이상 버전의 Windows는 고속 USB 디바이스가 고속을 지원하지 않는 USB 포트에 연결되어 있을 때 팝업 알림을 만듭니다. 디바이스에서 가장 빠른 성능을 얻으려면 사용자가 알림을 선택하고 화면의 지침을 따라야 합니다.
알림을 사용하지 않도록 설정하려면 다음 단계를 수행합니다.
- 이 FAQ의 첫 번째 질문에 설명된 대로 장치 관리자 시작합니다.
- 장치 관리자 창에서 유니버설 직렬 버스 컨트롤러 노드를 확장합니다. 제목에 "Universal" 또는 "Open"이라는 단어가 있는 호스트 컨트롤러를 찾습니다. 찾을 수 있는 경우 두 번 클릭합니다.
- 속성 대화 상자의 고급 탭에서 USB 오류에 대해 알리지 않음을 선택합니다.
참고 앞의 절차는 "HI-SPEED가 아닌 포트에 연결된 HI-SPEED USB 디바이스"뿐만 아니라 모든 USB 알림을 사용하지 않도록 설정합니다.
USB 2.0 허브 단일 TT 또는 다중 TT인가요?
USB 2.0 허브는 허브의 모든 다운스트림 연결 포트(단일 TT)에 대해 하나의 TT(트랜잭션 변환기)를 포함하거나 허브의 각 다운스트림 연결 포트(여러 TT)에 대해 하나의 TT를 가질 수 있습니다.
USB 디바이스 설명자의 bDeviceProtocol 필드와 USB 인터페이스 설명자의 bInterfaceProtocol 필드 값은 허브가 단일 TT인지 다중 TT인지 여부를 나타냅니다.
- 단일 TT. bDeviceProtocol == 0x01
- 다중 TT. bDeviceProtocol == 0x02
Usbhub.sys 이 설정을 사용하여 다중 TT 모드 또는 단일 TT 모드를 사용하도록 설정합니다. Windows XP 이상에서는 Usbhub.sys 항상 다중 TT 허브에서 다중 TT 모드를 사용하도록 설정합니다. TT 레이아웃에 대한 자세한 내용은 USB 2.0 사양의 섹션 11.14.1.3 및 11.23.1을 참조하세요.
USB 일련 번호에서 유효한 문자 또는 바이트는 무엇인가요?
USB 디바이스 설명자의 iSerialNumber 필드는 디바이스에 일련 번호가 있는지 여부와 번호가 저장되는 위치를 다음과 같이 나타냅니다.
- iSerialNumber == 0x00: USB 디바이스에 일련 번호가 없습니다.
- iSerialNumber != 0x00: USB 디바이스에 일련 번호가 있습니다. iSerialNumber에 할당된 값은 일련 번호의 문자열 인덱스입니다.
디바이스에 일련 번호가 있는 경우 일련 번호는 동일한 디바이스의 각 instance 고유하게 식별해야 합니다.
예를 들어 두 디바이스 설명자에 idVendor, idProduct 및 bcdDevice 필드에 대해 동일한 값이 있는 경우 iSerialNumber 필드는 서로 달라야 한 디바이스를 다른 디바이스와 구분할 수 있습니다.
플러그 앤 플레이 USB 일련 번호의 모든 바이트가 유효해야 합니다. 단일 바이트가 유효하지 않으면 Windows는 일련 번호를 삭제하고 일련 번호가 없는 것처럼 디바이스를 처리합니다. 다음 바이트 값은 USB 일련 번호에 유효하지 않습니다.
- 0x2C.
- 0x20 미만의 값입니다.
- 0x7F보다 큰 값입니다.
iSerialNumber 값에 대한 자세한 내용은 USB 2.0 사양의 섹션 9.6.1을 참조하세요.
지역화된 Windows 빌드의 문자열 요청에 사용되는 LANGID는 무엇인가요?
USB 디바이스는 USB 디바이스 설명자의 iSerialNumber 필드를 일련 번호의 문자열 인덱스로 설정하여 일련 번호의 존재를 나타냅니다. 일련 번호를 검색하기 위해 Windows는 언어 식별자(LANGID)가 0x0409(미국 영어)로 설정된 문자열 요청을 발급합니다. Windows는 다른 언어로 지역화된 Windows 버전에서도 항상 이 LANGID를 사용하여 USB 일련 번호를 검색합니다.
디바이스의 일련 번호를 추출하는 데 사용되는 LANGID는 무엇인가요?
USB 디바이스는 USB 디바이스 설명자의 iSerialNumber 필드를 일련 번호의 문자열 인덱스로 설정하여 일련 번호의 존재를 나타냅니다. 일련 번호를 검색하기 위해 Windows는 언어 식별자(LANGID)가 0x0409(미국 영어)로 설정된 문자열 요청을 발급합니다. Windows는 다른 언어로 지역화된 Windows 버전에서도 항상 이 LANGID를 사용하여 USB 일련 번호를 검색합니다.
복합 디바이스의 여러 인터페이스에 숫자를 할당하려면 어떻게 해야 하나요?
Windows는 첫 번째 구성에 둘 이상의 인터페이스가 있는 USB 디바이스를 복합 디바이스로 처리합니다.
Windows XP 서비스 팩 1 및 이전 버전의 Windows의 경우:
- 인터페이스 번호는 0부터 시작해야 합니다.
- 인터페이스 번호는 연속되고 증가해야 합니다.
Windows XP 서비스 팩 2 이상 버전의 Windows의 경우 인터페이스 번호는 연속되지 않고 증가하기만하면 됩니다.
인터페이스에 대한 대체 설정은 모든 버전의 Windows에 대해 다음과 같이 할당되어야 합니다.
- 인터페이스의 기본값은 항상 대체 설정 0입니다.
- 추가 대체 설정 번호는 연속되고 증가해야 합니다.
대체 설정에 대한 자세한 내용은 USB 2.0 사양의 섹션 9.6.5를 참조하세요.
Usbccgp.sys 적용되는 주요 제한 사항은 무엇인가요?
Usbccgp.sys 다음을 위해 복합 디바이스를 지원합니다.
- Windows Me
- Windows XP
- Windows Server 2003
- Windows Vista
- Windows Server 2008
이러한 이상 버전의 Windows에서 복합 디바이스의 부모 드라이버로 Usbhub.sys 로드할 수 있지만 하드웨어 호환성 오류가 발생할 수 있으므로 권장하지 않습니다. 대신 Usbccgp.sys 사용해야 합니다.
복합 디바이스에 대한 올바른 드라이버를 로드하려면 다음과 같이 INF 파일에서 Include 및 Needs 지시문을 사용합니다.
Include = USB.INF
Needs = Composite.Dev
Usbccgp.sys 하드웨어 디바이스 및 드라이버에 적용되는 주요 제한 사항은 다음과 같습니다.
Usbccgp는 기본 구성인 구성 0만 지원합니다.
Usbccgp는 Windows XP 및 Windows Server 2003에서 선택적 일시 중단을 지원하지 않습니다. 이 기능은 Windows Vista 이상 버전의 Windows에서만 지원됩니다. 참고 Usbccgp는 Windows XP SP1 이상 버전의 Windows XP에서 선택적 일시 중단을 지원하지만 기능이 제한적입니다. 이러한 Windows 버전의 경우 복합 디바이스는 디바이스의 각 자식 기능에 보류 중인 유휴 IRP가 있는 경우에만 선택적 일시 중단으로 전환됩니다. Usbccgp는 Windows XP RTM에서 선택적 일시 중단을 지원하지 않습니다.
Usbccgp는 Windows XP SP2, Windows Server 2003 SP1 및 이후 버전의 Windows에서만 IAD(인터페이스 연결 설명자)를 지원합니다.
Usbccgp는 Windows XP SP2, Windows Server 2003 SP1 및 이후 버전의 Windows에서만 비보안 인터페이스 번호를 지원합니다.
USB 코어 이진 파일에 대한 디버그 추적을 사용하도록 설정할 어떻게 할까요? 있나요?
드라이버의 공용 PDB 파일에 WPP 추적 메시지를 포함하고 보는 방법에 대한 블로그 게시물을 참조하세요.
USB 디바이스 및 ETW 이벤트에 대한 자세한 내용은 ETW 이벤트를 사용하여 USB 디바이스 문제 디버깅을 참조하세요.
Windows에서 인터페이스 연결 설명자를 지원하나요?
예. USB 2.0 IAD(인터페이스 연결 설명자) ECN(엔지니어링 변경 알림)은 함수 내에서 인터페이스 그룹화 및 해당 대체 설정을 설명하는 새로운 표준 메서드를 도입했습니다. IAD를 사용하여 한 함수 내에서 두 개 이상의 연속 인터페이스 및 대체 설정을 식별할 수 있습니다.
Microsoft는 현재 IHV와 협력하여 IAD를 지원하는 디바이스를 개발하고 있습니다. 다음 운영 체제는 IAD를 지원합니다.
- Windows XP 서비스 팩 2 이상
- Windows Server 2003 서비스 팩 1 이상
- Windows Vista
USB 스택이 URB에서 연결된 MDL을 처리하나요?
이 기능은 Windows에 포함된 USB 3.0 드라이버 스택에서 지원됩니다.
드라이버가 IRP에 둘 이상의 URB를 가질 수 있나요?
아니요. 이 기능은 Windows에 포함된 USB 스택에서 지원되지 않습니다.
Windows에서 USB 복합 허브를 지원하나요?
복합 USB 디바이스(다기능 USB 디바이스라고도 함)는 각각 독립적인 디바이스로 처리될 수 있는 여러 기능을 노출합니다. 시스템은 usb 제네릭 부모 드라이버 (Usbccgp.sys)를 로드하여 디바이스의 기능을 도청하기 위한 부모 드라이버 역할을 합니다. USB 일반 부모 드라이버는 복합 디바이스의 함수를 별도의 USB 디바이스인 것처럼 열거한 다음 PDO를 만들고 각 함수에 대한 디바이스 스택을 생성합니다.
복합 USB 디바이스는 허브 역할을 하는 함수를 노출할 수 없습니다. Windows는 이러한 허브를 제대로 열거하지 않으며 디바이스를 설치하려고 하면 시스템 작동이 중단될 수 있습니다.