|
어제
우리의 디바이스가 이력서(디바이스 디스크립터, Device Descriptor)를 제출하고 막이 내렸었다. 지금부터 1막2장 이다. 디바이스 디스크립터의 맨 마지막 항목이 0x01 Number of configurations 였다. 이 말은 컨피규레이션 디스크립터(Configuration Descriptor)가 하나 있다는 말이다. 이 컨피규레이션 디스크립터가 모냐 하면 (아 한글로 쓰니 댑따 이상하당. 담부턴 기냥 영어로 써야쥐.) 비유를 하자면 디바이스 디스크립터가 사람이라고 하면 Configuration descriptor는 옷 이라고 비유 할 수 있다. 행자들이 날마다 옷을 바꿔 입듯이 디바이스도 배트맨 옷을 입을 수도 있고, 슈퍼맨 옷을 입을 수도 있고 투명 망토도 입을 수 있다. 그런 옷을 갈아 입을 때마다 배트맨도 되고, 슈퍼맨도 되고, 해리포터도 된다는 말쌈이다. 근데 보통은 배트맨은 배트맨 옷만 입고, 슈퍼맨은 슈퍼맨 옷만 입듯이 이 Configuration Descriptor도 보통 디바이스들은 하나씩만 가진다. 이 Configuration 디스크립터도 디바이스 디스크립터처럼 여러 개의 항목을 가지지만, 다 쓸데 없고 주 용도는 파워는 어떻게 공급받으며, 얼마를 소모하는가를 호스트에게 알려주기 위함이다. 보통의 USB 장치는 포트를 통해 전원을 공급받지만, USB 하드디스크처럼 500mA(앞에서 언급했다.)만 가지고는 배가 고픈 식충이들은 외부에서 전원을 공급해주어야 한다. 또, USB 포트를 통해 전원을 공급받는 경우는 자신이 얼마만큼의 전원을 소비하는지를 알려주어야 호스트가 적절하게 대응할 수 있다. 어떤 때는 포트전원만 쓰다가, 어떤 때는 외부전원을 쓰는 디바이스는 당삼 Configuration 디스크립터를 두 개 가진다. 근데, 그런 장치가 있나? 얼렁 생각이 안 나는걸 보니 흔치는 않은 모냥이닷. 이제 우리는 Device Desscriptor와 Configuration Descriptor를 알았다. 그게 다인 것 같은가? ㅋㅋㅋ 더 있다. (그림을 클릭해서 휜색 바탕에서 보시라. 배경색땜에 깜장선이 잘 안보인닷.) ![]() 보라 두개 외에 Interface Descriptors Endpoint Descriptors (String Descriptors) 가 더 있다. 인터페이스 디스크립터(Interface Descriptor)를 설렁 설명하고 오늘의 하이라이뚜 엔드포인트 디스크립터(Endpoint Descriptor)로 넘어가자 인터페이스 디스크립터도 여러 개의 항목을 가지지만 뺄껀 빼고 요점만 설명하면 자기의 직업은 뭔지, 또 자기가 가진 연장은 몇 개인지를 호스트에게 알린다. 디바이스가 Mass Storage Class(저장장치)인지, Human Input Device(입력장치인지) 등등등이 디바이스의 직업이 되겠꼬 연장이라 함은 그 직업을 수행하기 위해 필요한 Endpoint가 되겠따. 쪼기 위의 그림에서 알 수 있듯이 하나의 Configuration Descriptor아래에는 여러 개의 Interface Descriptor가 딸려 있을 수 있다. 이 말은 슈퍼맨이 어떤 때는 신문기자 클라크일 수도 있꼬, 어떤때는 슈퍼맨이 되었다가 크립토나이트 광선을 맞으면 비실이가 되는 것과 같은 이치이다. USB 디바이스를 하나 만들었는데 이넘이 어떤 때는 이동식 저장장치로, 어떤 때는 USB 카메라로 동작하게끔 하려면 Interface Descriptor를 두 개 써넣어야 하것따. 쫌 더 자세하고 덜 친절한 설명을 보려면 http://www.beyondlogic.org/usbnutshell/usb5.htm#InterfaceDescriptors를 참조하시라. 엔드포인트 디스크립터(Endpoint Descriptor) 이거를 설명할라고 봄부터 소쩍새가 졸라 울었떤 거시다. 엔드포인트 이것은 호스트와 디바이스간의 통신이 이루어지는 실제 통로이다. 당삼 엔드포인트 디스크립터는 이 엔드포인트를 설명한 설명서가 되겠꼬. 벌써 눈치 챘겟지만 이 엔드포인트도 여러 개가 있을 수 있다. 또, USB 장치라면 최소한 하나는 있어야 한다. 이름하야 엔드뽀인뚜 0번 이 0번 엔드포인트(Endpoint)는 디폴트 컨트롤 엔드포인트라고 불리기도 한다. 바로 전 강좌에서 언급했듯이 디바이스가 포트에 끼워지면 호스트가 맨 처음 이 0번 엔드포인트를 통해 디바이스에게 말을 건다. 넌 누구냐? ![]() 두번 우려먹으니 썰렁한가? 흠. 이 0번(디폴트 컨트롤) 엔드포인트는 호스트가 디바이스에게 이래라 저래라 명령을 내리는 통로다. 따라서 호스트 말을 듣기 싫으면 이 0번 엔드포인트에서 오는 명령을 생까버리면 된다. 그럼 행자도 짐싸서 회사를 떠나야 할 것이다. ㅋㅋㅋ 짐싸기 싫으면 0번 엔드포인트에서 오는 명령을 재깍재깍 수행하도록 펌웨어를 작성하자. 알~겠느냐~? 엔드포인트의 종류가 네개가 있는데, 하나는 이미 설명한 컨트롤 엔드포인트이고, 나머지는 인터럽트(Interrupt), 벌크(Bulk), 아이소크로너스(Isochronous) 엔드포인트이다. 간단히 설명하자면 컨트롤 엔드포인트는 다른 엔드포인트와는 달리 양방향 통신을 한다. 인터럽트(Interrupt) 엔드포인트는 통신이 도착하면 인터럽트가 걸려서 알려주는 그 인터럽트랑 상관없는 기냥 일정시간 마다 비교적 적은 데이터 량의 통신이 이루어지는 엔드포인트 이다. USB 키보드, 마우스 이딴거 만들 때 쓰인다. 벌크(Bulk) 엔드포인트는 허벌나게 많은 양의 데이터를 시간구애 받지 않고 정확히 전달하고자 할 때 쓰이는 엔드포인트이다. 대표적으로 USB 저장장치에 활용한다. 아이소크로너스(Isochronous) 엔드포인트는 많은 양의 데이터를 정해진 시간 안에 전달하기 위한 엔드포인트이다. 대신 데이터의 무결성은 보장하지 않는다. USB 캠, USB 스피커 이딴데 쓴다. 생각해 봐라 USB 캠에서 호스트로 동영상 이미지 전송하는데 한 두 픽셀 깨졌다고 표시나 나겠는가? 더 자세한 것은 필요할 때, 그때 그때 배우도록 하자 사족을 붙이자면 Enpoint를 파이프(Pipe)라 부르기도 한다. 오늘도 역시나 뜬구름 잡는 소리였따만 다음엔 펌웨어 코드로 들어가 보도록 하자. 다들 미리 요걸 따운 받아 설치해 놓자. 링크가 안열리는 행자는 여기로 직접가서 “SETUP_FX2LP_DVK_1004.exe ”를 다운받으시라. 그리고, 다운받아서 설치할 때, Keil Complier가 안 설치되 있는 행자들은 그것도 같이 설치하시라.
|
카테고리
메모장
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 이글루스 | |||