CAFE

유익한 정보

USB 구조와 데이터 전달방식

작성자김진호 베드로(새벽샛별)|작성시간12.08.25|조회수24,122 목록 댓글 2
USB 구조와 데이터 전달방식

[전자이론] 2012/05/09 10:42

http://blog.naver.com/geniuskkt/10138354129

 

 

1. USB 개요

일반적으로 USB 디바이스에 대한 정보는 Descriptor가 가지고 있는데, USB/HID 클래스 디바이스는 모든 데이터를 얻기 위해서 HID 클래스 드라이버를 사용하며, HID 클래스 디바이스 Descriptor들은 어느 다른 HID 클래스 Descriptor들이 나타났는지를 확인하고, 그들의 크기를 나타내는 구조로 되어 있다. Descriptor라는 것은 C,C++에서 말하는 Structure(구조체)를 말한다.

USB를 단적으로 말하면, 주변기기를 컴퓨터 제조회사에 관계없이 쉽게 부착할 수 있도록 하는 장치라고 할 수 있다. 마우스, 키보드, 프린터, 모뎀, 스피커 등과 같은 컴퓨터 주변기기와 컴퓨터를 연결하기 위한 인터페이스의 규격화를 목적으로 개발된 USB는 인텔, 컴팩, 마이크로소프트, DEC, IBM, NEC, 노던텔레콤등 PC 제조업자 컨소시엄이 만든 직렬 포트의 일종으로 윈도98의 출시와 더불어 관심을 끌게 됐다.

USB를 이용하면 복잡한 어댑터(드라이버등)들의 설치와 제거를 쉽고, 빠르게 할 수 있어 현재 대부분의 PC 표준 장비로 채택되어 장착되고 있다. 최근에는 핸드폰이나 디지털 카메라에서 PC로 데이터를 전송할 경우에도 대부분 USB 포트를 사용한다. 일반적인 직렬 포트(Serial Port)의 한계속도가 초당 100K도 채 안되는데 반해 USB는 버전1.1의 경우에는 1.5Mbps,12Mbps를, 버전2.0의 경우에는 최고 480Mbps의 데이터 전송 속도를 지원하므로 웬만한 주변기기를 연결해도 속도가 충분하고, 최대 127개까지 장치(디바이스)들을 사슬(데이지 체인형)처럼 연결한다.

PC를 사용하는 도중에 연결해도 인식을 하며,-윈도98의 경우에는 충분히 지원하도록 설계되지 않아서 많은 트러블을 일으킨다.- 주변기기의 전원이 필요없다.-그러나, 최대 전원 한계치가 있다.- USB를 사용하면 주변기기 등을 PC와 연결할때 소프트웨어나 하드웨어를 별도로 설정할 필요 없이 모든 주변 기기를 동일한 접속기로 접속하기 때문에 포트 수를 획기적으로 줄일 수 있을뿐만 아니라 설치가 간편하고, 휴대형 PC의 소형화가 가능하게 되는장점이 있다.

일반적으로 PC에는 2개의 USB 포트가 있지만 USB 허브가 있어서-별도로, 구입해야하며 보통 시중가 2만원내외이고, 허브역시 지원하는 버전이 별도로 있슴- 하나의 포트를 다수의 포트로 나눠주기 때문에 다양한 주변장치를 연결할 수 있다. 하지만, 허브역시 하나의 USB 디바이스로써 자체전원형(External Power)과 내부전원형(Internal Power)으로 나뉘며, 많은 제조업체들에서 제조하고 있다.

이렇듯, USB가 PC 인터페이스의 강자로써, 군림하게 된 배경에는 제조업체들의 상업적 컨소시엄의 구성과 함께 OS(Operating System)의 발전을 빼먹을 수 없다.

최근에는 Windows2000과 WindowsXP에서는 버그(Bug)가 많이 줄었지만, 과거의 Windows98 그리고 Windows98 Second Edition에서는 많은 문제점이 있었다. 예전에는 PC의 주변 인터페이스로서 그 동안 Serial Port(RS-232C)와 Parallel Port=IEEE1284(Centronics)를 주로 이용해 왔는데, 어느 것이나 전송속도가 느리다는 점과, 하나의 포트에 하나의 디바이스밖에 접속할 수 없기 때문에(One by One) 여러 디바이스를 접속하기 위해서는 포트수를 증가시켜야 한다는 문제점이 있었다. (포트수를 증가하기 위해선 별도의 비용이 발생한다.) 그 이외에도 키보드, 마우스, 디스플레이 등은 개별 포트(키보드,마우스-PS/2, 디스플레이-VGA아답타)를 가지고 있어서, PC의 뒷면에는 일반인들이 쉽게 알 수 없는 각종 커넥터로 채워져 있다.

이들의 인터페이스를 통합하여 하나의 커넥터로 각종 주변기기를 접속할 수 있도록 한 것이 USB(Universal Serial Bus)이다.

USB는 기존의 PC와 주변기기간의 인터페이스를 통합해 나가는 것을 목적으로, Compaq, Intel, Microsoft, NEC의 엔지니어들이 모여서 차세대의 주변 인터페이스에 대해 공동연구를 시작한 것이 USB 탄생의 기원이다. 게다가, DEC, IBM, Northern Telecom사가 개발에 합류하여 모두 7개의 회사에 의해 1995년에 0.9판의 사양서가 발행됨으로써 USB의 정체가 공개되었고, USB의 보급을 목표로 하는 추진 단체인 USB Implementers Forum(USBIF)도 설립되어, 가장 유력한 차세대 표준 주변 인터페이스로서 급속히 주목받게 되었다.

