|
우리 SD460은 USB허브가 없죠??? 만들 방법이..없을까용???^^; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
생각에는 USB의 버스 포폴리지(topology)은 다소 제한적이다. USB의 고유한 의도 중의 하나는 당신의 PC의 뒤쪽에 케이블의 총량을 줄이고자 하는 것이었다. 애플 사람들은 그 아이디어는 애플 데스크 탑 버스로부터 왔다라고 말할 것입니다. 키보드와 마우스 두개 모두와 어떤 주변장치들이 한개의 유일한 케이블(데이지 체인방식으로, daisy chained)로 연결되어질 수 있다는 애플 데스크 탑 버스로 부터 말이다. 비록 USB가 10BaseT 이더넷과 유사한 Tired start 토플러지를 사용하지만, 이것은 어떤 장소의 허브의 사용을 강요한다. 이로서 더 큰 비용과 당신의 데스크탑위의 더 많은 박스들과 더많은 케이블을 추가시키게 된다.
비록 그것이 그렇게 보이는 만큼 나쁘진 않다. 많은 장치들은 그들 스스로 USB 허브를 가지고 있다. 예를 들면, 당신의 키보드는 당신의 컴퓨터에 연결된 허브를 장착할수 있다. 당신의 디지털 카메라와 같은 당신의 마우스와 다른 장치들은 당신의 키보드의 뒤쪽으로 쉽게 플러그인 될 수 있다. 모니터들은 일반적으로 Built-In 허브들을 가진 긴 리스트상의 또 하나의 주변장치이다.
단순히 데이지 체이닝(daisy chaining) 장치들이 약간의 이익을 함께 가지고 있다기 보다는 오히려 이것은 결합된 Star 토플리지 (topology)라고 할수 있다. 맨먼저 각각의 장치에 전원은 모니터링 될 수 있고 만약 과전류 조건이 다른 USB 장치들을 부수지 않고 일어나면 심지어 전원을 끊을 수도 있다. High, Full, Low Speed 장치들은 모두 한꺼번에 지원될 수 있다. High speed와 Full Speed에서 허브 필터링이 되면, Low Speed는 그 데이타들을 받을수 없다.(Both high, full and low speed devices can be supported, with the hub filtering out high speed and full speed transactions so lower speed devices do not receive them.) 맞나요?
127개의 장치까지 한 USB 버스에 연결될 수 있다. 더 많은 장치들을 필요로 합니까?
- 단순히 또 다른 Port나 호스트를 추가하십시오.
가장 빨리 나온 USB 호스트들이 2개의 포트를 가지고 있었을 동안에 , 대부분의 제조업자들은 이것을 제한적으로 보았고 4개 그리고 5개 포트 호스트 카드들에 등등.. (하드 디스크 등과 같은 내부 포트를 가진) 초기의 호스트들은 하나의 USB 컨트롤러를 가지고 있었고, 그래서 포트들은 같이 이용할수 있는 밴드폭을 공유하였다.대역폭의 요구사항이 증가되었기 때문에, 우리들은 다중 포트가 2개 내지 더 많고 개별적인 채널들을 허용하는 컨트롤러들이 출시되는 것을 보기 시작하였다.
USB 호스트 컨트롤러들은 그들 자신의 스펙를 가지고 있다. USB 1.1에는 두개의 호스트 컨트롤러 인터페이스의 스펙이 있었다.
- UHCI(Universal Host Controller Interface)-인텔에 의해 개발되고, 소프트웨어(MS)에 더 많은 부담을 주는 스펙임. 그러나 HW는 비교적 간단함.
- OHCI(Open Host Controller Interface) - Compaq, Microsoft and National Semiconductor 에 의해 개발되고, 하드웨어에 더 많은 부담을 주고 대신 소프트 웨어는 보다 심플함.
전형적인 하드웨어/소프트웨어 기술자 관계임
(흠.. 의미심장한 말이군여. 너가 좀더 고생해~ 하드웨어랑 소프트웨어랑 역활 분담이지요. 회사에서 이로인해 다투지 않았었나요? 저는 경험이 있거덩요. ^^ - 역자주)
계속됨...
(2006.12.12 - 흠.. 오늘이 12/12 사건이 있던 21주년인가요? ^^
조금 쉴려고 했는데, 많이 쉬었군요. 시작해봅니다.)
USB 2.0의 도입으로 새로운 호스트 컨트롤러 인터페이스 스펙은 USB 2.0에 레지스터 레벨의 세부 스펙까지 설명할 필요가 있었다.
EHCI(Enhanced Host Controller Interface)는 생겨났다. 인텔, 컴팩, NEC, Lucent and Microsoft을 포함한 중요한 공헌자들은 그들이 하나의 인터페이스 표준을 제공하기 위해 공동 작업했다는 것이 희망적으로 보인다. 그래서 오직 하나의 새로운 드라이버가 우리의 운영체제안에서 구현되도록 말이다.
USB는 그이름대로 시리얼버스로 제안되었다. USB는 4 쉴드 와이어(shielded wires)를 사용하고 두 개는 전원이다.( + 5v & GND)
나머지 두개는 트위스트 페어 차등 데이타 시그널들이다. twisted pair differential data signals)이다. (여기서 차등이란 D+,D-가 항상 신호를 보낼때는 한쪽은 +, 한쪽은 -가 되기때문입니다.역자주) 또한 USB는 NRZI(Non Return to Zero Invert)엔코드 방식을 사용하여, 싱크필드와 함께 데이타를 호스트와 디바이스 클럭에 동기 시킨다.
(NRZI 엔코딩에 대해서는 인터넷을 참조하세요! 여기서 싱크필드는 NRZI엔코딩에 들어가지 않습니더.)
USB는 다이나믹하게 드라이버를 적재하고 해제하는 Plug & Play를 지원한다. 사용자는 단순히 장치를 버스에 꽂기만 하면 된다. 호스트는 이 추가되는 장치를 감지하고, 처음 추가되는 장치를 심문하고 적절한 드라이버를 적재하는 동안 모래시계 커서가 깜박이도록 유저 화면에 제공된다. 최종사용자는 종료에 대해 걱정하지 않아도 되고, IRQ나 포트 어드레스, 컴퓨터의 재부팅에 대해서도 걱정할 필요가 없다. 일단 유저가 사용을 끝내고 케이블을 제거하면, 호스트는 케이블 및 장치의 부재를 감지해서 자동적으로 드라이버 적재를 해제한다.
적절한 드라이버의 적재는 PID/VID (Product ID/Vendor ID)의 조합으로 이루어진다. VID는 USB개발자포럼을 통해 비용을 지불하고 제공받을 수 있다.(여기서 역자주~ 제가 알기로 200~300만원정도 주면 VID를 받을 수 있는 걸로 알고 있어요) 이것은 USB의 하나의 골치거리로 여겨질수 있다.(뼈있는 말입니다. 왜 돈을 받느냐구여!) 요금에 대한 최신 정보는 웹사이트에서 참조하시라~
임시의 VID를 제공하는 비상업적인 구성을 가질수 있다. 가령 교육, 연구, 취미를 목적으로 하는 경우들이다. USB 개발자 포럼은 아직 이 서비스를 제공하고 있다. 이경우 당신은 단신의 개발시스템의 제조사의 것으로 할당된 것을 사용할수 있다.
(가령, 삼성칩을 쓴다면, 삼성에게 할당된 VID를 사용해도 되겠죠. 그러나 실제로 상업적으로 판매한다면, 삼성의 제품아이디 VID, PID랑 겹치는 경우가 생길수 있어서, 그래서 연구용, 개발용, 취미용 이런 이야기가 나오는 것입니다.)
예를 들면, 대부분의 칩 제조사들은 그들의 VID/PID조합을 가지고 있고, 또 당신은 존재하지 않을것같은(?) VID/PID를 조합해서 사용할수 있다. 다른 칩 제조사들은 당신에게 PID를 판매할 수 있수도 있다. VID를 포함해서 말이다.
(잘 말하면 그냥 주지않을까요..ㅎㅎ)
USB의 다른 주목할만한 특징은 전송 모드 들이다.(transfer modes)
USB는 Control, Interrupt, Bulk and Isochronous 전송(트랜스퍼, transfer) 모드를 지원한다.
우리는 다른 트랜스퍼 모드를 이후에 살펴볼것이고, Isochronous 트랜스퍼는 보장되는 지연(guaranteed latency, 시간적 지연임)을 가진 대역폭(데이타를 시간당 보내는 여유량을 이야기함-역자)에 대해 미리 정의하는 것을 가능케 한다.
이 전송방식은 오디오나 비디오 기기들에게 적합하다. 왜냐면 데이타의 손실이다 프레임의 누락을 일으키는 폭주현상이 있기때문이다.
각각의 전송 모드는 설계자들에게 에러검술, 복구, 보장되는 지연과 데이타의 대역폭과 같은 부분들을 각각 다르게 제공한다.
(그래서 고민을 합니다. 어떤 것을 쓸까요...? 이동식 디스트는 대부분 BULK를 마우스,키보드 같은 애들은 Control을, DMB수신기는 BULK와 Interrupt를 조합해서 사용합니다. 이중 Iso 전송이 가장 까딱스럽다고 하지요.)
모든 장치들은 호스트 컨트롤러에게 대해 Upstream 연결 방식이고 또 모든 호스트는 장치들에 대해
Dwonstream관계이다.
Upstream과 Dwonstream 커넥터들은 기계적으로 호환되지 않는다. 그래서 허브의 비정상적인 루프백 연결들은 제거된다.
예를 들어 다운스트림 포트에 또 같은 다운스트림 포트가 연결되는 예이다. 일반적으로 두개의 커넥터 타입이 있다.
타입 A와 타입 B이고 아래의 그림과 같다.
A타입 USB 커넥터 B타입 USB 커넥터
타입 A는 항상 업스트림에 꽂히게 된다. 타입 A소켓은 일반적으로 호스트 컨트롤러와 허브들에게서 발견된다. 예를 들면 타입 A 소켓들은 컴퓨터의 메인보드와 허브들에 쓰인다. 타입 B는 항상 다운스트림으로 연결되고, 일관되게 타입 B 소켓들은 클라이언트 장치들에서 쓰인다.
(여기서 다운, 업스트림 의 개념은 호스트(즉 PC) 개념에서 장치로 내려가면 다운, PC로 올라오면 업스트림 개념입니다.^^)
상점에서 USB 암수 변환기들과 타입 A케이블(wired straight)를 찾아내는 것은 흥미로운 일이다. 이것은 USB 스펙의 모순에 있다.
단지 타입A는 두 컴퓨터를 연결시키기위해 사용되는 브릿지들인 타입 A 플러그 장치들에 연결된다.
또다른 금지된 케이블들은 맨끝에 하나의 플러그를 가진 연장케이블이다.(맨끝에 각기 타입A와 B를 가진) 그리고 이와 유사한 소켓들이다. 이 케이블들은 USB의 케이블 길이 스펙 사항을 위반한다.
(아마도 USB 연장 케이블을 얘기하는 것 같죠? A타입 숫컷과 암컷을 맨끝에 가진 연장케이블 있죠? 이런 거죠.
사실 스펙대로 100% 만드는 제품이면 좋지만 그렇지 않아도 속도의 손실을 좀 가져오더라도 길이나 케이블 등 100%
지키지 않아도 되긴 합니다.)
USB 2.0은 mini-usb B 커넥터들을 소개한 잘못을 가지고 있다. 그 커넥터들에 대한 자세한 것은 Mini-B Connector Engineering Change Notice 에서 찾을 수 있다. 미니 커넥터들의 근원지는 소형 전자 장치들의 영역이다. 휴대폰과 오거나이저들(organisers) 말이다. 현재의 타입 B 커넥커들은 이러한 장치들을 쉽게 연결하기엔 너무 크다.(동감하시져?)
최근에 발표된 On-The-Go 스펙(OTG) 은 USB에 peer-to-peer 기능성을 더한 것이다.
이것은 USB 호스트를 휴대폰과 전자 organiser 안으로 집어넣고, 그래서 mini-A plug와 mini-A 용기들(receptacles), mini-AB 용기들을 위한 스펙을 포함한다. 나는 곧 소형 USB 케이블들로 바뀔 세상이 올것을 예감한다. 그리고 mini의 범위가 변환케이블의 표준이 될 것을 예측한다.
Pin Number |
Cable Colour |
Function |
1 |
Red |
VBUS (5 volts) |
2 |
White |
D- |
3 |
Green |
D+ |
4 |
Black |
Ground |
당신이 USB 장치/트랜스시버 또는 USB 호스트/허브을 위해 칩(실리콘)을 디자인하고 있지 않다면, 제 7장에 있는 전기적 스펙에 대해서 많이 알 필요가 없다. 그래서 우리는 여기서 중요한 점들만을 간단히 설명한다.
우리가 토의하였을때 USB는 데이타를 위한 차등 전송 쌍(differential transmission pair)을 사용한다.
이것은 NRZI을 사용하며 엔코딩되고, 비트는 데이타 스트림에서 중분한 전이(transitions)를 위해 비트셔플(bit stuffed)이 된다.
Low 와 Full 스피드 장치들에서, 차등(differential) '1'은 D+신호선이 2.8v이상(HIGH)으로 전송되어진다. 이때 15K옴 저항이 그라운드 풀다운이 되고, D-는 0.3v이하로 1.5k옴으로 3.6v에 풀업이 된다.
차등(differential) '0'는 D- 신호선이 2.8v이상이 되고, D+가 0.3v이하가 된다. 동일한 풀다운/업 저항이 쓰인다.
수신측은 차등 1을 D+를 D-보다 큰 200mv로 정의하고, 차등 0는 D+ 200mv로 D-보다 작게 정의한다. 신호의 극성은 버스의 속도에 따라서 반전이 된다. 그러므로 용어 'J' 와 'K' 상태(states)들은 논리 레벨을 알리는 심볼로 사용된다. Low speed에서 'J' 상태는 차등 0이고, High Speed에서 'J' 상태는 차등 1를 나타낸다.
USB 전송장치(transceivers)들은 차등(differential)과 싱글 엔디드(single ended) 신호을 모두 갖고 있다. 특정한 버스 상태들은 D+, D- 또는 둘다에 싱글 엔디드 신호들을 가르킨다.
(여기서 차등이란 D+, D-가 항상 0과 1, 1과 0으로 다른 것이고, 싱글 엔디드는 모두 0, 모두 1 이렇게 된것입니다. 그러나 싱글엔디드 모두 1은 사실상 없는 신호입니다.-역자주)
SE0(Single Ended 0)는 D-, D+가 모두 0((< 0.3V)로 발생한 것이다.
싱글 엔디드와 차등 신호는 중요한 것들인데 만약 당신이 트랜시버와 FPGA를 당신의 USB장치로 사용하고 있다면 더욱 그렇다. 당신은 차등 신호를 샘플링하는 것에서 도망칠 수가 없다.( 꼭 이 신호들을 잘 검토해봐야 된다는 뜻이지요. - 역자주)
Low/Full speed 버스는 특성 임피던스 90 ohms +/- 15%를 가지고 있다. 그러므로 임피던스 매칭 저항을 선택할때 데이타시트를 관찰하는 것이 중요하다. 어떤 좋은 데이타시트는 그 값과 토러런스(허용치, tolerances)를 설명할 것이다.
High Speed (480Mbits/s) 모드는 17.78mA 일정 전류를 사용한다. 신호 잡음을 줄이기 위해서이다.
Speed Identification (속도 검출)
USB 장치는 반드시 D+, D- 라인의 전압을 3.3v이상으로 올림으로 자신의 속도를 나타내야 한다. Full speed 장치는 Full speed장치임을 나타내기 위해 D+에 부착된 풀업 저항을 사용해야 한다. 장치 끝단에 있는 풀업 저항들은 연결된 장치의 존재여부를 검출하기 위해 호스트나 허브에서 사용된다. 풀업저항이 업사면, USB는 버스상에 아무 장치도 연결되어 있지 않다고 여길것이다. 어떤 장치들은 실리콘(칩?)내부에 이러한 저항을 가지고 있다. 그래서 펌웨어 컨트롤로 이 저항값을 On/Off할수 있고, 다른 것들은 외부 저항을 필요로 한다.
예를 들면 필립스 반도체는 SoftConnectTM 기술을 가지고 있다.
버스에 처음 연결될 때, 이것은 버스에 어떤 장치가 부착되었음을 알리는 속도검출용 풀업 저항을 활성화하기 전에, 먼저 마이크로컨트롤로로 하여금 USB 장치를 초기화하도록 해준다.( 아.. 번역 쪼금 어렵습니다. 미국말은 우리말이랑 참달라여~)
만일 풀업저항이 Vbus에 연결되었다면, 이것은 플러그가 삽입되자마자 장치가 버스에 연결되었던 것을 나타낼 것입니다. 그때 호스트는 장치를 리셋하고 마이크로프로세서가 아직 USB 장치 초기화를 시작하기전에 먼저 디스크립터를 요청한다.
Cypress Semiconductor와 같은 다른 제조사들은 EzUSB 장치내에서 Re-NumerationTM 기술을 위한 프로그램가능한 저항을 사용한다. 이로써 한 장치가 펌웨어의 제어로서 연결해제가 되고 눈깜짝할 사이에 다른 장치로 열거(enumerate)될 수 있도록 한다. \
(Cypress 칩의 장점으로 보입니다. 먼처음에는 Cypress기기로 붙었다가, 사용자가 알지못하는 사이에, 사용자가 펌웨어에 정의해 놓은 USB 장치로 다시 호스트랑 붙습니다. 매우 좋은 방법이지요.)
많은 EzUSB 장치들은 코드를 저장하기 위하여 어떠한 플래시 또는 OTP ROM 가지고 있지 않다. 그 코드들은 연결시에 바로 올라가는 코드로 만들어져 있다. (bootstraped , 부트스트랩-OS개념에서 빠르게 올라가는 코드들을 말하는 것 같음- 역자주)
USB의 장점 중의 하나는 버스에서 전원이 공급되는 것이다. 순전히 버스로만 전원을 얻고 그외 외부적인 플러그나 기타 케이블이 필요치 않다.
USB 장치 스펙들은 자체 전원소비 단위를 2mA 단위로 Configuration Descriptor 내에서 그것을 표시하도록 하고 있다. 장치는 열거(Enumeration)하는 동안에 표시된 전원소비량보다 더 큰 전원으로 늘릴수 없다. 심지어 외부전원이 인가되더라도 말이다. 거기에는 USB Function의 세가지 클래스 디바이스가 있다.
Low power bus powered function들은 Vbus로부터 전원을 끌어오고, 한단위 부하량보다 더이상 끌어올수 없다. USB스펙은 한 단위 부하량을 100mA단위로 규정한다. Low power bus powered function들은 반드시 반드신 4.40V Vbus이하로 동작강하되도록 설계되어야 하고, upstream 플러그에서 최더 5.25v이상으로 동작할 수 없다. 많은 3.3v장치들을 위해 LDO 레귤레이터는 필수적이다.(mandatory)
High power bus powered function들은 버스로부터 전원을 끌어오고, 기술된(configured)된 한 단위부하량 이상 전원을 끌어올수 없다. 디스크립터에서 요청되어 최대 500mA(5 unit load)까지 drain 가능하다. High power bus function들은 반드시 detect될수 있고, 4.40v를 최소로 열거된다. 최대 단위 부하로 동작할때 4.75V의 최소 Vbus는 최대 5.25V이다. 그리고 그것들의 측정은 Upstream 플러그에서 측정할 수 있다.
Self power function들은 버스로부터 한 단위 부하 이상 끌수 있다. 그리고 그 나머지는 외부전원에서 가져온다. 외부전원을 가져오는 것을 실패한다면, 그것은 반드시 1단위 부하이상을 끌어오기위한 또다른 조항을 가져야 한다.Self power function들은 스펙에 맞춰 디자인하기 더 쉽다. 1 unit bus powered load 는 mains/secondary 전원이 적용되지 않고도 디바이스의 detection and enumeration을 할수 있다.
bus powered 이든 self powered 이든 USB 장치는 포트를 향한 Upstream에서 Vbus를 가져올수 있다. 만일 Vbus를 잃는다면, 장치는 10초의 시간을 가지고, 속도검출을 위해 사용되 D+/D- 풀업 저항으로부터 전원을 제거한다.
다른 Vbus에 대한 고려는 반드시 제한되어야 하는 침입 전류( Inrush current )이다. 이부분은 USB스펙 7.2.4.1에 기술되어 있고, 일반적인 내용이다. 침입 전류는 Vbus와 GND사이의 당신의 장치의 커패시턴스의 총량에 기여한다. 스펙은 그러므로 최대 감결합 커패시턴스(maximum decoupling capacitance)를 10uF를 달도록 기술한다.
유도 USB케이블을 통해 전류가 흐르고 있을 때, 당신이 디바이스를 연결해제하면, 큰 플라이백 전압이 케이블의 열린 끝에 발생할 수 있다. 이것을 막기위해, 1uF의 최소 VBUS decoupling capacitance가 필요하다.
전형적인 Bus powered 장치는 불합리하게 500mA이상의 드레인을 할수 없다.
서스펜드 모드는 모든 장치에 필수이다.(mandatory) 서스펜드 동안, 추가적인 제한이 걸리게 된다. 최대 서스펜드 전류는 단위 부하에 비례한다. 1 단위 부하 장치(디폴트)의 최대 서스펜드 전류는 500uA이다. 이것은 버스의 풀업 저항들로부터오는 전류를 포함한다. 허브는 D-, D+ 양쪽 모두 15Kohm의 풀다운 저항을 가지고 있다. 전원 소모를 위한 목적으로 장치의 풀다운 저항은 1.5k ohm 풀업의 일련에 있으며, 일반적으로 3.3v의 Vterm의 16.5K ohm의 전체부하를 만든다. 그러므로 우리가 시작하기도 전에 이 저항을 200uA으로 낮춘다.
또다른 고려사항은 3.3v 레귤레이터이다. 많은 USB장치들은 3.3v에서 동작한다. PDIUSBD11 도 그 한 예이다. 선형 레귤레이터들은 대부분 600uA의 평균 정지 정류(quiescent currents)에서 쾌 비효율적이다. 그래서 보다더 효율적이고 비싼 레귤레이터들이 필요하게 된다. 대부분의 경우 당신은 500uA 제한으로 떨어뜨리기위해 마이크로컨트롤러을 속도를 늦추거나 클럭을 멈춰야 될 것이다.
많은 개발자들이 USB Implementor's Forum에서 묻기를 이 한계를 초과하는 복합장치들(complications)은 무엇이요? 라고 한다.
그럴만도 하기는, 대부분의 호스트와 허브들은 그와 같은 과부하를 검출하는 기능이 없다. 그래서 당신이 5mA를 드레인하거나 심지어 10mA를 드레인한다면, 당신의 USB장치는 USB스펙을 위반하게 된다. 그러나 보통의 실행시에는 당신이 100mA을 초과하려고 하거나 지정된 허용 부하를 초과하려한다면, 그때는 허브나 호스트가 이것을 감지한다고 기대해도 된다.
물론 이 디자인 이슈들은 당신이 self powered device를 설계하기로 정한다면 피할 수 있다. 서스펜드 전류는 데스크탑 컴퓨터에서는 크게 상관이 없다. 그러나 OTG스펙에서는 얘기가 달라진다. 배터리의 수명을 닿게 할 것이다.
USB장치는 3.0ms이상 동작이 없을때 서스펜드 모드로 들어간다. 그때 7ms이상의 shutdown과 지정된 서스펜드 전류이상을 쓰지 않고, 10mSec이상되면 동작을 멈추게 된다. 서스펜드된 허브나 호스트에 연결을 유지하기 위해서 디바이스는 반드시 여전히 서스펜드중에도 속도 선택 저항들을 풀업하도록 전원을 제공해야 한다.
USB는 SOF(Start of frame) 패킷을 가지고 있거나 주기적으로 살아있음을 버스로 부낸다. 이것은 데이타의 부재로 인해 서스펜드로드로 들어가는 것을 막기 위해서다.
"Global Suspend"라는 용어는 전체 USB버스가 집단적으로 서스펜드 모드로 들어갈때 사용된다. 그러나 선택된 장치들은 디바이스가 연결된 허브로 명령을 보냄으로서 서스펜드 될 수 있다. 이것은 "Selective Suspend."라고 한다.
그 장치는 어떤 Non-idle 신호를 받을때 깨어날 것이다. 한 장치가 원격 Wakeup을 갖고 있다면 서스펜드 모드를 빠져나오기위해 호스트로 신호를 보낼 수 있다.
또다른 영역은 USB clock들의 톨러런스(tolerance)-허용치이다. 이부분은 USB specification, section 7.1.11.을 참조하라.
RS-232와 달리 USB는 몇개의 레이어(layer)로 구성된 프로토콜로 만들어져 있다. 이말로 마음이 심난해진다면, 너무 일찍 포기하지 말기 바란다. 당신은 단순히 상위레이어들의 대해서만 알면 된다.(자동차가 어떻게 달리는지 알지 못해도 다루는 법만 알면 되는 이치죠. 그러나 요즘 운전면허따기 참어려운 것 같슴다.) 사실 대부분의 동작은 USB칩이 하위레이어를 작동시키기 때문이다. 그래서 대부분의 동작은 사용자(개발자)에게 안보이게 된다. 각각의 USB 트랜잭션(Transaction)은 아래와 같이 구성된다.
우리가 이미 검토한대로, USB는 호스트 중심의 버스이다. 호스트 컨트롤러가 모든 트랜잭션들을 초기화한다. 첫 패킷인 토큰 패킷은 호스트에 의해 만들어지는데, 다음에 어떤 것(패킷)이 전송되어질지를 알려주는 역활을 한다. 데이타의 읽기 또는 쓰기 전송인지의 데이타방향과 디바이스의 주소(address)가 무엇인지, 이용하려는 엔드포인트가 무엇인지를 알려준다. 그 다음 패킷은 보통 데이타패킷이다. 데이타 패킷은 데이타가 실리고(payload), 그 다음 패킷은 핸드세이킹 패킷이다. 이 패킷은 토큰이나 데이타 패킷이 정상적으로 전달되었는지, 목적으로하는 엔드포인트가 스톨상태(stall)이거나 데이타를 받을 수 없는 상태인지 여부를 전송한다.
USB bus의 데이타는 LSBit 방식이다. USB 패킷은 아래의 필드들로 구성되어 있다.
| |||||||||||||||||||||||||||||||||||||||||||||||
첫댓글 컴사랑님 좋은 자료 감사합니다.