USB 용어 - Host, IN/OUT, Endpoint
저번 강의에 이어 PDIUSBD12의 내부를 들여다보기에 앞서 우리가 익숙해져야 할 USB에 관련된 용어들이 몇 개 있어서, 오늘은 그것들 먼저 좀 짚고 넘어가 보자.

먼저 Host(호스트).
뒤에 “빠”자 자동으로 붙은 행자들아. 허~. 할말이 없당.
한국말로 주인(장, 님,…),
단순 무식하게 말해서 PC를 말한다.
왜냐하면 PC의 메인보드(또는 PCI슬롯에 꽂혀있는 USB 컨트롤러 카드)에 USB HOST Controller가 있기 때문이다.
이 Host가 USB포트에 꽂혀 동작하는 모든 디바이스, 허브 등을 컨트롤 한다.

앞으로 USB로 데이터가 왔다 갔다 할 때, 그 전송방향을 말해야 한다면,
항상 호스트를 기준으로 말한다.
즉, 데이터가 디바이스에서 호스트로 전송된다면, 호스트 입장에서는 데이터가 들어오는 것이 되므로 “IN” Transaction(트렌젝션),
그 반대로 호스트가 데이터를 디바이스에게 전송할 때는 “OUT” Transaction,
요렇게 말한다.

Transaction이 뭐냐고?
USB Spec.을 보시라. 거기 자세히 설명되어 있다.
설마 USB 디바이스를 만들려고 하면서 USB 스펙 한번 들여다 볼 생각을 안하고 있는 행자는 없으리라 생각한다.
(링크에서 다운받은 후 압축을 풀어 보자. 제일 큰 파일이 USB 2.0 Specification이다. Chapter 2를 뒤져 보시라.)

두번째, Endpoint(엔드포인트)
이 Endpoint가 우리가 실제로 데이터를 주고 받는 통로가 된다.
다른 말로 Pipe(파이프)라고도 한다.
(펌웨어 프로그래머들은 엔드포인트라 많이 부르고, 드라이버 프로그래머들은 파이프라고들 부르더라. 관점의 차이일 뿐, 같은 말이다.)
하나의 USB 디바이스는 여러 개의 Endpoint를 가질 수 있는데,
그렇다고 USB 케이블을 잘라보면 하나의 Endpoint(Pipe)에 대응하는 선들이 한 가닥씩 있느냐 하면,
그건 아니라고 봐요. 풉파라밥바 풉파파~. -.-;

잘라봐라 네 가닥 밖에 없다.
전원선 두 가닥. 데이터선 두 가닥.
데이터 선이 두 가닥이니 Endpoint도 두 개까지 가질 수 있을까?
천만의 말씀 만만의 콩떡이다.
그 데이터 선 두 가닥도 사실은 위상이 반전된 동일한 신호를 전송하므로 사실상 데이터를 전송하는 통로는 하나뿐이다.
(데이터를 외부 노이즈로부터 보호하기 위해 요렇게 한다.
유식한 사람들은 요렇게 위상이 반전된 신호를 보고 Deferential Signal 이라고 하더라.)

앞전에, USB 디바이스는 여러 개의 Endpoint를 가질 수 있다고 해 놓구서, 이제와서 데이터를 전송할 통로는 하나 뿐이라고 하니 헷갈린가?
그럴만하다. Endpoint는 약간 추상적인 개념이 들어가 있는 용어이다.
추상적이라고 하니 벌써 머리에 쥐난 행자들. 반갑다.
본좌도 “추상”자만 들으면 머리에 쥐날라 그런다.
그래서 본좌 친절히 행자들의 머리에 난 쥐에 손수 쥐약을 발라주리라. 푸헐헐~

우리가 USB 디바이스를 만들어 궁극적으로 하고자 하는 일이 뭔가?
이것 저것 종류는 많아도 결국은
바로 (윈도우) 어플리케이션과 통신을 하고자 함이다.
어떻게? ReadFile, WriteFile을 써서.
그 API들을 호출하기 전에 뭘 할까?
바로 CreatFile을 써서 File Handle을 먼저 얻어와야, 그 파일 핸들을 인자(Parameter)로 주어서 ReadFile등등을 호출해 써먹을 수 있다.
이 때 CreatFile을 호출해서 얻어오는 File Handle이 바로 Endpoint(Pipe)에 대한 핸들이다.
(대부분의 경우에…)


