3 분 소요

원작 : http://blog.naver.com/chocochico

긁어 와서 올립니다. 아래분 블로그에서 나머지 꽤 많은 자료가 있습니다. 셈플입니다. usb driver 관련 잘 보고 배우세요

우선 본좌 소개 부텀 해야쥐.

본좌 드라이버 쓰는 사람이당.
(도라이바가 아니니 오해없길 바단당. 도라이바라고 읽은 행자는 후다닭 떠나주길 바란당. ㅋㅋㅋ)

그 중에서도 WDM 드라이버, 중에서도 USB 드라이버가 주 종목이당.
뭐 원래는 윈도우즈 프로그래밍으로 입에 풀칠 했었다.

드라이버를 공부하다보니 본좌의 의도와는 전혀 상관없이
예전에 취미삼아 지지던 인두도 들게되고, 팔자에 없는 아트웍도 하게 되더라.
다 본좌의 호주머니가 털어도 한점 티끌이 없는 관계로
몸빵 하느라 그랬당. -.-

에~. 드라이버란 놈이 유저 어플리케이션과 디바이스 사이의 인터페이스를 위해 존재하는 고로. 절대 혼자서 놀지 않는다.
따라서 본좌가 드라이버를 잘 썼다고 동네방네 소문내고 다닐려면 이 놈이랑 어울릴 어플리케이션과 디바이스가 꼭 같이 따라다녀야 한당.

이게 본좌 팔자에 없는 펌웨어, 아트웍에 손댄 이유당. 본좌가 만든 드라이버를 테스트 하려면 디바이스가 필요했던 것이었당.
(사실 본말이 전도 되었다. 현장에서는 디바이스를 돌릴려면 드라이버가 필요하다라고 말할 것이당. 아님 말고.)

이런 궁색한 이유로 펌웨어에 손댄 본좌는 펌웨어의 절대 고수가 못된다. 글고 그리되어서도 아니될 것이다.
본좌 혼자 북치고 장구치고 다 하려면 상품 하나 나오는데 기간이 복날 멍멍이 혀 늘어지듯 축~ 늘어날 것이닷.

아시다시피 좋은 상품을 저잣거리에 낼려면 어플리케이션, 드라이버, 펌웨어 프로그래머가 꿍짝이 잘 맞아야 한당.
(상품기획, 마케팅, 제조, 품질관리, 아트웍 등등등 다른 중요한건 쏙 빼고 말했당.)

우선 어플리케이션.
실력있는 어플리케이션 프로그래머가 되기는 어렵지만서도 누구나 쪼금씩은 다 한다.
특히나 USB디바이스를 위한 어플리케이션이라고 뭐 특별한 지식이나 테크닉이 필요한건 아니기 때문에, 본좌가 어플리케이션 프로그래머와 꿍짝맞추기는 꼬딱지 후비기당.

다음 디바이스.
시리얼 인터페이스로 디바이스를 구성하던 행자들이 좀 뽀대나는 걸 함 만들어 보자고 USB 펌웨어 그까이꺼~ 하고 달려들다가 시리얼을 배울때와는 달리 쫌 복잡하다느걸 알고 땀을 삐질 흘리게 된다. 고로 본좌와 한판 땡길 펌웨어 개발자는 전체 펌웨어개발자 수에 비하면 아직도 2프로 부족하다.

본좌. 2프로 부족하메 항상 목마름에 시달리던 차.
목마른 놈이 우물을 파라는 옛 성현의 계시를 받들어 USB 장치를 구상하는 개발자들을 천국의 문(?)으로 이끌 지팡이가 되고자 한다. ㅋㅋㅋ

본좌 무림에 전설로만 전해지는 비기를 행자들에게 살짝 보여주고 싶지만
그런건 없다. (있는데 본좌 내공이 부족해 모르는 걸 수도 있당 ㅋㅋㅋ)

사실 USB 디바이스 그 까이꺼 당.
모르면 어렵고 알면 쉽다는 말이 여기에도 그대로 적용된다.
따라서 본좌 열분이 USB의 세계로 첫 발을 디디도록
남는 시간을 쪼갠다.

