FT245AM을 사용한 USB 인터페이스 설계

AVR Project 조회 수 17618 추천 수 69 2003.12.23 11:17:01


http://www.eix.co.uk/Ethernet/USB/
FT245AM을 사용한 USB 인터페이스 설계

USb는 생각보다 빠르다.
USB는 PC의 저속에서 중속의 주변장치에서 새로운 방법을 제공한다.
새로운 USB 표준은 RS232C와 비교하면 보다 완전하다.
PC로 통신을 하려는 제품에서 설계자가 USB 추가성능을 위해서는 빠르지 않다,
다행히 이환경은 바뀌었다. 이것을 쉽게 만드는 새로운 소자가 있다.
이 경우에, 지금 당신은 USB에 대한 모든 것은 필요하지 않다.

기사의 항목 1에서, 나는 매우 기본적인 USB와 그것이 어떻게 작동하는지 간단히 보여줄 것이다.
기사의 항목 2에서, 나는 실제의 예로 사용할 것이다,
간단한 오실로 스코프의 usb설계를 예로, 얼마나 쉬운지를 보여준다.

USB는 무었인가 - 간결하게
어느 USB의 세부적인 내부작동도 설명하지 않을 것이다
이것을 위해서, Tom Wong이 구축한 훌륭한 기사를 참조한다.
응용설계는 적당한 비율로 여기를 설명(cover)할 것이다.    
USB는 시분할 직렬 데이터열을 사용한다.
PC는 모기로써 연결된 모든 주변장치를 표준간격인 1ms마다 폴링한다.
하나의 주변장치는 1ms 프레임 이내로,
그들에게 배정된 시간안에 시분할 버스에서 놓여진 데이터로 응답한다.
버스는 127개의 소자까지 구분(addressing)한다.

현재의 버전 USB V1.1은 2개의 속도모드를 지원한다. (12Mbit/s와 1.5Mbit/s)
그들은 전원으로 풀업된 하나의 데이터선으로 하드웨어에서 선택된다.
2개의 속도는 함께 살아 갈수 있다.
빠르고 느린 속도의 버스트(bursts)는 같은 선에서 공존(co-exist)한다.
USB는 4선 케이블 방식을 사용한다.
2개의 선은 전원(5V와 GND)으로 사용한다.
다른 2개의 선은 차동 데이터이다.
불평형 데이터패턴은 특별한 마지막 코드를 사용한다.
물리적인 차동 연결은 상향 데이터열(upstream)과
하향 데이터열(downstream)로 사용된다.
이것은 사용자의 혼동을 회피토록 한다.

그림 1


USb 콘넥터는 A와 B로 알려져 있으며,  안쪽이 막힌것 같은,
핀1과 핀4의 전원공급선은 다른 2개의 데이터보다 조금 길다.      
데이터선이 접속되기 전에 전원선이 먼저 접속된다.
이것은 전기적인 충격에 대한 손실을 줄여준다.

주변장치들은 직접 연결되어 있지 않다.
그러나 PC에서 3개의 허므를 경유하여 연결된다  
표준 PC는 백플랜(메인보드) 위에 2개의 USB소켓을 지원하는 허브를 가지고 있다.
만일 더 많은 USB주변장치의 첨부가 필요하면,
외부 허브를 구하거나 PC에 남은 스페어 포트를 연결해야 한다.
그러면 주변장치는 새로운 허브에 연결된다.
이미 새로운 USB 표준이 Ver2로 되어 있으며,
제공된 Ver1.1을 중심으로 설명할 것이다.

프로토콜은 이미 전술한 것과 같이,
PC로 부터 호출을 위한 모든 요청과 함께, USB는 단일 마스터 버스이다.  
데이터는 1ms 분리된 프레임의 패킷 버스트로 전송된다.
저속장치는 1.5Mbps의 속도로 작동되며 비트 폭은 667nS이다.
고속장치는 12Mbps로 작동되며 비트폭은 83.3nS이다.
USB 주변장치는 그들의 출력으로 프레임 시작이 동기된다.
내부 버퍼는 일반적으로 데이터의 상수흐름(constant flow)이 포함되야 한다.
비트속도는 NRZI로 변조된 데이터스트림 그림2로 부터 재생된다.