1996년 정식 기능 사양서인 USB1.0 버전이 공개됨과 동시에, 컨트롤러 LSI가 제품화되고, 비로소 PC에 USB를 장비할 수 있는 환경이 갖추어졌다. USB1.0 버전은 12Mbps(Full Speed)로 저속부터 중속분야의 어떤 특정한 기기를 대상으로 하지 않고, 각종 기기를 혼재 할 수 있다.즉, 모뎀이나 프린터 등의 종래의 주변기기뿐만 아니라, 전화나 오디오 기기와 같은 가정용 멀티미디어 기기의 데이터, 음성 등을 리얼타임(실시간,real-time)으로 전송할 수 있는 사양으로 되어 있다.

단, 화상 데이터의 리얼타임 전송에는 전송속도가 부족하여 멀티미디어로서는 저속용으로 한정되어 그 한계를 드러냈다. 그래서, 스캐너, 디지털카메라와 같은 화상기기나 대용량 스토리지 등, 고속의 멀티미디어용 인터페이스로는 IEEE1394 등의 다른 인터페이스와 함께 사용하는 것을 생각하게 되었으나, 1999년 10월, USB2.0이 등장함과 동시에,480Mbps(high speed)라는 초고속 전송이 가능해짐에 따라 이러한 문제가 말끔히 해결되었다.

최근에 출시되는 PC는 USB2.0를 기본으로 탑재하고 있으나, 이전 PC들은USB V1.1만을 지원하기 때문에 USB2.0 Device를 USB2.0의 속도로 사용하기 위해서는 별도로 USB V2.0 Card를 추가 장착해야만 한다. 시중가는 대략 3만원 내외이다.

 

1-1 USB의 구성

기본적으로 호스트, 허브, 디바이스로 3가지로 구성되어 있다. 호스트는 모든 USB 연결의 중심으로서 하드웨어적으로는 USB 호스트 컨트롤러라고 한다. 허브는 여러 개의 USB 디바이스들이 USB 호스트 컨트롤러의 하나의 출력을 같이 사용하도록 하여준다. 호스트 컨트롤러에 있는 허브는 루트 허브라고 하며,외부 USB 허브는 사용자가 많은 USB 디바이스를 PC에 연결하도록 한다.USB 디바이스는 다양한 기능을 갖는 제품들이 있다.

 

1-2 USB 성능

벼전별로 2가지,즉, 다시말해 V1.1에는 두가지, V2.0에는 한가지의 전송속도가 있는데 저속 모드는 1.5Mbps로서 키보드, 마우스, 조이스틱 등에 사용하고 있으며, 고속모드는 12Mbps 로서 하드디스크, CD-ROM/ CD-RW, ZIP drive, 스캐너, 프린터등에 사용한다. USB 호스트는 각기 다른 디바이스들이 사용하는 pipe의 bandwidth를 관리하는데 4가지의 전송모드가 있다. 이는 isochronous, interrupt, bulk,control 데이터 전송모드가 있다.

 

1-3 전원 공급

USB는 총 4개의 선으로 구성되며, 케이블에 2개의 선은 호스트와 디바이스간에 데이터를 전송하고, 2개의 선은 전원을 공급한다. 때에 따라서 5개의 선으로 구성된 경우도 있을 수 있으나, 이것은 스펙(SPEC.)에서는 없는 것으로 나머지 한 선은 Common ground용으로 사용되어 진다. 전원이 적게 사용하는 디바이스에 직접 USB 버스를 통하여 전원을 공급하면 별도의 외부 전원 없이 사용할 수 있는 장점이 있다.(Bus-powered device) 물론 USB 버스에서 제공하는 전원보다 많은 전류를 사용하는 디바이스는 별도의 전원 아답터를 사용해야 한다.(selfpowered device) USB 버스를 통해서 호스트가 공급할 수 있는 최대 전류는 500mA이며, 최대 전압은 5V이다.

 

1-4 USB 응용

USB는 외부장치를 간단히 설치하고, hot-swapping 하도록 설계되었다. 사용하는 제품으로는 키보드, 마우스, 조이스틱, 오디오, 스피커, PC 카메라, 스캐너, 프린터, 하드디스크, CDROM, CD-RW, DVD, FDD, ZIP drive, 모뎀, ISDN, 전화기, LAN등 매우 다양하다. 최근에는 일반적인 I/O Device, DAQ Card, 인터넷케이블 셋톱박스, 초고용량 저장장치, 특수완구류, 모션제어시스템등 그 용도와 응용이 다양해지고 있으며, 앞으로의 시장 전망역시 매우 높은 편이다.

 

1-5 USB특징 요약

USB 기술의 특징에 대하여 간단히 요약하면 다음과 같다.

􀁺 하나의 표준 커넥터 사용

􀁺 Hot insertion and removal: PC를 사용하면서 주변기기를 연결, 분리를 할 수 있다.

􀁺 Chain device: 허브를 통해서 여러 개의 주변기기를 연결하여 동시에 사용함.

􀁺 자동 설치: USB 호환 주변기기를 연결하면 PC는 자동적으로 필요한 드라이버나 자원을 구성한다.

􀁺 전원 공급: USB 버스를 통해서 전원을 공급 받으므로 별도 전원장치 필요 없음

􀁺 속도 빠름: 기존의 시리얼 포트보다 매우 빠름

 

 

2. USB 시스템의 구조

2-1 USB의 접속 토폴로지

USB 시스템은 하나의 호스트 컨트롤러와 루트허브에 연결된 노드들로 구성되어있다. 허브의 직렬접속은 루트 허브를 제외하고는 5대까지로 제한된다. 케이블의 길이는 5m 이므로 루트허브에서 말하는 노드까지의 최장거리는 30m이다.


허브는 호스트 컨트롤러에서 허브디바이스로 인식된다. USB에서는 각 디바이스를 식별하기 위해 어드레스를 할당하지만 그 어드레스는 7비트를 사용하므로 USB 시스템은 127개의 디바이스를 사용할 수 있다.(허브까지 포함)

 

2-2 USB 케이블 및 커넥터

USB 케이블은 아래 그림과 같이 차동형인 데이터 선(D+,D-)과 전원(Vbus), 그라운드(GND)의 4개의 선으로 구성된다.

