USB 장치가 포트에 끼워지면 어떤일이 일어날까
오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자.

USB 디바이스를 포트에 끼우면,
우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.
어떻게 알아차릴까?

알 필요 없다. ㅋㅋㅋ
그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와
시스템 소프트웨어를 설계하는 사람들만 알면 된다.
우리는 몰라도 펌웨어 짜는데 아무 애로사항이 없겠다.
그래도 궁금한 행자들은 USB Specification의
xxx Signaling Environment 섹션을 읽어보기 바란다.

컴퓨터가 새로운 USB 장치를 인지하면
젤 먼저 하는 일이 USB 장치에 리셋을 거는 일이다.
여기서 리셋은 행자들이 상상하는 그 리셋이 아니다.
행자들이 알고 있는 그 하드웨어 리셋과 구분하기 위해
이제부터는 “USB 리셋” 이라고 부르겠다.
USB 리셋이 뭐냐하면
USB에 관련된 기능들만 초기화 하는 것을 일컷는다.

구체적으로 FX2에서는 USB 리셋이 걸리면

• Toggle bits are cleared to 0.
• The device address is reset to zero.
• If the Default USB Device is active, the USB configuration and alternate settings are reset to zero.
• The FX2 will renegotiate with the host for high-speed (480 Mbps) mode.

이 딴 일을 한다고 Technical Reference Manual(T.R.M.)에 나와있다.
벌써 눈이 @.@ 되시는가?

걱정마시라.
토글 비트가 뭐고, 디바이스 어드레스는 뭐고, USB configuration과 alternate 세팅은 뭔지
차차 알게 될 것이다.

우쨋든. USB 리셋을 걸고나서
컴퓨터는.
(이제부터 무식하게 컴퓨터라 하지 않고, 쫌 있어 보이도록 “USB 호스트”라 하겠당.)
호스트는 디바이스에게 묻는다.

호스트 : 넌 누구냐?


















디바이스 : 전 아무갠뎁쇼.
(자기 이력서를 내민다.)
(* 이 이력서를 device descriptor라고 부른다.)
호스트 : (이력서를 흘낏 보더니 휙 던져버리고)
그래? 그럼 앞으로 니 번호는 3번이다.
앞으로 3번이라고 부르면 째깍째깍 대답해야 헌다. 알긋냐?
디바이스 : 아 네~.
호스트 : 3번! 이력서 함 줘봐라.
디바이스 : (이기~ 이기~ 미칫나?)
아 네~ 여기 있슴돠.
(* 두 번째로 device descriptor를 제출한다.)

-To be Continue-

여기까지가 오늘 설명할 시나리오다.

디바이스의 이력서인 디바이스 디스크립터(device descriptor)에는
다음과 같은 항목들이 들어 있다.
 
0x18 Descriptor length : 이력서의 총 길이는 18바이트야.
0x01 Decriptor type : 이력서 제목은 "디바이스 디스크립터"
0200 Specification Version (십진수): 난 USB 2.0 장치야.
0x00 Device class
0x00 Device sub-class
0x00 Device sub-sub-class
0x40 Maximum packet size : 난 한번에 64바이트를 보낼 수 있지
0x0547 Vendor ID : 난 0x0547번 회사가 만들었써
0x2131 Product ID : 제품번호 0x2131번이지
0x0000 Product version ID : 펌웨어 버전은 0x0000이고 말이야.
0x01 Manufacturer string index : 회사의 이름을 알고 싶으면 스트링 디스크립터(String Descriptor)의 첫번째 항목을 봐봐봐~
0x02 Product string index : 제품명을 알려면 두번째 껄 보고
0x00 Serial number string index : 글고 내 시리얼 번호에 해당하는 문자열은 없어.
0x01 Number of configurations : 다음장이 있어.


이게 디바이스 디스크립터의 내용이다.
디바이스가 호스트에게 이 디스크립터를 보낼 때는 본좌처럼 친절하게 설명하지 않고,
기냥
18 01 00 02 00 00 00 64… (본좌 16진수로 표기 했다.)
요렇게 보내면 호스트가 알아서
첫번째 바이트 18은 디스크립터의 길이고,
두번째 바이트 01은 이 디스크립터의 타입이 디바이스 디스크립터고, 등등
알아서 해석하게 된다.