모든 USB 전송규칙은 PC에서 초기화된 1ms 이내의 프레임이다.
시분할 분배는 패킷으로 분리되거나 다른 소스로 부터의 단위프레임으로 사용된다.
표준적인 USB주변장치는 많은 종단(endpoint)을 갖는다.
종단은 같은 주소로 공유어 있는 또 다른 목적지는 아니다.
다른 종단은 초기화 및 제어와 데이터 전송에 사용될 수 있다.
USB는 PC에서 다른 종단으로 파이프라는 데이터 전송법이 사용된다.
데이터 전송속도를 증가시키려면,
주변장치는 한번에 하나 이상의 파이프를 소비하기도 한다.
PC와 주변장치의 사이에는 4개의 기본적인 전송안내 방식이 있다.

제어 - 전송:
주변장치로 전송제어신호의 송신에 대부분 사용된다.
높은 우선순위와 내장된 오류정정 보호가 있다.
대부분 초기화 정보의 전송에 사용된다.
저속도 전송의 범용으로 사용될  수 있다.
모든 USB 장치는 제어전송을 지원한다.

대량 - 전송:
시간독립적인 저장장치의 대량의 데이터 전송에 대부분 사용된다.
이것은 친숙한 프린터, 디스크 드라이버 등,
이 방식은 버스에서 낮은 우선순위를 가진다.

가로채기 - 전송:
즉시 혹은 주기적으로 PC에 데이터를 보내야 하는
마우스나 키보드 같은 저속의 주변장치에 대부분 사용된다.

등시 - 전송:
확정된 데이터의 전송이 많은 주변장치(예: 사운드카드)에 용된다.  
에러 보정이 포함되지 않는다.
시스템은 약간의 데이터를 잃을 수 있다.
아래의 표에 정리되어 있다.

USB는 12Mbit/s로 정의되어 있다,
어떤 경우에 마지막 데이터 전송율은 낮아질 수 있다.
예를 들면 저속버스를 위해서 오차보정 연결제어를 사용한다.
보증하는 데이터 전송속도는 초당 800바이트로 제한된다.



PC측의 고찰
좋은 PC는 뒷면에 하나 혹은 두개의 USB 접속을 포함한다.
USB의 지원은 OS에서 커넬레벨의 디바이스 드라이버를 경유한다.
그러므로, 만일 설치된 드라이버가 없다면,
USB포트가 당신에게는 유효하지 않게 될 것이다.
이것은 당신의 프로그램으로 부터 직접적으로 호출할 수 있는
아주 오래된 병렬과 직렬포트와는 매우 큰 차이이다.
하나의 USb 주변장치는 하나의 클래스 드라이버가 요구된다.
그들 저수준의 드라이버는구입한 주변장치와 함께 통상적으로 공급된다.
주변장치들은 OS에 의해서 부트업 시간동안
올바른 드라이버가 로드된 원인으로 하나하나 인식된다.

USb는 “hot wire” 프로토콜이다.
PC의 바이오스는 어떤 키보드나 마우스를 지원하기 위해
원시적인 USB에서 구축한 폼을 포함할 수 있다.
그래서 그것들은 부트 시이컨스나 윈도우즈가 시작되기 전에 인식될 수 있다.
윈도우즈는 HID(인간 인터페이스 장치)라는 일반적인 이름으로 인터페이스 되는
사전에 만들어진 몇개의 USB드라이버를 가지고 있다.
그것들은 마우스, 키보드,포인터 그리고 조이스틱으로 되어있다.  
이것은 마우스와 같은 일반적인 제품을 인식한다.
특별한 드라이버의 설치없이 플러그된다.