데이터 신호는 차동신호이므로 D+와 D- 신호선은 트위스트 페어선으로 하고 외부의 노이즈를 줄이기 위하여 케이블에 실드하였다. 로우 스프드용 케이블은 트위스트 페어나 실드가 필요하지 안는다(케이블 길이 3m 제한됨). 전원핀은 +5v에서 최대 500mA의 전류를 흘린다. 그리고 각 선은 색을 다르게 지정되어있다.

USB커넥터의 치수도를 나타낼 수 있는데 시리즈 A 플러그는 상류측에서 접속하고 시리즈B 플러그는 하류측에 접속한다.

다음으로 케이블의 핀 배치를 보면 전원용인 1핀과 4핀의 길이는 신호용에 비해 길고 2핀과 3핀은 짧다. 이는 삽입시 전원이 먼저 공급된 다음 신호선이 접속되도록 하고 반대로 뺄 경우 신호선이 먼저 절단된 다음 전원이 절단되게 하여 디바이스가 파괴되지 않도록 하였다.

 

3. 데이터 전송 구조

위의 그림은 USB를 구현하고자 하는 관점에서 4가지 부분으로 구분 할 수 있도록 그린 그림이다.

􀁺 USB의 물리적 디바이스 : USB 케이블 종단에 물려있는 사용자에 있어서 특별한 하드웨어 구조에 따른 Function을 나타낸다.

􀁺 클라이언트 S/W : USB 디바이스에 대응하는 호스트에 대한 소프트웨어를 실행하며 실제의 디바이스에 의해서 결정되는 소프트웨어이며 USB와 함께 제공되는 특정 OS와 타겟 디바이스에 따라서 제공된다.

􀁺 USB 시스템 S/W : 특정 OS 에서 USB를 지원하는 소프트웨어이며 OS에는 의존적이지만 특정 클라이언트 소프트웨어 또는 디바이스에 대해서는 독립적이다.

􀁺 USB호스트 컨트롤러 : 호스트측에서 버스 인터페이스를 나타내며, USB 디바이스를 호스트에 결합할 수 있도록 해주는 모든 S/W 또는 H/W를 의미 한다.

USB 호스트란 USB 호스트 컨트롤러와 USB 시스템 소프트웨어 그리고 마지막으로 클라이언트를 가진다. USB시스템 소프트웨어에서는 USB드라이버(USBD), 호스트 컨트롤러 드라이버(HCD) 호스트 소프트웨어로 구성되어 있다. 호스트는 결합된 디바이스에 대하여 모든책임과 권한을 가지고 있으며 USB 디바이스는 버스로 접근할 수 있는 사용권을 호스트에 의해 부여 받는다. 또한 호스트는 USB의 토폴로지를 항상 모니터하고 있어야 하고 모든 접근을 통제해야 한다.

USB 디바이스란 USB 인터페이스, USB 논리적디바이스(Endpoint), Function으로 구성된다. USB 디바이스는 다양한 성능을 가지고 있으나 호스트와의 송수신을 위해 동일한 기본 인터페이스를 가지고 있다. 즉, 호스트가 각종 디바이스를 동일한 방법으로 관리할 수 있다. 확인과 설정을 위해 디바이스는 자신의 정보를 호스트로 보고하며 포맷은 모든 디바이스에 대해 공통적인 부분과 각 디바이스에 특별한 부분으로 구분될 수 있다.

물리적인 버스구조를 말하면 Tied-Star 방식으로 연결 되어 있으며 논리적인 버스 구조는 Tied-Star 방식으로 연결되 디바이스는 마치 호스트와 직접적으로 연결된 논리적 디바이스로 데이터를 송/수신한다.

 

3-1 USB통신의 흐름

􀁺 Host Controller Driver (HCD)

USB 호스트 컨트롤러와 USB 시스템 소프트웨어 사이에서의 인터페이스를 담당한다. 이것을 통해서 호스트 소프트웨어가 호스트 컨트롤러의 구현에 관계없이 프로그래밍을 가능하게 해준다. 한 개의 USB 드라이버는 호스트 컨트롤러의 구현에 대해서 특별한 정보가 없더라도 다른 호스트 컨트롤러를 지원할 수 있다.

􀁺 USB Driver (USBD)

USB 시스템 소프트웨어와 클라이언트 소프트웨어사에서의 인터페이스를 담당한다. 이러한 인터페이스는 클라이언트로 하여금 USB디바이스를 좀 더 원활하게 제어할 수 있도록 해준다. USB의 논리적 디바이스는 USB시스템에게는 Endpoint들의 집합으로 보인다. Endpoint들은 인터페이스를 구현하는 Endpoint 셋들로 그룹 되어진다. 클라이언트 소프트웨어는 인터페이스들을 Endpoint 셋과 관련된 파이프 번들을 사용하여 다루게 되며 호스트 컨트롤러 또는 전송방향에 따른 USB 디바이스는 전송될 데이터를 패킷화하게 된다. 호스트에서의 소프트웨어는 일견의 통신 흐름들을 통해서 논리적 디바이스와 통신한다.

􀁺 Endpoint

USB 논리적 디바이스는 USB 시스템에서 하나의 Endpoint로 표현되며, Endpoint는 한 개의 적용할 인터페이스에 그룹화 되어 Endpoint 집합으로 주어진다. 클라이언트 S/W는 Pipe 번들을 조정하게 되며 Pipe 번들의 Endpoint 셋과 연결된다. 클라이언트 S/W는 데이터 요청을 할 수 있다. 이는 호스트상의 버퍼와 USB 디바이스상의 Endpoint를 연결을 할 수 있게 한다. 호스트 컨트롤러는 데이터를 패킷화하여 데이터를 USB에 올리고 호스트 컨트롤러는 버스를 조절한다. 호스트는 클라이언트 소프트웨어가 있고 메모리 버퍼들이 존재하며 각각의 버퍼에는 Pipe가 연결되어 있다. USB 논리적 디바이스는 Endpoint가 존재하며 이 또한 Pipe가 연결되어 호스트와 통신흐름의 통로가 된다. 호스트의 S/W는 통신의 셋을 통하여 논리적 디바이스와 통신하게 된다.

 

3-2 디바이스 Endpoint

하나의 Endpoint는 통신의 흐름의 종단이며 각 고유의 ID를 갖고 USB 디비이스 내에 존재하게 된다. 각 USB 논리적 디바이스는 Endpoint의 집합체이다. 각 USB 논리적 디바이스는 시스템에 연결될 때 시스템에 의하여 독립적인 주소를 할당받는다. 그리고 각 Endpoint는 설정된 시간 내에 번호를 할당받게 된다. Endpoint는 데이터 전송의 방향의 정보 (input device – host, output host – device)를 갖는다. 그리고 디바이스의 주소, 번호, 방향의 구성체라 할 수 있다. 또한 전송의 형태를 정의한다.

Endpoint는 다음의 특징을 기술하고 있다.

􀁺 버스의 접근 주파수/지연시의 요구사항들

􀁺 대역폭에 대한 요구사항들

􀁺 Endpoint들의 수

􀁺 오류 핸들링 행동에서의 요구사항들

􀁺 Endpoint가 수용할 수 있는 최대 패킷의 크기

􀁺 전송형태, 전송 방향

 

3-3 Endpoint 0

모든 USB 디바이스는 Endpoint 0에 의하여 기본 제어 상태를 정의할 수 있다. USB 시스템 S/W는 이 기본 제어 정보를 이용하여 초기화하고 논리적 디바이스의 조정할 수 있게 된다. 이를 기본 제어 Pipe라고 한다. 기본 제어 Pipe는 일반적인 USB상태와 제어 접근 등의 디바이스들의 설정 정보를 접근하는 통로를 말한다. Endpoint 0 과 함께 Endpoint들은 “Device Atached”, “Powered”, “Bus Reset”을 감지 할 수 있다.

 

3-4 Non-Endpoint 0

Function들은 구현을 위해서 필요한 부가적인 Endpoint들을 가질 수 있다. 낮은 속도(Low Speed)의 Function들은 2개의 선택적인 Endpoint를 가질 수 있고, 풀 속도(Full Speed)의 Function들은 프로토콜에 따라 입력 Endpoint들과 출력 Endpoint들에 대해서 각각 최대 15개의 Endpoint를 가질 수 있다.

 

3-5 Pipe

Pipe는 하나의 디바이스상의 Endpoint와 호스트상의 S/W 사이의 연결고리이다. Pipe는 특징에 따라 Stream Pipe와 Message Pipe 모드가 있다. 이러한 것들은 두개가 서로 다르며, 상호 배타적인 성격을 띠고 있다.

Stream Pipe는 USB에서 정의 되지 않은 구조의 파이프를 통해서 데이터를 전송하지만, Message의 경우에는 USB에서 정의된 구조의 파이프를 통해서 데이터를 전송하게 된다. Endpoint 0을 포함한 두개의 Endpoint를 기본 제어 Pipe라고 부른다. 이 Pipe는 버스리셋이거나 전원이 공급되었을 때 사용한다. 다른 Pipe는 USB 디바이스가 설정 된뒤에 사용할 수 있다. USB 시스템 소프트웨어는 디바이스의 확인, 설정에 대한 요구 사항들 그리고 디바이스를 정의할 때 기본 제어 Pipe를 이용한다. USB시스템 S/W는 기본제어 Pipe의 오너쉽을 가지고 있으며 다른 클라이언트 S/W가 이 Pipe를 사용할 수 있도록 중재한다.

클라이언트 S/W는 I/O요청패킷(IRPs)를 이용하여 데이터 요청을 Pipe에 전달하며, IRP규격은 OS에서 정의 한다. 클라이언트 S/W는 버스 트랜잭션이 완료된 것을 알린다. 펜딩된 IRP가 없고 현재 Pipe를 사용하지 않는 다면, Pipe는 Idle상태가 되고 호스트 컨트롤러도 Pipe에 관련된 작업을 수행하지 않는다. 만약 Non_Isochronous Pipe의 IRP 패킷에서 3개의 버스 오류 혹은 Stall 전송이 이루어지게 되면 IRP는 취소되며 나머지 IRP도 재전송 되고 더 이상의 작업을 진행하지 않는다. 클라이언트 S/W가 이를 복구하게 된다.

IRP는 버스를 통하여 클라이언트 데이터를 전송할 때 여러 개의 데이터 페이로드들을 요청할 수 있다. IRP패킷이 크기가 큰 경우 마지막 남은 것이 전송될 때까지 계속 최대 페이로드 크기로 전송된다. 그렇지 않고 IRP데이터 버퍼 크기보다 적은 데이터로 전송할 경우에는 2가지 경우로 클라이언트가 예측을 한다. 다양한 크기를 가지는 경우인 경우와 정해진 경우이다. 다양하게 변동하는 크기인 경우에는 유닛패킷의 끝을 감지하는 “In-BandDelimiter”를 사용한다. 오류가 없는 것을 확인 후 호스트 컨트롤러가 다음 IRP를 진행 시킨다. 특정하게 정해진 크기인 경우에는 무조건 오류로 처리하며 IRP는 취소되고 그 Pipe는 Stall된다. 그리고 펜딩되어 있는 IRP도 재시도 된다. Endpoint는 자기가 사용 중인 것을 Nak를 호스트에게 보낼 수 있다. Nak는 재전송 조건으로 사용되지 않는다. 주어진 Pipe가 처리하고 있는 동안 Nak은 계속하여 발생하게 되지만 오류로 취급되지는 않는다.

 

3-5-1 Stream Pipe

이 파이프는 데이터 컨텐트의 USB에서 필요하지 않은 구조의 버스 트랜잭션에서의 데이터를 패키하여 전송하는데 사용된다. 통신 흐름에서 항상 단일 방향만을 제공한다. 스트램 파이프를 통한 데이터 전송은 단일 클라이언트라고 생각되는 것과 상호 작용을 하게 된다. 주어진 방향의 반대 방향이 필요하면 다른 스트림 Pipe를 개설하여야 한다. 방향은 IN 또는 OUT 토큰에 의하여 결정된다. USB 시스템 S/W는 같은 Pipe를 이용하는 여러개의 클라이언트들에게 동기화를 요구하지 않으며 먼저 들어간 것이 먼저 나올 수 있도록조정한다. 스트림 Pipe는 Bulk, Isochoronous, interrupt의 전송 형태에 사용된다.

 

3-5-2 Message Pipe

메시지 Pipe는 스트림 Pipe와는 다른 방식으로 Endpoint와 상호 작용한다. 처음에는 호스트가 USB에게 요청을 보낸다. 이 요청들이 완료되면 적정한 방향으로 데이터의 전송이 이루어지고 다음으로 상태 스테이지가 발생된다. 이러한 요청/데이터/상태 변화에 대응하기 위하여 메시지 Pipe는 확인하고 통신하기 위한 통신 흐름을 구축하고 있다. 메시지 Pipe는 양방향 통신을 할 수 있다. 기본 Pipe는 항상 메시지 Pipe이다.

USB시스템 S/W는 여러 개의 요청이 동시에 메시지 Pipe에 전송되지 않게 보장하여야 한다. 하나의 디바이스는 메시지 Pipe당 같은 시간에 한 개만의 요청을 처리 할 수 있다. 호스트상의 다수의 S/W 클라이언트들은 기본 제어 Pipe를 통하여 요청을 만들 수 있다. 그러나 디바이스에게는 먼저 들어간 것이 먼저 나오는 순서로 전송된다. 디바이스는 데이터/상태 스테이지 동안 정보들의 흐름을 조정할 수 있다.(FIFO)

하나의 메시지 Pipe는 양방향을 갖는 한 개의 Endpoint 번호만 있으면 된다. 메시지 Pipe는 제어 전송 형태를 지원한다. 각 USB 디바이스는 하나의 메시지 Pipe로 기본 제어 Pipe를 사용하게 된다. 이 Pipe는 USB 시스템 S/W가 사용하게 된다. 기본 Pipe는 USB디바이스의 설정/상태/제어 정보들을 접근할 수 있도록 한다. Function은 Endpoints에게 부가적인 제어 Pipe를 만들 수 있다.

USB디바이스 프레임웍은 표준, 디바이스 클래스, 또는 공급자가 정의한 특정 요청들을 정의하고 있다. 이런 자료는 디바이스의 상태를 다루는데 사용되어진다. Descriptor들도 다룰 수 있는 또다른 정보를 정의하고 있다. 제어 전송은 디바이스의 Description을 접근하는 메커니즘을 제공한다. 그리고 디바이스의 할 일을 조종하기 요청을 만든다. 제어 전송들은 메시지 Pipe로만 운반되어진다. 제어 전송의 데이터의 흐름은 USB데이터 구조의정의에 의하여 나타날 수 있도록 되어야 한다.

USB 시스템은 호스트와 디바이스간의 제어 전송을 지원하기 위하여 최대한 노력하여야 한다. Function과 그의 클라이언트 S/W는 제어 전송을 위하여 특별한 버스 접근 주파수 혹은 대역폭을 요청할수 없다. USB 시스템 S/W만이 이들을 제약 할 수 있다.

 

3-6 전송형태

호스트에서의 소프트웨어 클라언트와 관련된 메모리 버퍼와 USB디바이스에서의 Endpoint 사이에서의 파이프를 통해서 USB는 데이터를 전송시킨다. 메시지 파이프를 통해서 전송되는 데이터는 USB 정의 구조에 실려서 전송되지만, USB는 디바이스에 특정 구조의 데이터도 USB의 정의 메시지 데이터 페이로드 내에 실려서 전송될 수 있도록 한다. USB는 또한 스트림 또는 메시지의 어느 파이프를 위해서 패킷화된 데이터를 버스를통해서 전송하지만, 버스 트랜잭션에서의 데이터 페이로드에서의 전송된 데이터의 내용과 포맷을 분석하고 해석하는 일은 클라이언트 소프트웨어와 Function이 하는 일이 된다. USB는 파이프를 사용하는 클라이언트 소프트웨어와 Function의 요구 사항들을 서비스에 최대한

맞도록 적정화한 각기 다른 전송 형태들을 사용하게 된다. 각 전송 형태들은 다음에서 제시한 것을 포함한 통신의 흐름에서의 다양한 특성들을 결정하게 된다.

􀁺 USB에 의한 데이터 포맷

􀁺 통신 흐름의 방향

􀁺 패킷 크기의 제약

􀁺 버스 접근의 제약

􀁺 지연 제약

􀁺 요구된는 데이터 순서

􀁺 에러 핸들링

USB디바이스 설계자는 각 디바이스의 Endpoint들의 역할을 적절하게 선택해야 한다. 파이프가Endpoint에 대해서 설정되었을 때, 파이프 전송특성들의 대부분이 결정된다.

 

3-6-1 Isochronous 전송

􀁺 전송방향 : Isochronous는 스트림 Pipe이기 때문에 단일 방향을 가지며, 만약 디바이스가 양뱡향을 요구하면 두개의 Isochronous Pipe가 생긴다.

􀁺 패킷의 크기 제약 : Isochronous 파이프에 대한 주어진 설정에서의 Endpoint는 전송하거나 수신할 수 있는 최대 크기 데이터 페이로드를 나타낸다. 최대 데이터 페이로드 값을 수신 후 USB 시스템 S/W는 충분한 버스 타임이 있는가를 조사하여 Endpoint와의 설정의 성립여부를 결정한다. Isochronous 파이프는 주어진 USB 시스템의 설정에 따라서 지원 될 수 도 있고 지원되지 않을 수도 있다. 각각의 Isochronous Pipe에 대한 USB의 최대 데이터 페이로드 크기는 1023 바이트이다. 주어진 트랜잭션은 Endpoint에 대해서 정의된 최대 크기가 정확히 필요하지 않으며, 데이터 페이로드의 크기는 클라이언트 소프트웨어 또는 Function에 의해서 결정되는 크기이며, 변동할 수 있다. 데이터 페이로드의 실제 크기는 데이터 송신기에 의해서 정해지며, 미리 정해진 크기보다 작을 수도 있다.

􀁺 버스 접근 제약 : Isochronous 전송은 오직 풀 스피드 디바이스에서만 사용된다. 주기적인 Isochronous 또는 인터럽트 전송에 대해서 할당된 프레임의 적어도 90%가 필요하게 된다. 1바이트 페이로드에 대해 1프레임동안 최대 150이하의 트랜잭션이 가능하다. 클라이언트 S/W의 OS 스케쥴링

지연이나 버스 오류에 의해 그 프레임에 데이터가 전송되지 않을 수 있으며 이것은 디바이스가 SOF를 트랙킹함으로서 탐지되며, 끼어드는 데이터 없이 두개의 SOF를 수신하게 된다. 이러한 상태는 호스트로 반환 되어야 한다.

􀁺 데이터의 시퀀스 : Isochronous는 데이터 재전송을 위한 핸드쉐이크는 허용하지 않으며, 일반적으로 성공적인 수신의 유무만을 반환한다. 결국 수신기는 프레임동안 실종된 데이터 여부나 잃어 버린 데이터가 얼마나 되는지만을 결정한다.

 

3-6-2 Interrupt 전송

􀁺 비주기적인 매우 적은 데이터 송수신을 위해 고안되었으며, Pipe에 대해서 최대서비스 주기를 보장하고 버스에서의 에러에 기인한 다음 주기에 시도되는 전송의 재시도가 이에 해당한다. 또한 스트림 Pipe과 같은 단일 방향을 가진다.

􀁺 패킷 크기의 제약 : 최대 데이터 페이로드 값을 수신후 USB시스템 S/W는 충분한 버스 타임이 있는가를 조사하여 Endpoint와의 설정의 성립 여부를 결정한다. 각각의 인터럽트 Pipe에 대한 USB의 최대 데이터 페이로드 크기는 64바이트이다. 실제 데이터 크기는 송신측에 의해 결정되며, 미리 타협한 최대 크기에 정확히 일치하지 않은지를 알 수 있다. Endpoint는 Endpoint의 wMaxPacketSize 값과 동일하거나 적은 데이터를 전송할 수 있다. 디바이스는 wMaxPacketSize 값보다 큰 데이터를 인터럽트 Pipe를 통해 전송할수 있다.

클라이언트 S/W 트랜잭션당 IRP완료의 통지 없이 인터럽트 전송을 위한 IRP를 통해 데이터를 수신할 수 있는데 이를 위해 여러 개의 버퍼를 가짐으로서 가능해 진다. 현재 성립된 1페이로드 데이터 이상의 데이터가 포함될 때 모든 데이터 페이로드는 마지막 데이터 페이로드를 제외하고 최대 크기로 전송된다. 인터럽트 전송은 Endpoint가 다음의 하나를 수행할 때 끝나게 된다. 예상된 데이터와 정확히 같은 데이터가 전송될 때 wMaxPacketSize보다 적은 데이터를 전송하거나 길이가 0인 패킷을 전송했을

때 인터럽트 전송이 끝나면, 호스트는 현재의 IRP를 포기하고, 다음 IRP를 진행한다. 만약 예상된 것보다 큰 데이터 페이로드를 수신하면, 인터럽트 IRP는 취소되고 그리고 Pipe는 조건이 올바르게 되거나 인정될 때까지 앞으로의 IRP는 정지하고 있게 될것이다.

􀁺 버스 접근 제약 : 인터럽트 전송은 풀 속도와 낮은 속도 디바이스에 모두 사용된다. USB는 Isochronous, 인터럽트와 같은 주기적 전송에 할당된 어떤 프레임의 최대 90% 정도를 포함한다. 1바이트 페이로드에 대해 1프레임 동안 최대 108(Full-Speed) 또는 14(Low-Speed)이하의 트랜잭션이 가능하다. 다양한 구현의 이유 때문에 호스트 컨트롤러는 프레임당 인터럽트 트랜잭션의 최대 크기 이상으로 제공할 수 없다. 인터럽트 파이프에 대한 Endpoint는 주기를 1~255ms의 값으로 정할 수 있고, 낮은 속도의 Endpoint는 10~255ms로 한정지을 수 있다.

􀁺 데이터 시퀀스 : 인터럽트 전송은 데이터 토글 비트를 사용하고 성공적인 전송이 완료되었을 때 또는 연속적으로 데이터 토글 비트들을 토글된것에 의해서 비트들이 토글된다. 디바이스는 항상 DATA0, DATA1 PID들을 토글할 수 있도록 선택할 수 있고, 호스트로부터 핸드쉐이크들을 무시할 수 있다. 그러나 이러한 경우에 에러가 발생할 경우, 몇몇의 데이터 패킷들을 잃어버릴 수도 있다. 왜냐하면 호스트 컨트롤러는 잃어버리는 패킷의 재 시도로서 다음번 패킷을 해석하기 때문이다.

 

3-6-3 Bulk 전송

􀁺 Bulk전송은 비교적 많은 양의 데이터를 시간에 큰 구애 없이 정확히 전송하기 위하여 고안되었으며, 버스에서의 전송 에러가 발생했을 경우에는 데이터를 재전송한다. 그리고 데이터 전송은 보장하지만, 대역폭이나 지연은 보장하지 못한다.

􀁺 Bulk 전송의 방향 : 방향은 Isochronous는 스트림 Pipe이기 때문에 단일 방향을 가진다. 만약 디바이스가 양방향을 요구하면, 두개의 Bulk Pipe가 생긴다.

