개요: 이 애플리케이션 노트는 USB 임베디드 호스트 및 주변장치 애플리케이션 개발을 간소화하는 하드웨어와 소프트웨어 조합을 설명하는 애플리케이션 노트 3936 "The Maxim USB Laboratory"의 내용과 연결되어 있다. MAX3421E는 이 시스템의 호스트이고 MAX3420E는 주변장치이다. 이 애플리케이션 노트에서는 EV 킷을 사용하여 하드웨어를 구성하는 방법에 대해 설명한 다음, 소프트웨어를 평가하는 세 가지 방법을 소개한다.
머리말
이 글과 연결되는 애플리케이션 노트 3936, "Maxim USB Laboratory"는 USB 호스트(MAX3421E)와 주변장치(MAX3420E)를 동일한 ARM® 기반 하드웨어에 구현하기 위한 C 코드 및 Keil™ 프로젝트를 설명한다. 이 킷을 위한 하드웨어는 다음과 같이 구성된다.
Maxim 웹사이트에서 MAX3420E 및 MAX3421E를 참조한다. 여기에 데이터 시트, Maxim USB Laboratory 코드에 대해 설명한 다른 애플리케이션 노트, MAX3420E 및 MAX3421E와 관련된 많은 애플리케이션 노트, 샘플 주문 방법 등이 제시되어 있다.
MCB2130 보드 또는 Keil Software® 및 ARM 소프트웨어 개발 툴에 대한 사항은 www.keil.com으로 문의한다.
하드웨어 구성
그림 1. Keil MCB2130 보드에 꽂은 Maxim MAX3421E EVKIT-1
그림 1은 2보드 세트를 보여준다. 청색 보드는 Keil MCB2130이며 Philips® LPC2138, ARM7™ 마이크로컨트롤러가 탑재되어 있다. LPC2138은 2개의 SPI™ 하드웨어 유닛을 내장하고 있으며, 각 유닛은 2개의 USB 컨트롤러 칩에 각각 연결한다.
수직 보드는 MAX3421E EVKIT-1이다. MAX3420E 주변장치 컨트롤러는 ARM SPI 포트 하나에 연결하며 "3420P"(P = 주변장치)라고 표시되어 있는 USB "B" 커넥터(J5)에 선을 연결한다(그림 1). MAX3421E 호스트/주변장치 컨트롤러는 다른 ARM SPI 포트에 연결하고 "3421P" (J2) 및 "3421H"(H = 호스트) (J1) 커넥터에 선을 연결한다. USB Laboratory 코드는 MAX3421E를 호스트로 사용하므로 EV 킷 보드의 가운데 USB 커넥터(J2)는 사용되지 않는다.
호스트 소프트웨어는 MCB2130 보드(P1)에 있는 2개의 직렬 포트 중 하나를 사용하여 USB 설명 정보를 터미널 에뮬레이션 프로그램을 실행하는 PC에 전송한다. Tera Term Pro와 같은 터미널 프로그램은 프로그램에 의해 전송되는 특수 "이스케이프 코드" 시퀀스를 인식하여 스크린을 소거하고 커서를 홈으로 이동시키는 터미널(VT100)을 에뮬레이트할 수 있다. 터미널 프로그램의 설정은 38400, N, 8, 1이며 플로우 제어는 없다.
그림 1의 베이지색 박스와 리본 케이블은 Keil ULINK® JTAG 로더 디버거이다. 이 유닛은 Keil µVision®3 개발 환경에 의해 지원된다. MCB2130 보드는 모든 기능이 포함된 완전한 버전의 Keil 툴셋 µVision3의 평가 버전과 함께 제공된다. 이 평가 버전의 코드 크기는 16kB로 제한된다.
이 보드 세트에는 4개의 USB 커넥터가 있다. Keil 보드의 USB 커넥터는 VBUS와 접지 연결만 갖는다. 이 커넥터는 어느 USB 호스트에나 꽂을 수 있으며 보드에 5V 전원을 제공한다. 일부 USB 허브는 보드를 구동하기에 충분한 전류를 공급하지 못하므로 여분의 PC USB 포트로부터 직접 전력을 공급하는 것이 가장 좋은 방법이다.
Maxim 보드는 3개의 USB 커넥터를 갖는다. 위에서 설명했듯이 그림 1의 3420E P와 같이B 커넥터는 MAX3420E에 선을 연결한다. USB 주변장치 또는 호스트로 동작할 수 있는 MAX3421E는 2개의 USB 커넥터 3421P 및 3421H에 선을 연결한다. 이들 커넥터는 함께 선이 연결된 D+ 및 D- 핀을 가지며 한 번에 하나씩만 연결하도록 한다. USB Laboratory 코드는 가운데 USB 커넥터 3421P를 사용하지 않는다.
MAX3420E 및 MAX3421E는 ARM 마이크로컨트롤러에 있는 2개의 개별 SPI 포트에 연결한다. 이러한 구성은 동일한 코드로 동시에 실행하는 호스트와 주변장치 애플리케이션을 모두 간편하게 쓸 수 있게 할 뿐 아니라 이상적인 USB 트레이닝과 디버깅 시스템을 제공한다. 모두 동일한 C 코드로 호스트는 USB 요청을 주변장치에 보내고 주변장치는 응답을 할 수 있으며 호스트는 결과를 평가할 수 있다. 그림 1의 검정색 USB 케이블은 이러한 시스템을 위해 MAX3420E 및 MAX3421E를 함께 연결하고 있는 USB 케이블을 보여준다.
Keil MCB2130 보드는 Keil 및 기타 공급처에서 구입할 수 있다. 위에 소개된 Maxim 웹페이지에 Keil 제품 구입 가능 여부에 대한 최신 정보가 나와 있다.
MAX3421E EVKIT-1 블록 다이어그램
그림 2. MAX3421E EV 킷의 블록 다이어그램. 어둡게 표시된 타원형은 애플리케이션을 실행하는 소프트웨어 모듈이다.
그림 2는 2개의 USB 컨트롤러를 USB 커넥터 J1, J2, J5에 어떻게 연결하는지 보여준다. 36핀 커넥터(J4)는 Keil MCB2310 개발 보드에 꽂아 선을 연결한다. 이 설계는 ARM 프로세서에 있는 2개의 개별 SPI 포트를 사용하여 2개 USB 컨트롤러(U1 및 U2)에 대한 독립적인 동작을 제공한다. 호스트 소프트웨어는 백그라운드(main{}은 여기에 있음)로 실행되지만, 주변장치 코드는 LPC2138 인터럽트 EINT0을 사용하여 호출한다.
U1은 호스트로 동작하기 때문에 시스템은 USB A 커넥터 J1에 VBUS 전원을 제공해야 한다. J3-3에 달린 플라잉 리드를 사용하여 5V 전원을 EV 킷 보드에 제공한다. 이 5V 전원은 Keil 보드 "5V IN"의 테스트 핀 또는 Laboratory 전원으로부터 가져올 수 있다. U3, MAX4793은 VBUS 전압을 스위칭 및 전류 제한한다. U3은 GPO-7 핀을 사용하여 J1에 제공되는 VBUS 전원을 제어하고 GPIN-0 핀에 존재하는 과전류 (300mA 이상) 조건을 검출할 수 있다.
EV 킷 보드의 버튼과 조명은 두 컨트롤러에 모두 연결한다. U1은 7세그먼트 읽기를 구동하고 4개의 푸시 버튼(PB1–PB4)에 연결한다. U2는 4개의 LED를 구동하고 푸시 버튼 PB5~PB8에 연결한다.
Keil MCB2130 보드 준비
그림 3. 36핀 메일 헤더를 적색 사각형으로 표시된 영역에 납땜 처리한다.
Keil MCB2310 보드는 여러 개의 2핀 및 8핀 헤더를 장착할 수 있게 설계된 영역을 갖고 있다(그림 3). Maxim EV 킷 보드는 보드에 포함된 단일 36핀 헤더를 사용하여 3.3V 전원 핀, 8핀 헤더 3개, GND 핀 2개(그림 3의 적색선)를 포함하여 Keil 보드에 부착한다. 다양한 Keil 커넥터 영역 사이에는 공간이 존재하므로 36핀 헤더를 설치하기 전에 특정 핀 쌍을 36핀 헤더로부터 제거해야 한다. 헤더로부터 "빠진" 핀이 모두 제거되었는지 확인한 다음 이를 Keil 보드에 납땜 처리한다.
그림 3은 보드의 오른쪽 위 모서리의 테스트 포인트 패드(적색 원)를 보여준다. 이 곳은 Maxim 보드에서 사용할 수 있도록 5V 전원을 태핑할 수 있는 곳이다. 이 5V 전원은 Keil 보드의 USB 전원 커넥터의 VBUS 핀으로부터 가져온다(그림 4).
그림 4. 플라잉 리드는 Maxim 보드에 VBUS 전원을 제공한다.
Keil 소프트웨어 설치
Keil µVision3 ARM 개발 소프트웨어의 데모 버전은 www.keil.com에서 다운로드할 수 있다. Maxim 소프트웨어 패키지와 함께 제공되는 µVision3 프로젝트 파일은 다운로드한 Keil 파일 mdk303a.exe를 사용하여 작성되었다. Keil에서는 그들의 개발 환경에 사용 가능한 2개의 프로젝트 파일을 제공하고 있기 때문에 반드시 이 버전의 파일을 사용하도록 한다. (이 파일들은 MaximUSBLab10.zip 파일에 들어있지 않다.) MaximUSBLab 프로젝트는 C:\Keil 아래 특정 경로명을 사용하여 이들 파일을 찾는다. 따라서 Keil 데모 툴을 설치할 때에는 Keil 파일에 대한 경로명이 정확히 오도록 디폴트 설치 디렉토리로 C:\Keil을 그대로 사용하도록 한다.
Keil의 "mdk303a.exe" 툴셋에는 Keil에서 제공하는 2개 파일이 다음 디렉토리에 들어있다.
Keil 데모 프로젝트에는 여러 버전의 "Blinky"가 포함되어 있다. 반드시 Maxim 소프트웨어에서 사용하는 보드인 MCB2310 보드에 해당되는 파일들을 사용하도록 한다.
Keil ULINK JTAG 디버그 유닛을 가지고 있는 경우에는 Keil 웹사이트에서 USB 드라이버도 다운로드해야 한다. Maxim 코드는 Keil 웹사이트의 3071.zip 파일을 사용하여 테스트되었다. 데모 µVision 개발 소프트웨어를 설치한 다음 이 파일을 더블 클릭하면 µVision3을 ULINK 박스에 연결해주는 USB 드라이버가 설치된다.
Keil 데모 소프트웨어를 설치한 다음에는 MaxUSBLab10 폴더로 가서 MaximUSBLab.Uv2 파일을 더블 클릭하여 모든 올바른 프로젝트 설정이 포함된 프로젝트를 연다. "Rebuild All Target Files" 버튼을 클릭하면 프로젝트가 컴파일을 수행한다. ULINK 박스를 가지고 있고 USB 드라이버를 설치한 경우에는 "Start/Stop Debug Session"을 클릭하면 Maxim 예제 코드를 실행, 수정, 디버깅할 수 있다.
펌웨어를 실행하는 3가지 방법
MaximUSBLab.hex 로드 및 보기
Maxim USB Laboratory 로드 (hex) 파일은 Maxim 웹사이트에서 다운로드할 수 있다. Keil 프로젝트의 일부로 압축 파일 형식으로 애플리케이션 노트 3936, "The Maxim USB Laboratory"에 포함되어 있다. 무료 유틸리티 Flash Magic(그림 5)을 사용하여 헥사 파일을 LPC2138 플래시 메모리로 로드할 수 있다. 이 유틸리티는 www.esacademy.com에서 다운로드할 수 있다. Flash Magic을 사용하기 전에 먼저 Options/Advanced Options/Hardware Config 아래 표시된 박스(그림 6)에 체크 표시한다.
Flash Magic 유틸리티를 사용하려면 Keil 보드에서 P2 직렬 커넥터를 사용하고 점퍼 J7을 ISP 위치로 이동시킨다.
참고: J7 점퍼를 이동하면 푸시 버튼 S2를 INT1 인터럽트 소스로 사용할 수 없다. Maxim 애플리케이션 코드는 다른 목적으로 INT1을 사용하므로 사용자는 J7을 ISP 위치에 그대로 둘 수 있다.
그림 5. MCB2130 보드를 위한 Flash Magic 스크린의 일반 설정
그림 6. 이 옵션을 제일 먼저 설정한다.
디버그 및 수정 (제한)
Keil ULINK JTAG 유닛을 가지고 있는 경우 Maxim 데모 코드를 JTAG 포트를 통해 컴파일, 로드 및 디버그할 수 있다. 또한 코드를 통해 브레이크포인트와 단일 단계를 설정할 수 있다. 이것은 처음 단계에서부터 사용자의 목적에 맞게 동작 호스트 및/또는 주변장치 코드를 분석하고 수정하는 등 USB상의 작업 속도를 높이는 뛰어난 방법이다.
ARM을 위한 Keil µVision3의 데모 버전은 완전한 버전의 µVision3이지만 코드 크기가 16kB로 제한되어 있다. Maxim USB Laboratory 프로젝트(MaximUSBLab10.Uv2)는 이 프로젝트의 코드 크기 제한에 맞추기 위해 "Thumb only" 모드로 컴파일되었다.
완전한 개발
본격적인 개발 작업을 위해서는 완전한 Keil µVision3 ARM 툴셋을 구입하는 것이 좋다. 그러면 16kB 제한이 없으므로 LPC2138에서 최대 전체 512kB 플래시까지 훨씬 큰 애플리케이션을 구현할 수 있다.
µVision은 Keil, An ARM Company의 등록상표이다.
ARM7은 ARM Ltd.의 상표이다.
ARM은 ARM Ltd.의 등록상표이다.
Keil Software는 Keil Software, Inc.의 등록상표이다.
Keil은 Keil, An ARM Company의 상표이다.
Philips는 Philips Corp.의 등록상표이다.
SPI는 Motorola, Inc.의 상표이다.
ULINK는 Keil, An ARM Company의 등록상표이다.