USB 디바이스는 firmware 레벨에서 descriptor에 정보를 보관한다. 운영체제는 USB 디바이스와의 통신 채널인 control endpoint를 통해서 디바이스에 descriptor 제공을 요청하고, 요청을 받은 디바이스는 descriptor를 제공한다.

 USB Specification 2.0을 지원하려면 디바이스, 인터페이스, 엔드포인터에 대한 정보를 담고 있는 standard descriptor를 지원해야 한다. 디바이스는 제조사 별 class descriptor와 vendor-specific descriptor가 있다.

MS의 descriptorstandard USB string descriptor (OS string descriptor), OS feature descriptor가 있다. OS string Descriptor는 OS feature descriptor를 얻기 위해 필요한 Descriptor이다.

디바이스의 OS feature descriptor를 얻기 위해서 Windows는
 1. 디바이스의 OS string descriptor를 조회하기 위한 제어 요청을 디바이스에게 보낸다.
 2. 수신한 디바이스 OS string descriptor가 Microsoft가 정의한 포맷을 준수하는지 확인한다.
 3. 디바이스의 OS feature descriptor를 조회하기 위해서 OS string descriptor의 bMS_VendorCode 필드에 있는 데이터를 사용한다.

 

MS의 OS featrue descriptor 종류로는 Extened Compat ID, Extended Properties, Genre가 있다.
 - Extened Compat ID
 Windows에는 USB 디바이스의 기본 드라이버를 결정하기 위해서 calss 와 subclass 코드를 사용한다. 새로운 타입의 USB 디바이스는 이 class 와 subclass 코드를 가지고 있지 않다. 이런 경우에 USB 디바이스 제조사는 extended compat ID라는 OS featrue descriptor 정보를 디바이스 firmware에 저장한다. Windows는 디바이스가 연결될 때 이 정보를 조회하여 디바이스에 대한 기본 드라이버를 결정하고 load한다.
 - Extended Properties
 USB 디바이스의 class level 또는 devnod level를 선언할 수 있다. USB 디바이스 제조사는 이 Extended Properties OS feature descriptor를 이용해서 도움 페이지, URL, 아이콘 같은 추가 특성 정보를 펌웨어에 저장할 수 있다.
 - Genre
 이 디스크립터는 게임 컨드롤러 같은 HID 디바이스들이 상세한 configuration data를 제공하기 위해 사용한다. 예를 들어서 전형적인 게임 컨트롤러는 컨트롤에 대한 기본 정보를 포함하는 report descriptor를 가지고 있다. 하지만 이 데이터는 게임 컨트롤러가 사용될 수 있는 여러가지 다른 상황에서 컨트롤과 액션 간의 최적의 mapping을 하기에는 부족하다. USB 디바이스 제조사는 디바이스 펌웨어에 상세한 매핑 정보를 저장하게 위해 이 descriptor를 사용할 수 있다.

 

MS의 OS String Descriptor
USB 디바이스는 스트링 인덱스 0xEE에 저장된 OS String Descriptor를 갖고 있어야 한다.
 - 이 디스크립터를 사용한다는 것은 디바이스가 하나 이상의 OS feature descriptor를 갖고 있음을 의미
 - OS featrue descriptor 조회에 필요한 데이터들을 포함
 - USB 디바이스 제조사가 0xEE에 저장할 수 있는 스트링들로부터 OS String Descriptor를 구분할 수 있게 하는 signature를 포함
 - 버전 정보 포함

 

MS의 OS Feature Descriptor
버전 1.00 에서 MS는 3개의 OS feature descriptor에 대한 표준 포맷을 정의했다. OS feature descriptor는 다음 사항을 만족해야 한다.
 - 다비이스는 최대 255개까지 descriptor를 저장할 수 있다.
 - descriptor는 디바이스 또는 특정 인터페이스 기능과 연관된 것일 수 있다.
 - 각 타입 당 한개의 OS Feature Descriptor가 허용된다. 여러 OS Feature Descriptor들이 특정 인터페이스나 function에 연관될 수 있다. 이 경우에 디바이스는 자신이 갖고 있는 인터페이스들이나 function들 만큼의 디스크립터들을 가질 수 있다. 
 - descriptor는 크기와 버전정보를 포함해야 한다.
 - descriptor 최대 크기는 특정 OS featrue descriptor에 따라 다르다. 프로토콜은 feature descriptors 크기를 16MB까지 허용하지만, 그 크기는 펌웨어 비용 때문에 제한된다.

 

출처: blog.naver.com/jskimadd/10171305013

'USB' 카테고리의 다른 글

[USB] 호스트가 디바이스 정보 얻기  (0) 2021.01.17
[USB] USB 장치  (0) 2020.11.01

+ Recent posts