􀁺 패킷의 크기 제약 : 최대의 데이터 전송 크기는 64바이트이며, 설정동안 USB 시스템 S/W는 최대 데이터 페이로드 크기를 읽는다. 현재 설정된 1페이로드 데이터 이상의 데이터가 포함될 때 모든 데이터 페이로드는 최근 데이터 페이로드를 제외하고 최대 크기를 전송된다. Bulk 전송은 Endpoint가 다음 중의 하나를 수행할 때 끝나게 된다. 예상된 데이터와 정확히 같은 데이터가 전송될 때와 wMaxPacketSize 보다 적은 데이터를 전송하거나 Zero-length 패킷을 전송했을 때이다. 모든 호스트 컨트롤러들은 Bulk Endpoint들을 위한 64바이트의 최애 패킷 크기와 8, 16, 32바이트의 패킷도 지원한다. 호스트 컨트롤러는 최대 패킷 크기들 보다 작거나 큰 것을 지원할 필요를 가지지는 않는다. 설정 동안에는 USB 시스템 소프트웨어는 Endpoint들의 최대 데이터 페이로드 크기를 읽어 들이고, 지원되는 크기보다 크게 Endpoint로 전송되는 데이터 페이로드는 없다. Bulk 전송이 끝나면 호스트는 현재의 IRP를 취소하고, 다음 IRP를 진행한다. 만약 예상된 것보다 큰 데이터 페이로드를 수신하면, 인터럽트 IRP는 취소되고 그리고 Pipe는 조건이 수정되거나 인정될 때까지 앞으로의 IRP를 Stall할 것이다.

􀁺 버스의 접근 제약 : 오직 풀 속도 디바이스에 사용하고 제어 전송처럼 보장된 시간은 없다. 단지 버스의 대역폭이 허용된 범위 내에서만 전송된다. 따라서 우선순위는 타 전송에 비해 떨어진다.

􀁺 데이터 시퀀스 : Bulk 전송은 오류로 인해 트랜잭션이 취소될 때 전송 측과 수신 측과의 동기화를 위해 데이터 토글 비트를 사용한다. 설정 후 호스트는 DATA0로 시작된다.

 

3-6-4 전송을 위한 버스 접근

데이터의 전송은 다양한 범위의 디바이스에 의해 요구되는 대역폭을 적절히 할당하는방법을 사용하고, 사용되는 개체들과 오브젝트들이 USB 트랜잭션 트랙킹을 통해서 통신의 흐름을 지원하는 방법을 사용해서 전송된다. 이와 더불어 USB시스템의 버스 시간동안에 전송되는 것만큼의 정보의 패킷을 전송하기 위한 시간이 필요하게 된다.

􀁺 Transfer Management : 객체와 오브젝트가 USB를 통해 통신하도록 지원해준다.

􀁺 Transaction Tracking : USB 시스템을 통해 움직이는 트랜잭션을 추적한다.

􀁺 Bus Time : 패킷 정보가 Bus를 통해서 이동하는 시간

􀁺 Device/Software Buffer Size : 공간을 요구하여 버스 트랜잭션을 지원한다

􀁺 Bus Bandwidth Reclamation : 전송으로 인해 대역폭이 할당되어 있으나 사용하지 않고 당장 control과 bulk 전송을 위해 재사용된다.

􀁺 호스트 컨트롤러(Host Controller) : 각 트랜잭션에 대한 제어, 패킷 생성 버스 활성화

􀁺 호스트 컨트롤러 드라이버(HCD) : IRP와 트랜잭션의 변화

􀁺 USB 드라이버(USBD) : IRP를 디바이스 엔드포인트 Call로 변환

􀁺 클라이언트 S/W : Function Call과 IRP request의 생성 및 소모

 

3-7 Transaction Tracking

호스트 컨트롤러의 H/W및 S/W는 한 개의 IRP에 대한 한 개 이상의 트랜잭션을 구성한다.

IRP와 트랜잭션/프레임의 배열을 보면 한프레임에는 한 개의 IRP에 대한 한 개의 트랜잭션만 배열한다. 프레임 배열의 순서는 호스트 컨트롤러에 의해서 자유롭게 선정된다.프레임의 발생 간격은 1msec이다.


출처 : 서원대 전산정보학부 김영수(devil3247@hanmail.net)

 

 

 

 

USB 관련 FAQ

 

1. USB는 마스터와 슬레이브로 구성된 것으로 알고 있는데, 두 가지의 역할을 다 할 수 있는 제품을 만드는 것은 불가능한가요?

OTG(On The Go) 제품이 이러한 요구를 충족시키기 위하여 출시된 규약을 따른 것이다. OTG 제품은 마스터와 슬레이브의 역할을 다 수행할 수 있으며, 따라서 접속하는 기기의 마스터/슬레이브 판별기능을 갖추고 있다.

 

2. USB2.0의 실제 전송 속도는 얼마인가요?

버스 스피드와 실제 디바이스가 데이터를 전송하는 속도는 다르다. 전송속도(Data transfer rate)는 버스가 얼마나 바쁘냐(busy), 4가지 전송 모드 중 어떤 모드가 사용되고 있느냐가 관건이다. 최고속의 상태는 High speed bulk transfer 모드로 약 90%의 버스 폭(Bandwidth)를 사용하여 53Mbyte/sec의 속도로 데이터를 전송할 수 있다.

 

3. USB1.1 제품을 USB2.0 장치들과 공용 가능합니까?

USB2.0은 USB 1.1과 backward 호환성이 된다. 따라서 모든 USB1.1 장치들은 USB2.0 장치들과 같이 사용할 수 있으나 USB 1.1 장치로서 동작된다.

 

4. USB2.0 Ready라고 표시된 제품은?

디바이스는 USB2.0을 지원하나 OS가 아직 USB2.0 드라이버를 지원하지 않는 경우에 USB2.0 Ready라고 제품에 표시하고 있다.

 