(그럴 일을 거의 없겠지만)
어플리케이션에서 한꺼번에 세 개의 File Handle에 읽고 쓰기를 동시에 해 버린다면?
그때는 데이터가 얽히고 설키는 게 아니라,
USB 호스트 컨트롤더가 먼저 보낼 놈, 다음에 보낼 놈, 마지막에 보낼 놈, 등등
교통정리를 해서 보내면,
SIE(Serial Interface Engine)에서 차례차례로 들어오는 신호들을 받아서
각각의 Endpoint에 데이터가 도착했고, 또는 데이터가 보내졌음을 알린다.

정리하면,
엔드포인트(파이프)를 통해 데이터를 주고 받으며,
각각의 엔드포인트를 오가는 신호들은 시간대별로 쪼개져서 왔다 갔다 하기 때문에, USB 케이블의 데이터 선이 한 가닥만 있어도 되는 것이다.


Endpoint는 이 통로를 통해 오가는 데이터의 성질에 따라 네 가지 중 하나의 것으로 세팅할 수 있는데, 그것들이 각각
1. Control Endpoint
2. Interrupt Endpoint
3. Bulk Endpoint
4. Isochronous Endpoint
이다.
(물론 하드웨어의 설계에 따라 설정할 수 있는 엔드포인트가 제한된다. )

오늘은 그 중에서 Control Endpoint를 잠깐 언급하고 넘어가자.
Control Endpoint는 주로 USB 디바이스에 간단한 명령을 하달하고 그 결과를 받기 위해 주로 사용한다.
USB디바이스라면 Control Endpoint 중에서도 특별히 “Default” Control Endpoint(Endpoint “0”)만은 꼭 가지고 있어야 하는데,
이 Endpoint를 통해 호스트가 디바이스를 인식하고, 설정하기 때문이다.
그리고 이 Endpoint를 쓰면 간단한 데이터 전송 정도는 쉽게 할 수 있기 때문에
Endpoint 0만을 가지고 있는 디바이스들도 가끔 있다.
예를 들면, 단순히 LED를 키고,끄는 장치를 만드는 데는 다른 Endpoint가 필요가 없다.

Interrupt Endpoint는 일정한 시간 간격으로 전송되어야 할 비교적 소량의 데이터를 위한 것이고,
Bulk Endpoint는 많은 데이터를 오류 없이, 그리고 전송시간에도 구애 받지 않고 보내고자 할 때 쓴다.
Isochronous Endpoint는 전송시간이 중요한 데이터가 있다면 약간의 삑사리가 있더라도 감수하고 보내고자 할 때 쓴다. 즉 데이터 전송의 대역폭은 보장되지만, 데이터의 무결성은 보장하지 않는다.

나머지 종류의 Endpoint에 대한 자세한 설명은 다음 회에.
by 바람처럼날다 | 2005/10/18 20:01 | D12 펌웨어 강좌 | 트랙백 | 덧글(5)
트랙백 주소 : http://muosys.egloos.com/tb/761162
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 검정고무신 at 2005/10/19 17:58
음.USB와 관계없는 얘기인데 적어두 될까 하다가 적습니다.
Fx2강의후 오실로프코프 한대 만드신다는 이야기에 눈이 번쩍 했는데 ^^ 차후 계획은 없으신지요? 아무튼 바~날다님의 강의는 잘 보고 있습니다. 이점 감사합니다.
Commented by 바람처럼날다 at 2005/10/20 19:11
차후 심심해지면 만들 생각입니다.
잘 보고 계신다니 저두 반갑습니다.
Commented by 굿 at 2008/06/15 20:31
원하는 답변들 밖에없네요 ㅋㅋ 최고의 정보
Commented by bongpal2 at 2009/02/01 22:36
검색하다 우연히 들렀습니다. 좋은 정보 감사합니다.
endpoint와 pipe가 같은 말이라고 하셨는데 Wikipedia에 나온 설명으로는 다른 뜻으로 나와 있습니다. endpoint가 pipe로 잘못 사용된다고도 나와 있네요.

USB device communication is based on pipes (logical channels). Pipes are connections from the host controller to a logical entity on the device named an endpoint. The term endpoint is occasionally used to incorrectly refer to the pipe. A USB device can have up to 32 active pipes, 16 into the host controller and 16 out of the controller.
Commented by 윤여준 at 2009/05/13 20:17
쉽게 설명해 주셔서 이해가 빠르네요. 감사합니다.

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >