AD converter/Serial Parallel/SCSI/GPIB 변환장치 USB 인터페이스 장치의 설계
(주)동역메카트로닉스연구소 기술분석팀 편저 B5/257P
PC의 주변 인터페이스로서 그 동안 serial port(RS-232C)와 parallel port(Centronics)를 주로 이용해 왔는데, 어느 것이나 전송속도가 느리다는 점과, 하나의 포트에 하나의 디바이스밖에 접속할 수 없기 때문에 여러 디바이스를 접속하기 위해서는 포트수를 증가시켜야 한다는 문제점이 있었다. 그 이외에도 키보드, 마우스, 디스플레이 등은 개별 포트를 가지고 있어서, PC의 뒷면에는 각종 커넥터로 채워져 있다. 이들의 인터페이스를 통합하여 하나의 커넥터로 각종 주변기기를 접속할 수 있도록 한 것이 USB(Universal Serial Bus)이다. USB는 기존의 PC와 주변기기간의 인터페이스를 통합해 나가는 것을 목적으로, Compaq, Intel, Microsoft, NEC의 엔지니어들이 모여서 차세대의 주변 인터페이스에 대해 공동연구를 시작한 것이 USB 탄생의 기원이다. 게다가, DEC, IBM, Northern Telecom사가 개발에 합류하여 모두 7 회사에 의해 1995년에 0.9판의 사양서가 발행됨으로써 USB의 정체가 공개되었고, USB의 보급을 목표로 하는 추진 단체인 USB Implementers Forum도 설립되어, 가장 유력한 차세대 표준 주변 인터페이스로서 급속히 주목받게 되었다. 1996년 정식 기능 사양서인 USB1.0 버전이 공개됨과 동시에, 컨트롤러 LSI가 제품화되고, 비로소 PC에 USB를 장비할 수 있는 환경이 갖추어졌다. USB1.0 버전은 12Mbps(full speed)로 저속부터 중속분야의 어떤 특정한 기기를 대상으로 하지 않고, 각종 기기를 혼재할 수 있다. 즉, 모뎀이나 프린터 등의 종래의 주변기기뿐만 아니라, 전화나 오디오기기와 같은 가정용 멀티미디어 기기의 데이터, 음성 등을 리얼타임으로 전송할 수 있는 사양으로 되어 있다. 단, 화상 데이터의 리얼타임 전송에는 전송속도가 부족하여 멀티미디어로서는 저속용으로 한정되어 그 한계를 드러냈다. 그래서, 스캐너, 디지털카메라와 같은 화상기기나 대용량 스토리지 등, 고속의 멀티미디어용 인터페이스로는 IEEE1394 등의 다른 인터페이스와 함께 사용하는 것을 생각하게 되었으나, 1999년 10월, USB2.0이 등장함과 동시에, 480Mbps(high speed)라는 초고속 전송이 가능해짐에 따라 이러한 문제가 말끔히 해결되었다. 본서는 활용 범위가 급속히 확대되고 있는 USB 인터페이스용 응용장치를 설계하기 위한 기초적이고 실무적인 USB 타켓 디바이스 제작 기법 해설과, USB와 다른 인터페이스간의 상호 변환을 하기 위한 각종 컨트롤러 어댑터를 설계한 사례를 철저히 분석하여 연구개발 엔지니어가 여러 형태로 응용할 수 있도록, 소스와 회로도 공개, 세부적인 내용을 실무 중심으로 해설하고 있다. 더 구체적으로 살펴보면, 제1부에서는, USB 기술의 입문편으로, USB의 탄생 배경과 기본규격에 대한 해설과, USB 전용 마이크로컨트롤러를 활용하기 위한 응용사례로, 마우스, 게임패드, 키보드, 조이스틱 등의 HID(Human Interface Device)로 특화된 사이프레스사의 CY7C63000에 대해 해설한다. 이어서, 멀티채널 재생/녹음 시스템을 실현할 수 있는 텍사스 인스트루먼트(TI)사의 USB 인터페이스 접속용 오디오 데이터 컨트롤러 TUSB3200과, 내셔널세미컨덕터사의 USB 타겟 컨트롤러 USBN 9602 및 USB 인터페이스 대응 스테레오 오디오용 D-A 컨버터 PCM2702를 소개한다. 그리고 기본 설계기술로서, USB 전용 컨트롤러 CY7C63000 시리즈를 이용한 USB 키보드와 마우스의 설계 기법을 자세하게 소개한다. 또한, PC의 Windows를 이용하여 USB로 데이터 액세스를 시험해 보거나, USB에 관한 공부를 시작하는 사람을 위한 입문 tool인 Cypress사의 USB starter kit를 소개하고 사용법과 그 체험담을 소개한다. 제2부에서는 응용편으로, PC의 USB 포트를 이용하여, 기존의 다른 인터페이스 장치를 구동하기 위한 각종 컨트롤러 어댑터의 설계 사례를 알기 쉽게 철저히 해설한다. 먼저, Sony사의 Play Station(PS)용의 아날로그 컨트롤러를 사용한 예를 들어서, PS용 게임 컨트롤러와 마우스의 두 가지 기능 실현이 가능한 USB 게임 컨트롤러 어댑터 설계 사례, 고속 데이터 수집 시스템에 적합한 USB A-D 컨버터의 설계 사례, CPU를 사용한 인텔리전트 USB 패럴럴 I/O 인터페이스 어댑터의 설계 사례, USB 포트를 범용 패럴렐 포트로서 사용할 수 있는 USB- 패럴렐 I/O 보드의 설계 사례, 회로구성이 심플하고, 확장이 용이한 USB-시리얼 인터페이스(EIA-574) 통신 어댑터와 USB-SCSI 통신 어댑터 및 USB-GPIB 통신 어댑터의 설계 사례 등을, 소스와 회로도를 공개하고 자세히 해설하고 있다.
USB의 탄생과 개요, USB의 특징, 금후의 USB 보급 전망, USB의 학습 키트(USB 컨트롤러를 내장한 마이컴 보드의 입수, USB 컨트롤의 지식)
USB 시스템의 구성과 물리적 사양: USB의 구성과 커뮤니케이션의 흐름, USB의 접속 토폴러지, USB 커뮤니케이션 흐름, end-point, 파이프
USB 케이블과 커넥터의 구조와 사양: USB의 전기적 특성(USB의 DC 전기특성, USB의 데이터 전송속도와 AC 전기특성, 전송속도의 검출)
USB의 데이터 전송과 프로토콜: 데이터 전송의 개요, 파이프와 엔드포인트, USB에 있어서 데이터 처리의 흐름, USB의 전송 모드(isochronous 전송, 벌크 전송, 인터럽트 전송, 컨트롤 전송), full speed와 low speed, USB의 데이터 전송 프로토콜
데이터의 전송 포맷 해설(frame, transaction, packet):
패킷(packet): SOF(Start Of Frame) packet, token packet, data packet, handshake packet
transaction: bulk/interrupt transaction, isochronous transaction, control transaction
전원제어와 USB 시스템의 구성 사례: 전원의 공급, USB 디바이스의 전원 제어, USB 시스템의 구성 사례(PC측의 구성 사례, 주변기기측의 구성 사례)
USB의 디바이스 드라이버와 개발 툴 및 기타: 디바이스 클래스, 개발 tool, USB hub
DMA 전송, 컨트롤러의 동작 상태, end point, 저소비전력 모드, 레지스터, USBN 9603에 대하여, USB 인터페이스 대응
스테레오 오디오용 D-A 컨버터 PCM2702의 특징, 블록다이어그램과 각 부분의 동작(OSC부 및 USB 클록 제너레이터부, SPACT부, 오디오 클록 제너레이터부, D-A 컨버터부, PCM2702의 스펙, USB 오디오 기능
평가 보드 DEM-PCM2702의 기능과 특성 평가와 실측 결과
USB 전용 컨트롤러에 의한 HID 설계 사례 ■ USB 키보드와 마우스의 설계 기법
USB 마우스의 설계: 마우스의 구조, USB 마우스의 하드웨어(클록회로, USB 인터페이스, 포토트랜지스터/LED와의 인터페이스, 마우스 버튼의 입력회로, Cext 입력, VPP)
USB용 조이스틱과 키보드의 설계 사례: 조이스틱에 응용한 사례, USB 키보드의 설계 사례
USB의 디바이스 및 인터페이스 프로그램 사례: USB 디바이스용 프로그램, 각종 범용 I/O 포트의 사용 예, 스위치 입력을 판독하기 위한 프로그램의 예, 스위치 매트릭스의 스캔, LED의 휘도조절, 포토트랜지스터의 감도조정 프로그램의 예, 퍼텐쇼미터의 저항값 판독 프로그램의 예
USB와의 인터페이스 프로그램: device plug-in, bus reset, enumeration
Cypress사 kit로 오리지널 USB 디바이스의 제작 ■ USB Starter kit의 사용법과 체험
USB starter kit CY3640의 개요와 내용: CD-ROM, USB Thermometer 평가용 기판, PROM 라이터
애플리케이션의 인스톨과 기능 설명: 인스톨 순서, 애플리케이션의 기능, 샘플 프로그램의 통신 방법, starter kit의 tool류
오리지널 USB 디바이스의 제작, 키트에 부속된 샘플 프로그램의 소스, trip counter 회로의 동작, pulse counter, 시간 경과 데이터, speed pulse의 검출 루틴
윈도우 애플리케이션, starter kit 사용시에 발생한 현상
제2부(응용설계편): USB 인터페이스 장치의 응용설계
device request, descriptor의 이해 ■ USB 게임 컨트롤러 어댑터의 설계
USB의 디바이스 인식에 대한 기초지식: device request와 descriptor의 이해(컨트롤 전송, device request, descriptor), Human Interface Device (HID)
PS용 아날로그 컨트롤러: PS용 아날로그 컨트롤러의 내부 및 결선, 프로토콜에 대하여
인터페이스의 구성과 하드웨어 및 개발환경: PIC-USB 컨트롤러간의 인터페이스(동기 시리얼 인터페이스, Microwire 인터페이스)
마이크로컴퓨터 보드의 주변 하드웨어, PS용 컨트롤러와의 인터페이스, 프로그램의 개발 환경과 순서, 데이터 전송의 동작
프로그램의 구성과 리스트 해설: 메인루틴 프로그램(PIC16F877의 초기화, USBN9602의 초기화), 인터럽트(INT 외부 인터럽트, 타이머 인터럽트, 시리얼 인터럽트)
디스크립터: device descriptor, configuration descriptor, interface descriptor, HID descriptor, end point descriptor, 파이프와 엔드포인트, report descriptor
plug & play 동작: 컨트롤러의 설정, descriptor의 문의, PIC의 descriptor 처리
PS용 컨트롤러의 사용법과 디바이스 기능 변경: 디바이스의 인식, 동작 체크, PS용 에뮬레이션 소프트웨어의 실행, 마우스 기능의 실현
8비트 마이크로컨트롤러와 USBN9602에 의한 ■ USB용 A-D 컨버터의 설계
설계 제작한 A-D 컨버터의 하드웨어 구성: USB 내장 마이컴 보드 UB-H8-256의 회로, UB-H8-256의 외부 접속, Bus power 사양으로 변경
소프트웨어 해설과 동작 실험: 전체 프로그램의 흐름, H8/3048F 측의 프로그램 해설(메인 루틴, 파이프 1에 의한 호스트로부터 명령 데이터 전송, 커맨드의 해석, 파이프 2에 의한 호스트의 데이터 수신, A-D 변환, DMA 전송, 버스 파워, 디스크립터, configuration descriptor, end point
호스트 측의 프로그램(form load, timer interrupt routine), 디바이스 드라이버, 소프트웨어의 개발, 프로그램의 실행, 동작 실험, 전송속도, 저소비전력 모드
PIC 마이컴과 USBN9602에 의한 ■ USB용 패럴렐 I/O 어댑터의 설계
인텔리전트 I/O 어댑터의 개요와 하드웨어 해설: I/O 단자, 어댑터 회로, 버스 파워 사양에 대한 변경점, PC와 I/O 어댑터의 입출력 관계, 데이터 입출력의 순서
프로그램 해설과 디스크립터: PIC16F877의 프로그램(메인 루틴, 파이프 1에 의한 호스트로부터 명령 데이터 전송, 파이프 2에 의한 호스트의 데이터 수신, 파이프 3에 의한 호스트로부터의 데이터 전송)
디스크립터: device descriptor, configuration descriptor, interface descriptor, end point
호스트 측의 프로그래밍, device driver의 내장, VB 애플리케이션의 실행, USB 케이블을 접속한 그대로 개발
USB 내장 8비트 RISC 마이컴을 사용한 ■ USB-패럴렐 I/O 보드의 설계
USB-패럴렐 I/O 보드의 개요와 개발 환경: 본 장치의 용도, USB의 vendor ID와 product ID
USB starter kit에 의한 개발 환경: Cypress사 USB starter kit의 입수, Windows용 DDK(Driver Development Kit)의 입수, C 컴파일러의 개발 환경
I/O 보드의 하드웨어 설계: I/O 보드를 제작하기까지의 순서(HEX 파일의 써넣기, CY7C63001의 plug-in 테스트, 부품의 실장)
I/O에 대한 액세스 방법(Win32API 커맨드를 이용하여 액세스, 디바이스 드라이버의 액세스 배리에이션), 동작을 체크하기 위한 시험회로(LED의 점등 상태로 I/O 출력을 체크, 각 비트에 대응한 스위치를 조작하여 I/O 입력을 체크)