왜 호스트가 또라이처럼 두번이나 디바이스 디스크립터를 요구하느냐 하면
첫 번째로 디바이스 디스크립터를 요구했을 때는 딴 것은 안보고
여덟 번째 바이트 즉 0x40만 보고
이 디바이스는 64바이트 단위로 통신을 하는구나 라고 캐치를 하고
담부터는 64바이트에 맞추어 통신을 하게된다.
(Control Pipe의 Packet Size)
뭐 행자들이 굳이 알 필요는 없지만…
궁금해 할 꺼 같아서
안 궁금했는가? 쩝.


위의 시나리오를 보면 호스트가 디바이스에게 주소(3번)를 할당하는 씬이 있다.
주소할당이 된 다음부터는 이때 할당된 주소로 디바이스를 호출하게 된다.
디바이스는 자신에게 할당된 주소 외의 명령은 기냥 생까면 된다.

사실 이것도 알 필요 없다.
왜냐면 주소를 할당 받고,
그 주소 말고 다른 주소로 오는 명령을 쌩까는
이 일련의 과정들을 FX2가 자동으로 해 주기 때문이다.
근데 왜 설명을 했느냐?
잘난 척 한번 해보고 싶었다. ㅋㅋㅋ


그럼 주소가 할당되기 전까지는 어떻게 디바이스랑 통신했을까?
0번 주소로 디바이스랑 통신했다.
디바이스가 처음 USB 포트에 끼워지면 무조건 0번지로 오는 명령을 들어야 한다.
부연하자면 처음에는 0번지에 “Endpoint 0”를 통해 통신한다.


떱. 오늘은 뜬구름 잡는 얘기를 너무 많이 한 것 같다.
행자들 머리 아프기 전에 그만 할란다.
USB Initial Enumeration에 관한 자세한 사항은 여기를 참조하시라.

낼은 막판에 또 새로 튀어 나온
이 Endpoint란게 뭔지를 함 뒤벼바야겠다.

지금은 이 첨보는 용어들하며 뭐가 몬지 잘 모르겠지만
몇 번 듣고 나면 윤곽이 서서히 잡힐게다.
걱정마라.
by 바람처럼날다 | 2005/03/30 20:36 | FX2 펌웨어 강좌 | 트랙백(1) | 핑백(8) | 덧글(18)
트랙백 주소 : http://muosys.egloos.com/tb/52055
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from at 2014/03/11 00:41

제목 : http://helenmccrory.org/
line5...more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:05

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:05

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:05

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:12

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:12

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at USB 장치가 포트에 끼워지면.. at 2008/03/26 01:12

... http://muosys.egloos.com/52055</a> 오늘은 USB 디바이스를 USB 포트에 꽂았을 때 어떤 일이 일어나는가에 대해 까발겨 보자. USB 디바이스를 포트에 끼우면, 우리의 컴퓨터는 새로운 USB 디바이스가 포트에 삽입되었음을 알아차린다.어떻게 알아차릴까? 알 필요 없다. ㅋㅋㅋ그딴건 USB Host 컨트롤러, Hub, Function 컨트롤러의 하드웨어와 시스템 소프트웨어를 설계하는 사람들만 알면 된다.우리는 몰라도 ... more

Linked at 펌웨어 분석 - dscr.a5.. at 2008/03/26 01:21

... 여기</a>를 다시 보자. 그 다음에 나오는 것이 디바이스 퀄리파이어 디스크립터(Device Qualifier Descriptor)이다.요놈은 처음 보는 놈일 것이다. DeviceQualDscr:db DSCR_DEVQUAL_LEN ;; Descriptor lengthdb DSCR_DEVQUAL ;; Descriptor typedw 0002H ;; Specification Version (BCD)db 00H ;; Device classdb 00H ;; D ... more

Linked at 친절한 임베디드 시스템 개발자.. at 2009/08/29 00:25

... ;나를 채워주세요 7) Device Control and System Architecture ⓐ USB 장치가 포트에 끼워지면 어떤일이 일어날까 ⓑ USB descriptor의 내용은 무엇인가 8) Embedded Linux Syst ... more

