USB 장난감 (TUSB3210) 만들기

PC를 이용해 외부세계와 데이터를 주고 받는 통로는 굉장히 많다.
그중 RS-232나 병렬포트를 이용해 Embedded System용 ISP나 Byte blaster,
JTAG 에뮬레이터등을 자작해 써왔지만 어느새 부턴가 이 구식의 저속
인테페이스가 PC에서 사라지고 있다.

ISA 버스에서 동작하는 내 롬라이터, 병렬포트를 사용해 만든 롬 에뮬레이터,
AVR프로그래머, 바이트블라스터, Altera 프로그래머, Xilinx 프로그래머, ARM용
JTAG 에뮬레이터, 직렬포트를 이용해 만든 PIC 프로그래머 등등...

헝그리 개발자라면 하나씩 가지고 있을 법한 자작 개발 하드웨어 툴들이
무용지물이 되어 가고 있다.. 열심히 땜질해서 만들어 놓은 것들인데.. 슬프다...

한참 늦었지만 이제 USB를 써보자..

PC에 널리고 널린 USB 자원을 쓸려면 USB 클라이언트 디바이스가 필요하다.
시중에 USB 장치를 개발 할 수 있는 킷트들은 많이 나와있다. 돈주고 사면
기술 지원도 빠방하게 잘 해준다..
나같이 돈이 궁한 개발자는 이거 살돈도 궁하다.. 크크..
그래서 만들었다..

우선 ti사 홈페이지에 들어가서 USB 클라이언트 디바이스 샘플을 구한다.
얘네들은 자기들이 만든 디바이스중 일부를 무료 샘플로 제공한다.
배송비까지 직접 부담하고 보내준다.. 참 고마운 회사다.. 흐흐..

우선 TUSB3210이라는 USB 클라이언트 디바이스와 3.3V 레귤레이터를
샘플로 신청해서 받는다.

그리고 회로 설계...
일단 USB 디바이스를 이용해 거창하게 뭘 하려 하기보단 우선 윈도우즈 어플리케이션,
윈도우즈 디바이스 드라이버 그리고 TUSB3210 펌웨어 연동을 LED로 기본 테스트를 진행 할 수 있게
간단하게 회로를 꾸민다.
TUSB3210에 UART 단자가 있으니 뽑아내서 디버깅 용으로 활용 하면 디바이스 드라이버 개발 등이
훨씬 수월해 질 것이다.

회로도가 완성이 되었으면 아트웍을 진행 한다. 열심히...
근데 TUSB3210 풋프린트 라이브러리를 발로 만들어서 핀 간격이 좀 안맞는다..
이 문제는 다음 제작때 수정.

아트웍이 다되면 레이저프린터와 다리미를 이용한 최첨단 열전사 기법으로
패턴을 동판 PCB로 옮긴다.
눈치가 빠른 분이라면 알아 채셨겠지만 보시다 시피 처음 제작시 반전하여 인쇄하지 않아
실패했던 사진이다. 수정후 찍은 사진이 없어 이걸로 퉁~~

패턴이 옮겨진 동판 PCB를 에칭한다. (해골 그림이 예술이군...)

에칭이 완료되고 나면 단락검사를 해서 끊어졌으면
붙여주고 붙어있으면 떼어 준다.

부품 삽입 (구멍 뚫을 드릴날이 없어서 그냥 위에다 붙일 수 있게 아트웍 했다, 아~ 이 가난..)

부품 삽입후 PC USB단자에 바로 들이대지 말고
외부 전원으로 5V만 인가해서 전원부 검사를 먼저 수행 한다.
전원 검사가 끝나면 PC에 연결해서 새로운 장치가 인식이 되는지 본다.

TUSB3210 디바이스는 내부에 8051 코어가 들어 있으며 8051코어용 펌웨어는
램에 저장된다. 램에 저장되어 실행되는 펌웨어는 USB를 통해 다운로드 할 수 도 있고
외부에 시리얼 EEPROM을 달아 그것을 이용해 넣어 줄 수 도있다.

USB를 통해 펌웨어를 다운로드 할 경우 TUSB3210내부에 기본적으로 박혀있는 VID/PID를 사용하며
직접 만들어서 써도 되지만 TI사에서 제공하는 apploader라는게 있다 (ti홈페이지에서 다운로드가능).
요놈이 하는 일은 TUSB3210에 디폴트로 내부 롬에 박혀있는 VID/PID를 이용해 드라이버를 인스톨하고
내부 8051코어용 펌웨어를 다운로드만 해주는 역할을 한다.
그러니 개발자는 8051코어용 펌웨어만 만들어서 적절한 위치 (c:\windows\system32\drivers)에 복사만 해주면
TUSB3210을 USB에 꽂을 때마다 다운로드 해준다.

준비가 됐으니 코딩을 시작 하자.
코딩 순서는 TUSB3210내부 8051코어용 펌웨어, 디바이스 드라이버, 어플리케이션 순으로 한다.

8051코어용 펌웨어 코딩을 할려면 TUSB3210 데이터 시트를 비롯해 관련 문서들을 무쟈게
찾아 봐야 한다.

윈도우즈용 디바이스 드라이버 코딩을 할려면 관련 문서들과 자료들을 무쟈게x153배 봐야 한다.
(리눅스 디바이스 드라이버보다 배는 복잡한게 윈도우즈 디바이스 드라이버 모델인것 같다)

어플리케이션 코딩을 할려면... 음...

음...
잠시 눈을 감았다 뜨니 요놈이 떡하고 동작을 한다..
허허 세상에 이런일이...

깜빡이는 2개 LED중 왼쪽은 8051코어 자체적으로 구동하는 것이고
오른쪽 2초 주기로 깜빡이는 LED는 어플리케이션 -> 디바이스 드라이버 -> USB bus -> TUSB3210의
길을 따라 움직이는 제어 패킷으로 구동되는 것이다.

개발 PC의 좌상단은 TUSB3210의 UART를 이용해 TUSB3210의 내부 8051코어의 디버깅 메시지 모니터링용이고
화면 좌하단은 dbgview를 이용한 디바이스 드라이버의 디버깅 메시지 모니터링 용이다.
오른쪽 검은 창은 3가지 소스(app,sys,firmware) 빌드 겸 어플리케이션 디버깅 메시지 모니터링용이다.

참 쉽죠?