USB 기능은 자신이 만들고자 하는 제품의 작은 부분일 뿐 전체가 될 수 없당.
(그냥 공부삼아 한번 만들어 본다면 얘기가 다르지만서두.)
따라서 칩을 선택할 때, 자신이 구현하고자 하는 기능을 가진 칩들을 먼저 고르고
그 중에 USB 기능을 가진 것을 고르거나,
그런 기능이 없다면 자신이 외부 회로를 덧붙이는 방식을 취하는 것이 좋다.
라고 본좌 강력히 주장한다.

본좌 꼴린대로 USB칩들의 카테고리를 세개로 나눠본다.\

  1. SIE 기능만 가진 칩\
  2. 범용 MPU에 SIE가 부가된 칩\
  3. 전문화된 기능에 SIE를 가진 칩

우선 SIE 가 몬지 살짝 밟아주고 넘어가야 쓰겠당.
SIE : Serial Interface Engine
Serial이 나왔다고 RS232 이런거 연상하지 말기 바란다.
USB도 직렬 통신을 한다. 데이타를 보낼때 한 바이트나 워드 씩 우르르 보내는거이 아니라
한 비트씩 보낸다는 말쌈이닷.(본좌의 친절이 너무 지나친강?)
SIE는 USB 프로토콜을 준수하며 통신을 하기 위해 만들어논 회로 덩어리 라 하겠다.
“프로토콜” 이 말이 나오니 지레 겁먹고 오줌 지리는 행자들.
걱정 마시라 본좌도 복잡한것만 보면 두드러기가 난다.
따라서 행자들에게도 절대 이리저리 베베꼬아 설명 못한다.

자~ 위에서 카테고리를 나눠 놨으니 이번엔 그 항목들을 후벼보잣. 예도 좀 들면서

첫번째. SIE 기능만 가진 칩
대표적인게 필립스의 PDIUSBD12 이당. Philips USB Peripheral controllers
이 넘은 SIE에 다가 데이터 버퍼로 FIFO만 가진 놈이다. 이걸 가지고 USB 통신을 하려면 옆에 Microprosessor를 붙여서 이 넘에게 이래라 저래라 명령을 해 주어야 한다.

두번째. 범용 MPU에 SIE가 부가된 칩
이 넘들은 SIE와 Microprosessor를 하나의 칩안에 쑤셔넣은 것들로
대표적인게 CYPRESS의 FX2( CY7C68013 )이다.
CYPRESS High Speed Peripheral
이넘은 8051 코어에 SIE, FIFO, GPIF를 가진 놈이다(GPIF가 몬지는 나중에 까발린다.)

세번째. 전문화된 기능에 SIE를 가진 칩
MP3, 휴대폰, 키보드, 마우스 등등등 허벌나게 많은 것들이 USB 통신을 할 수 있다.
보통 이런 것들은 자신의 특화된 기능을 가지고 있다.
뭐 이런 기능을 구현하기 위해 Microprosessor를 가지고 있으니 본질적으로는 두번째와 같다고 할 수 있겠다. 다른 점이 있다면 I/O 포트 정도.
대표적인게 FTDI Chip의 FT232BM 되겠다.
FTDI Chip Products
이 칩은 UART와 USB를 변환시켜주는 기능을 가진 칩이 되겠다.
기존에 UART로 통신하던 보드에 간편하게 USB기능을 부여할려면 이 칩이 딱이닷.

본좌. 세가지 예밖에 들 수 없다.
왜냐면 USB 칩들은 너무나도 많아서 다 언급할려면 귀찮기 때문이다.
인터넷 디벼보라. 우르르 쏟아진다.
따라서 본좌가 앞으로 강의에 쓸 세가지 칩만 소개한다.
사실 한두개만 해보고 나면 나머지는 다 거기서 거기다.

이미 강력한 Microprosessor를 가지고 있는 보드에 USB를 구현하기 위해, 두번째 경우의 칩을 붙이는 것은 낭비이기 때문에 (뭐 듀얼 CPU도 아니고 말이다.) 첫번째 카테고리의 칩을 쓰는 것이고.
Microprosessor에 시킬 일이 뭐 딱히 내세울게 없는 보드를 만들때는 두번째 카테고리의 칩을 선뜻 집어도 되겠당.
세번째는 뻔하니깐 생략.

칩 선택 - 아주 중요하다.
자신이 구현할 기능에 대한 정의가 끝났다면
거기에 적합한 칩을 선정하는데 시간과 정력을 아낌없이 투자하자.
나중에 “이 산이 아니게벼” 하면 정말 곤란하다.