5. USB(Universal Serial Bus) 2.0 이란?

직렬버스로 최대 480Mbps까지 데이터를 전송할 수 있는 규격이다. 기존에 사용하던 USB 1.1에 비해 상당한 성능향상이 있고, USB 1.1 장치들과 forward, backward 호환성을 유지하며 USB 1.1에 있던 Plug & Play 기능, 드라이버 자동 설치, 전원 관리 기능 등은 그대로 유지하고 있다. 즉 기존에 사용하던 USB 1.1 장치들을 수정없이 그대로 USB 2.0환경에서 사용할 수 있다.

 

6. USB2.0의 장점은 무엇입니까?

USB1.1은 low speed 모드로 1.5Mbps, full speed 모드로 12Mbps를 지원한다. USB2.0은 low speed 모드와 full speed 모드를 지원하면서, 40배 빠른 최대 480Mbps를 지원하는 high speed 모드가 제공된다. 주요한 응용으로는 이러한 큰 밴드 폭을 필요로 하는 외장 저장장치, 고속 통신 망, 칼라 프린터, 스캐너 등에 사용된다. 또한 USB2.0은 USB1.1에 비해 성능이 향상 되었을 뿐 아니라 USB1.1 장치들과 forward 호환성과 backward 호환성을 제공하는 장점이 있다. 따라서 기존의 USB1.1 환경에서도 USB2.0 디바이스가 그대로 동작이 된다.

 

7. USB 1.1과 USB 2.0의 전송 속도는 구체적으로 어떻게 다릅니까?

기존의 USB 1.1은 low speed (1.5Mbps)와 full speed(12Mbps) 2가지 모드가 있으나 USB 2.0에서는 앞의 2가지 모드 외에 high speed(480Mbps)가 추가 되었다.

 

8. USB 2.0 장치를 USB 1.1 host controller에 사용 가능합니까?

USB2.0은 USB1.1과 forward 호환성이 된다. 따라서 USB1.1 host controller에 USB2.0장치를 연결하여 사용할 수 있으나, USB2.0의 장점인 최대 480Mbps의 속도는 낼 수 없다.

 

9. USB2.0 High Speed 모드로 동작하려면 무엇이 필요합니까?

호스트 콘트롤러가 USB2.0을 지원해야 한다(EHCI즉 Enhanced Host Controller Interface 지원). PC본체에 내장 되었거나 별도로 PCI card 또는 Card bus(노트북 경우)로 설치하여야 하며, 호스트 콘트롤러에 사용하는 OS의 USB2.0용 드라이버가 있어야 함. 또한 USB 2.0허브를 사용할 경우는 USB2.0용 허브 드라이버가 있거나 OS에서 지원 되어야 함. 지원하고 있는 OS 환경으로는 Windows 98SE, Windows ME, Windows 2000, Windows XP이나 제품을 공급하는 제조사 마다 지원하는 OS가 다르다. 제품을 구입시 지원 OS를 필히 확인할 필요가 있으며 대부분 Windows 95, Windows NT는 지원하지 않는다. Mac의 경우는 Mac OS X에서는 USB2.0을 지원하나 Mac OS 8.6과 9.x의 환경에서는 USB2.0 디바이스가 USB1.1로만 동작된다.

 

10. USB1.1 케이블을 USB2.0 환경에서 사용할 수 있습니까?

규격상으로는 동일하나 기존에 발매된 많은 케이블들은 USB1.1규격을 제대로 만족하는 케이블이 아니므로 기존의 USB1.1용 케이블을 USB2.0의 High speed에서 사용할 경우에는 조심 하여야 한다.

 

11. USB1.1 장치들이 USB2.0 환경에서 사용할 때 성능이 향상 됩니까?

USB1.1장치들은 USB2.0환경에서 480Mbps로 동작하지는 않고 USB 1.1장치로서 동작된다. USB1.1장치와 USB2.0 장치들은 서로 혼재 되어 사용할 수 있으나 USB2.0 host controller나 USB2.0 hub에 USB2.0 장치를 연결할 경우만 USB2.0의 성능을 얻을 수 있다.

 

12. USB2.0과 IEEE1394와의 차이점은 무엇입니까?

IEEE1394(Firewire, iLink)는 최대 400Mbps의 속도이고, IEEE1394b는 3.2Gbps의 이다. 어떤 주변기기는 양쪽의 어느 인터페이스를 사용할 수 있으나 두개의 버스는 서로 다른 목적으로 만들어 졌다. USB에서는 호스트가 모든 전송을 시작하고, 모든 전송은 하나의 목적지를 갖는다. IEEE1394는 주변기기들이 각각 서로 직접 통신을 할 수 있고 여러 개의 목적지를 가질 수 있다.

 

13. USB2.0 장치에 필요한 요소들은 무엇입니까?

모든 USB 주변기기들은 버스의 통신을 관리하기 위하여 콘트롤러 칩과 Firmware가 필요하다. 또한 각 주변기기들은 low level 드라이버와 application간에 통신을 관리하기 위한 device driver를 갖고 있어야 한다. USB2.0을 지원하는 호스트 컴퓨터는 호스트 컨트롤러 하드웨어와 OS와 함께 제공되는 소프트웨어 드라이버를 갖고 있어야 하나, 내장된(built-in) 드라이버로 동작되지 않는 장치는 자체 드라이버를 제공하여야 한다.

 

출처 : 김정한



첨부파일 USB구조와데이터전달방식.hwp

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 공유하기
  • 신고하기

댓글

댓글 리스트
  • 작성자이근례 젬마(잔꽃송이) | 작성시간 12.08.25 이 어려운걸 설마 공부하라고 올려 놓으신건 아니죠 ?
  • 답댓글 작성자김진호 베드로(새벽샛별) 작성자 본인 여부 작성자 | 작성시간 13.04.05 현대인의 생활 중에 넘 많이 쓰는 놈이라 내가 공부 좀 해볼라구요!
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