|
오늘은 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 호스트”라 하겠당.) 호스트는 디바이스에게 묻는다.
-To be Continue- 여기까지가 오늘 설명할 시나리오다. 디바이스의 이력서인 디바이스 디스크립터(device descriptor)에는 다음과 같은 항목들이 들어 있다.
이게 디바이스 디스크립터의 내용이다. 디바이스가 호스트에게 이 디스크립터를 보낼 때는 본좌처럼 친절하게 설명하지 않고, 기냥 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란게 뭔지를 함 뒤벼바야겠다. 지금은 이 첨보는 용어들하며 뭐가 몬지 잘 모르겠지만 몇 번 듣고 나면 윤곽이 서서히 잡힐게다. 걱정마라.
|
카테고리
메모장
UniHigh(FX2) Q&A WDM 드라이버(Driver) USB 개발 모듈(module) 장치(Device) High Speed 자작 강좌(강의) 전문가 CYPRESS CY7C68013 FTDI PHILIPS 최근 등록된 덧글
재미있게 쓰셨네요. 도움..
by 김찬 at 11/23 EP2CFG = 0xA2; S.. by 감사~ㅋ at 06/26 하드웨어 구매는 어떻게.. by 하니 at 06/22 강좌 감사합니다 by 하니 at 06/22 쉽게 설명해 주셔서 이해.. by 윤여준 at 05/13 전원부 회로에서 R4 100K.. by 푸른날개 at 02/26 머리가 한계를 느끼기 .. by 어리버리 관절염 at 02/19 검색하다 우연히 들렀습.. by bongpal2 at 02/01 감사합니다. 자료 정말 .. by 정태우 at 11/30 olo 강의 볼때마다 잡는.. by 까불이 at 10/11 skin by 이글루스 | |||