주변장치가 플러그인 이면, 설치절차는 대단히 간단하다.
USB 허브에서 ID를 묻는 윈도우즈로 보내는 신호를 폴링하는 이유이다.
주변장치는 하나의 PID(제품 ID)와 VID(제조자 ID)로 응답한다.
윈도우즈는 그들의 디렉토리에서 특정한 주변기기에 알맞는 정의된 드라이버를 찾는다.
만일 하나를 찾지 못하면, 사용자가 하나를 설치토록 요청 메세지를 띄운다.
드라이버들은 통상적으로 플로피나 CD로 공급된다.
하나의 드라이버가 설치되면, 응용 프로그램은 보통상태로 전달된다.

프로젝트에서 USB를 어떻게 실행하는가
만일 당신의 프로젝트에서 RS232C 인터페이스를 추가하기를 원하면,
단순한 통신 소프트를 구동하거나 UART emulate를 쓰기 원하면,
RS232C레벨 변환의 작은 부분을 추가한다.  
그리고, 데이터를 전송하는 단순한 프로토콜을 쓴다.
어쩌면 단순한 오류교정 구성을 사용한다.

USB의 추가는 많이 까다롭다.약간의 선택이 있다.
빌트인 USB 호환성과 프로젝트주변의 개발에서 마이크로 콘트롤러를 획득하려면
예를 들면, 하드웨어 기능과 명령세트를 사용한다.
한편, 주변장치로 설계된 USB소자를 구입해서,
그것을 당신의 프로젝트에 넣을 수 있다.
모두, USB에 대하여 조금은 알 필요가 있다.

Cypress, Microchip과 Philips등 많은 제조사는
내장된 USB 호환 MPU를 제공한다
그들의 범위는 메모리와 단순한 타스크를 위한 프로세셍 전원같은
단순한 소자에서 부터 규격이 변화된 범위의 8051 같은 많이 향상된 코어 디바이스까지,
예를 들면 키보드나 마우스, 원하는 하나의 코드를 링크로 넣는 것으로,
USB지원은 펌웨어 서브루틴의 폼으로 공급된다.
USB add-ons은 큰 덩어리의 마이크로프로세서의 메모리 공간과 전원을 가질 수 있다.

당신의 관련된 제품과 제조자 정의 테이블이 생성되어 첨부된다.
단순한 제조자와 제품의 ID가 필요할 것이다.
그들의 번호는 OS에 의해서 알맞게 로드되게 주문한 드라이버로  
쉽게 인식되는 주변장치로부터 만들어 진다.
개발과 시험을 위해서 당신이 사용하고 있는 USB칩에 배치된 ID를 사용할 수 있다
이것은 완벽하게 합법적이다.

USB의 케이블은 주변장치를 위해서 약간의 전원을 제공할 수 있다.
USB규격으로 주변장치가 활성화 되었을때 500mA까지 인출되게 바꿀 수 있다.
그러나 비활성되면 500uA이다.
USB가 서스팬드 상태에서 전원차단 기능을 제공한다는 뜻이다.

윈도우즈는 HID로 만들어진 기본적인 범위로 지원한다
만일 당신의 프로젝트가 그런것 이라면
드라이버가 필요 없을 것이므로 당신자신을 행운아라고 불러라
HID에 추가로, 사운드카드, 프레임 그래버, 프린터같은 표준 USB 클래스이다.
가장 비슷한, 당신의 프로젝트는 아무것도 고칠 필요가 없다.

만일 당신이 전용 드라이버의 개발이 필요하다면 제한된 도움이 있다.
가장 공통적인 USB의 응용을 위해서 마이크로 소프트의 DDK 디바이스 개발 키트는
드라이버 샘플과 템플릿을 포함한다.
추가해서, 많은 샘플과 안내자료들은 인터넷으로 부터 내려받을 수 있다.
경험없는 프로그래머를 위해서, 서툴게 쓴 드라이버는 예기치 않은 충돌,
그리고 만드는 일이 대단히 까다롭게 된다.

드라이버의 작성은 끝없는 이야기가 아니다.
드라이버로 통신하기 위해서 당신의 응용프로그램은 추가가 필요하다.
윈도우즈 프로그래머는 USB의 주변장치의 통신에
CreateFile과 디바이스제어 API 함수를 사용할 수 있다.
그것들은 상대적으로 쉽게 쓸 수 있다.

USB의 요리준비
구축하기 전에, 당신의 프로젝트의 추가는 이제 명쾌하고 단순하다.    
이두가지의 결론은 - PC 소프트웨어 역시 - 간편한 낮은레벨로 저감시킨다
이 프로젝트 기사는 스코틀랜드의 FTDI사가 만든 FT8U245AM 소자가 기본이다.
이소자는 32핀의 SMD MQFP 패키지이다.
이칩은 오직 6MHz의 크리스털과 약간의 수동소자 그리고 USB소켓이 요구된다.

Fig3.
칩은 외부 마이크로프로세서로의 인터페이스이다.
8개의 병렬포트를 경유하고, 4개의 읽기,쓰기와 제어선들이다.
마이크로 프로세스 쪽에서 본 FT245칩은
송신을 위한 384바이트의 FIFO 버퍼와 128바이트의 FIFO 수신버퍼로 보인다.
FT245는 USB 최고속도모드로 약 1Mbps의 데이터전송을 할 수 있다.

사용된 칩은 74HC245 버퍼에서 하나의 MPU포트로 간단히 연결된다.
(아마도 이것은 디바이스라고 명명된 무언가를 갖는다).  
데이터 바이트를 송신하기 위해서, 병렬포트에 8 비트의 데이터를 넣는다.
/TXE 신호가  low로 될 때까지 “transmit buffer available”을 폴링한다.
그리고 쓰기제어선에 펄스를 주면 당신의 바이트는 송신버퍼로 들어간다.

바이트를 수신하려면, RXE신호로 “byte a vailable”을 폴링한다.
이것을 바이트유효 읽기라고 부른다.
RD 제어선에 펄스를 넣어 읽는다.



그림3은 당신이 필요한 USB 프로젝트에 추가한 전치부 하드웨어의 모든 것이다.
8개의 선과 4개의 간단한 R/W 그리고 제어선은 MPU와 연결된다.
FT245소자는 내부에 384 바이트의 송신 FIFO버퍼와 128바이트의 수신 FIFO버퍼를 가진다.
전송속도는 초당 1M바이트이며,
생산된 단순ID가 들어있는 EEPROM을 옵션으로 사용할 수 있다.

간단히 만들려면, 잘 알려진 업어타기 모듈 USBMOD2가 FTDI에 있다.
FT245칩에 없는 6M크리스털, 필요한 수동부품은
USB소켓이 있는 23핀의 업어타기 모듈위에 단순하게 만든다.  
그림 4는 빵판소켓(Bread Board Socket)에 직접 꽂을 수 있는 프로토이다.

이상하게 생각하든 아니든지 당신은 여전히 디바이스 드라이버의 쓰기에 관련된다.
FTDI에서 만든 USB인터페이스 드라이버가 공급되었다면 필요 없다.
그러므로,  만일 당신의 프로젝트 소프트웨어가 직렬포트 방식으로 쓰여졌다면
당신은 약간 할일이 있다.

모듈의 시험
PC의 윈도우즈에 드라이버를 몇분간 설치하면 모듈을 수신한다
제어판으로 가서, 장치관리자를 연다.
유효통신포트의 리스트에서 COM3를 새롭게 추가한다


USB 크리스마스 라이트 : 모듈의 단순한 시험용.
PC에 연결하고 표준터미널통신 프로그램으로
새로운 통신포트를 배치하고 문자를 치면 불이 켜진다.
캐패시터는 RX Empty로 부터 짧은 RD펄스의 구동시 요구된다.