Commented by 바람처럼날다 at 2005/03/30 20:43
이론 왜 스페이스가 안먹쥐?
Commented by neo at 2005/03/31 16:38
아.. 정말 주옥같은 강의 잘 보고 있습니다. T.T
우리나라에 아직 변변한 usb 관련 서적이 없어서 complete 보고
있는데. 가려운 부분을 초반부터 쫙쫙 긁어주시고 있네요.
앞으로도 좋은 강의 부탁드립니다. 감사합니다.
Commented by neo at 2005/04/01 14:26
질문 하나만 올릴게요;....
reset 만 되면 호스트쪽에서 request 요청하면서 enumeratin 이 진행되는것인가요? 제가 가진 기기에서는 pull up 이 완료되어야 enumeration 이 진행되는것 같아서. 기기 특성일까요? pull up 이 되지 않으면 request 조차 안오네요.. 답신 부탁드립니다. 앞으로도 좋은강의 부탁드립니다.
Commented by 바람처럼날다 at 2005/04/01 22:13
pull up이라 하심은 D+/D- 라인이 Low상태에서 빠져나온 것을 말하시는 건가요? 만일 그렇다면 장치가 옳게 동작하는 거지요. 왜냐면 USB reset이 명령 패킷의 형태로 오는게 아니라, 호스트가(엄밀히 말하면 허브)D+/D- 라인을 둘 다 Low로 10 mSec 유지하면 디바이스가 이를 USB reset으로 인지하는 것이지요.
Commented by 바람처럼날다 at 2005/04/04 20:58
Device Descriptor의 Serial number string index에 관한 설명에 오류가 있어 정정하였습니다.
Commented by 너도나 at 2005/04/06 17:33
잼있는게 그냥 풀업만 해주시면 지가 인식된줄 알고 장치관리잔가 머시기 뜹니다. 참 컴터 무식하죠 ㅎㅎㅎ 똑똑한건가.. 훔..
Commented by 발칸 at 2005/04/22 10:59
좋은 강의 정말 감사드립니다.
Commented by 이기봉 at 2005/05/14 10:58
너무너무 감사합니다. ^^

복받으세요!
Commented by 정호영 at 2005/07/06 02:12
늦게나마보았지만 눈물흘리며 감사드립니다.
제가정말정말필요로 하던것들을 쏙쏙뽑아뽑아알려주시고~
감사합니다.정말감사합니다
Commented by .. at 2008/02/19 10:30
Descriptor length 가 Hex로 0x18로 되어 있는데 0x12가 아닌지요?
Commented by 정태우 at 2008/11/30 19:40
감사합니다. 자료 정말 감사합니다.
담에 술 한 잔 모실께요.

감사^&^
Commented by 락통령 at 2011/01/21 20:09
읽는사람은 잼나게 훌쩍 읽지만 이걸 준비하는 사람은 얼마나 많은 생각과 수정을 반복했을까~ 노력에 감탄하고 갑니다 ^^ 감사드립니다
Commented by 김동호 at 2012/04/18 10:27
감사합니다. USB에 대한 정보가 부족했는데 설명 너무 친절하네요^^
Commented by Mahavishnu at 2012/11/14 01:33
가려운 곳을 매우 시원하게 긁어주시는군요!
Commented by 주형찬 at 2014/12/07 07:31
usb가 궁금해서 공부하는중인데 설명이 너무 재미있고 쏙쏙들어옵니다.
PIC controller로 뭘 만들어볼 생각인데 아주 많은 도움이 되고 있습니다.
감사합니다.
Commented by 미녀딜러구경하기 at 2015/08/06 20:32
미녀딜러구경하기

집에서 즐기는 신개념 카..지..노 www.BOB1.UR.PE


24시간 운영, 항시 친절 상담원 대기


누적고객 1만 8천천명 돌파 특별 특별 이벤트 실시중


지금 접속 찬스를 잡으세요


======================================
스포츠..배.팅.사이트


스포츠배.팅.사이트. www.LTE-JOIN.COM 가입 코드 tatoo


스포츠경기 최소 한 경기부터 참여 가능.


누적회원 1만 4천명 돌파 기념 신규회원 4천원 제공중.


24시간 운영. 24시간 친절 상담원 대기.
Commented by 어이구 at 2016/10/18 16:37
USB 의 신님 감사합니다.
Commented by 배현주 at 2017/06/07 16:49
친절한 설명 감사합니다.

:         :

:

비공개 덧글

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