USB는 여러 종류의 장치를 지원한다. 이 다양한 장치를 기능별로 분류하여 class라고 부르고, class 별로 표준 protocol을 정의하여 놓았는데 각 장치는 이 protocol를 준수하여 동작하여야 한다.

USB Software stack은 다음과 같다.

 HID (Human Interface Device) - mouse, keyboard과 같은 저속 시리얼을 위한 Class
 CDC (Communication Device Class) - 시리얼 통신에 주로 이용
 MSC (Mass-Storage Class) - 대용량 저장 장치를 위한 것으로 USB Flash 같은 곳에 사용
 ACM (Abstract Control Model Class) - V-port와 같은 추상화된 구성에 주로 사용

이렇게 준비된 Class Driver를 사용하지 않고 사용자 정의 방식으로 동작이 가능하다.

의료 쪽의 PHCD (Personal Healthcare Device Class) 는 운동용 시계, 혈압 측정기, 체온계, 체중계, 혈당 측정기 등과 같은 의료 기기가 호스트에 접속하여 개인과 피트니스 코치 또는 환자와 의사 사이의 의사소통을 간편하게 하도록 지원한다.

USB는 master/slave라는 표현 대신 Host/Device라는 용어를 사용한다. Host가 Master에 해당되고, Device가 slave이다.
PC가 Host이고 Embedded Device가 Device로 동작할 때, 아래처럼 구성된다.

 

CDC (Communication Device Class)
 USB to Serial, USB to ethernet 등 USB 포트에 연결하여 통신하는 디바이스들이 CDC를 주로 사용한다. CDC는 통신 방법에 따라 ACM, ECM, EEM, NCM, OBEX 등등 다양한 subclass 들이 있다.

ACM (Abstract Control Model Class)
 USB to Serial 에 주로 사용되는 subclass 이다.

ECM (Ethernet Networking Control Model)
 USB to ethernet의 subclass 이다. ECM이 발표된 이후, ECM의 비효율적인 부분을 개선하여 발표되고 있다. EEM (Ethernet Emulation Model), NCM(Network Control Model), MBIM(Mobile Broadband Interface Model) 등은 모두 ethernet packet을 전송하기 위한 class 이다.

 

USB Host를 개발하려면 당연하게 USB Host Controller Driver가 있어야 한다. Host Controller는 OHCI, UHCI, EHCI and xHCI Controller가 있고, 이중 EHCI가 USB 2.0 high speed 까지 지원되는 것으로, 가장 널리 사용된다. 하지만, 대부분은 USB Device 개발이고, 이 경우엔 Host에서 돌아가는 class driver를 개발해야 하고 USB Device 에서 돌아가는 제어블럭이 필요하게 된다. 

 

출처: m.blog.naver.com/PostView.nhn?blogId=msnayana&logNo=220148672836&proxyReferer=https:%2F%2Fwww.google.com%2F

'USB' 카테고리의 다른 글

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

 

 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