나는 빵판에 플러그인 모듈을 꼽았다.
그리고, 약간의 LED를 데이터 포트에 직접 연결하였다.
그림5의 RXE선으로 부터 RD펄스를 발생하는 100nF의 캐패시터를 연결한다.
케이블 자체로 부터 USB 모듈로 공급된 전원으로 전원공급은 필요없다.
나의 PC에서 단순한 터미널 프로그램으로 열린 COM3에서 넣은,
약간의 문자로 부터, LED는 완벽하게 깜빡인다.
전체 소모된 시간은 15분 이하로, 나쁘지 않았다

다음 달 나는 이 모듈로 바꾼,
간단하고 빠른 볼트메터, 오실로스코프의 요구된 회로를 구체화한다.    

USB 조합기관  http://www.usb.org  
상세한 USB칩과 모듈의 정보를 위한 http://www.ftdichip.com
J. Hyde “USB Design by Example” Wiley, NY 1999.
j. Axelson “USB Complete” Lakeview Research 1999.
2개의 좋은 USB 참고서적. 많은 연습과 배경정보를 가지고 있다

------------------------------------------------------------------------------------------

번역 : ipstack@ipstack.co.kr
날짜 : 17.Aug.2003.
이 번역문은 ipstack.co.kr의 소유입니다, 임의의 복제 및 배포를 금합니다.
단 원저자 사이트, 번역자 사이트를 밝히면 배포가 가능합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수

AVR Project PIC Based Serial Port Servo Controller file

http://www.digitalnemesis.com/ash/projects/picservo/ ◆ PIC Based Serial Port Servo Controller By Ashley Roll Ever wanted to use Servos in a robotics project? This project uses a PIC microcontroller and...

AVR 강좌 RS-232 란 무엇인가? file

RS-232 란 무엇인가...

AVR 강좌 하드웨어 기초 file [1]

윤덕용 새 페이지 1 외부 자료 Link 작성자 Thinking in C++, 2nd ed. Volume 1 Bruce Eckel Thinking in C++, 2nd ed. Volume 2 ...

AVR Project FT245AM을 사용한 USB 인터페이스 설계 file

http://www.eix.co.uk/Ethernet/USB/ FT245AM을 사용한 USB 인터페이스 설계 USb는 생각보다 빠르다. USB는 PC의 저속에서 중속의 주변장치에서 새로운 방법을 제공한다. 새로운 USB 표준은 RS232C와 비교하면 보다 ...

AVR Project VHF 무선 데이터 수신기 file

http://jaichi.virtualave.net/avr-prog-e.htm 새 페이지 1 VHF 무선 데이터 수신기 ■ 회로: 이 수신기는 증폭도과 함께 크리스털 세트보다 작습니다. 작동전압 범위는 3V 에서 5V입니다. 나의 책상위에서는 2.5V이하로 작동합니다....

AVR Project VHF 무선 데이터 송신기 file

http://users.cableaz.com/~cappels/dproj/LCRFLINK/TRRxmtr/TRFxmtr.htm 새 페이지 1 산뜻한 생각으로 대략 접근하는 무전원의 송신기를 그렸다. 쓰기 시작하기 전에. 디커플링 캐패시터를 너무 크게 만들지 않도록 주의하라 그래서, ...

AVR Project AVR 6디지트 50MHz 주파수 카운터 file

http://www.myplace.nu/avr/countermeasures/index.htm AVR 6디지트 50MHz 주파수 카운터 ■ 개요 이것은 필요에 충족하는 또 다른 프로젝트이다. 나는 TTL 칩들을 이용해 간단히 주파수 카운터를 조립한적이 있다. 그것은...

AVR Tool AVR JTAG ICE file

Description: The Atmel AVR® JTAG ICE is an In-circuit Emulator for Atmel's megaAVR® Flash microcontrollers with 16K or more program memory. The JTAG ICE talks to the On-Chip debug module on the...

AVR Project PIC 전자식 그림간판의 제작(AVR로 응용가능) file

http://www.interq.or.jp/japan/se-inoue/e_pic6_2.htm 16F84A의 전자식 그림간판 메세지는 오른쪽에서 왼쪽으로 흐르며 표시한다. 128 개의 LED를 이 기판에 사용하였다. 이 장치의 소프트웨어는 다음과 같은 기술을 사용하...

