USB는 다양한 Device에서 사용할 수 있는 단일 인터페이스이며, 주변기기 Type마다 다른 Connector를 쓰기 않고 단일 Interface를 사용한다.
또한, 모든 표준 PC 확장 기능을 지원할 수 있는 융통성이 있다.
이러한 USB의 설계 목표에는 쓰기 쉽게 하자는 것이 가장 중요하다.
Function은 Interface와 관련된 한 개 이상의 기능 집합이다.
예시로 마우스, 스피커, 데이터 수집장치가 있다.
Function을 한 개 이상 수행하는 논리적 요소나 물리적 요소이다.
예시로 Hub와 주변기기가 있는데, Host가 Bus 상의 각 Hub와 주변기기같은 Device에 고유한 주소를 부여한다.
회로를 접속할 수 있게 주소로 지정한 위치다.
전원이 켜지면 USB Device를 Host에 알려준다.
Host는 열거(Enumeration) 과정을 통해서 사용할 Bus 속도를 결정하고, 각 Device 주소를 할당하며 추가 정보를 요청한다.
Host는 Bus상의 데이터 흐름을 관리한다.
Device 여러 대가 동시에 데이터를 전송하려 할 때, Host Controller는 사용 가능한 시간을 나눠 그중 일부분을 전송하고자 하는 Device에게 나눠준다.
열거 중에 Device Driver는 전송 타이밍을 보장하는데 필요한 대역폭을 요청한다.
Host는 요청받은 대역폭을 할당할 수 없으면 통신을 시작하지 못한다.
그러면 Driver는 더 작은 대역폭을 요청하거나 기다려야 한다.
Host는 데이터를 전송할 때 Error Check Bit를 추가한다.
Data를 수신하면 Device는 수신한 데이터를 계산한 후 그 결과를 수신한 Error Check Bit와 비교한다.
결과가 일치하지 않으면 Device는 수신한 데이터에 대한 ACK를 보내지 않으므로 Host가 재전송한다.
Host는 전원을 켜니까 Device를 장착할 때 모든 Device에 전원을 공급한다.
Host의 주 임무인 Device와 데이터로 교환하는 작업
Device는 Bus에서 해당 Device 주소로 오는 통신을 감지해야 한다.
전원을 켤 때나 전원이 켜진 시스템에 Device를 장착하면, Device는 열거 작업을 위해 호스트가 보내는 표준 요청에 응답해야 한다.
Host는 열거가 끝나는 후에도 언제나 요청을 보낼 수 있다.
Host가 데이터를 보낼 때 각 전송에 대해 Device는 자신이 데이터 전송을 받을 것인지, BUSY 상태라 받을 수 없는지를 응답한다.
Device가 Host로 데이터를 보낼 때는 Device는 각 시도에 대한 code 또는 BUSY 신호로 응답해야 한다.
Device는 Host가 요청할 때만 데이터를 보낸다.
Host가 Device를 열거하려면 다음 과정을 수행해야 한다.
Host의 표준 USB 요청이나 Bus 상의 기타 이벤트에 응답할 수 있어야 한다.
1-1. 이벤트는 Device의 USB 기능을 설명한 자료구조인 Descriptor들이 요구한다.
Window Host의 경우, Device를 확인하고 Driver를 할당할 수 있게 Device Driver와 INF 파일을 만들어준다.