AVR Project AVR JTAG 에뮬레이터의 제작 file

http://avr.openchip.org/bootice/index.html ■ BootICE(아트멜 AVR JTAG ICE와 호환)를 만들자 아직도 JTAG ICE를 많은 돈을 주고 구입하십니까? 여기에 완전하게 호환되는 BootICE의 완전한 설계(회로도,기판,소...

AVR Tool AVR Studio V4.07 설정방법 및 디버거 사용방법 file

http://www.atmel.com/ipstack AVR Studio V4.07 설정방법 및 디버거 사용방법 (1) 다음 사이트를 방문하여 AvrStudioV4.07을 받는다. http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 그림과 같은 CD모양의...

AVR Project CMOS 카메라 Treva의 PC화상표시 file

http://www.paken.org:8080/aaf/treva/index.htmlipstack CMOS 카메라 Treva의 PC화상표시 feel H용 이미지 캡쳐유닛 Treva를 범용 CPU로 접속합니다. 입력과 출력을 1가닥의 신호선으로 OK!가장 간단한? 이미지 센서입니...

AVR Project AT90S2313 디지털 용량계 file

http://elm-chan.org/works/cmc/report.htmlipstackAT90S2313 디지털 용량계 이것은 용량을 빨리 측정하는 간단한 용량계이다. 용량의 측정 원리는 임피던스 브릿지나 딥메터처럼 용량을 한번에 측정한다. 요즈음의 표준 용량계는 Cx에...

AVR Project AVR로 만드는 3채널 다이오드 온도계 file

http://elm-chan.org/works/temp3/report_j.html 다이오드로 온도를 측정하는 3채널 온도계의 제작 고정도 써미스터를 사용하여 무조정으로 ±0.5℃の 온도정도를 실현을 하였습니다만, 최근의 프로세서는 다이온도를 직접 모니터하...

AVR Project Treva or DMR-C1 Serial Camera Interface file [3]

http://homepage3.nifty.com/mujirushi/ews/dmrc1/ipstackTreva Serial Camera Interface 이 페이지에는 독자적으로 해석한 내용이 포함되어 있으므로, 반드시 내용을 보증하는 것이 아닙니다. 이용에 있어서는 자기책임으로 하여 주시기...

AVR Project Treva를 Blutooth에 연결한 무선이동 카메라 file

http://www.asahi-net.or.jp/~qx5k-iskw/robot/blue.htmlipstack ■ Treva를 Blutooth에 연결한 무선이동 카메라 모듈의 VCC, VCC_IO, ON단자에 3.3V를 공급하고, TxD, RxD를 PC의 직렬포트에 접속합니다. 이제 모듈을 ...

AVR Project AVR90S2313과 Treva 카메라 file

http://stk500.hp.infoseek.co.jp/treva.htmlipstack 최근 마이콤등으로 움직이는 방법이 증가하고 있는 FeelH용 CMOS 카메라인 Treva입니다. STK500에는 부속된 2선식 케이블로 Vcc-GND, SCK-DO의 형태입니다. Treva와 STK500의 ...

AVR Project AT90S2313을 사용한 IR to USB 모듈 file

http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB (AVR)_eng.htm Universal USB interface & USB Infrared Interface with microprocessor AT90S2313-10 : 마이크로 콘트롤러로 USB를 완성 : IgorPlug-USB (AVR) 이기사의 ...

AVR 강좌 AVR Mega128 퓨즈비트 설정방법 file

http://www.tns-tech.co.kr128 퓨즈비트 설정방법...

AVR Project AVR Mega8을 사용한 PID제어 소스 file

http://www.circuitcellar.com/library/print/1002/eady147/index.htm LCD에 보이는 것은 실제 조리기의 온도와 음식3개의 온도이다. 압전 경보기가 꺼져 있으면, 조리기의 온도는 5° 간격으로 180° 에서 400°F이다. 음...