ENGLISH 简体中文 日本語 한국어  


애플리케이션 노트  4036

DS8007 EV 킷 사용법

개요: 이 글은 DS8007 듀얼 스마트 카드 인터페이스를 위한 EV 킷 시작에 필요한 단계에 대해 설명한다. 또한 소프트웨어의 설치와 구성 및 하드웨어 구성 방법을 포함하여 온 보드 DS5002FP 마이크로컨트롤러에서 실행할 수 있는 애플리케이션을 생성하고 로드하는 방법에 대해서도 설명한다. 이 밖에 온 보드 LCD 모듈의 사용을 시연하는 C 소스 코드의 여러 함수와 간단한 "Hello World" 예제가 제공된다.

개요

DS8007 EV 킷DS8007 듀얼 스마트 카드 인터페이스를 평가할 수 있는 성능이 검증된 간편한 플랫폼을 제공한다. DS8007은 마이크로컨트롤러와 2개의 독립적인 스마트 카드 간의 모든 인터페이스 세부사항을 관리하는 혼합 신호 (mixed-signal) 주변 장치이다.

DS8007 EV 킷은 완벽한 스마트 카드 인테페이스를 제공하도록 프로그래밍할 수 있는 DS8007 및 DS5002FP 보안 마이크로컨트롤러로 구성된다. 이 EV 킷은 또한 2개의 스마트 카드 소켓을 제공한다. 하나는 표준 신용/지불 카드 크기이며, 다른 하나는 가입자 인증 모듈 (SIM) 소자 크기이다. DS8007 킷 보드는 그림 1에 나와 있다. 이 글에서는 이 EV 킷을 빠르게 시작하는 방법과 애플리케이션 코드를 개발하고 실행하는 방법에 대해 설명한다.

Figure 1. DS8007 EV kit board.
그림 1. DS8007 EV 킷 보드

DS8007은 마이크로컨트롤러와 2개의 개별적인 스마트 카드를 물리적으로 인터페이싱하는 데 필요한 모든 전기적 신호를 제공한다. 이 소자에는 자동 카드 활성화 및 비활성화를 제어하는 전용 내부 시퀀서 및 데이터 통신을 위한 ISO UART가 포함되어 있다. 또 DS8007에는 차지 펌프와 전압 레귤레이터가 내장되어 있어 2.7V ~ 6.0V 전원 전압에서 동작하고 1.8V, 3.0V, 5.0V 중 2개의 독립적인 스마트 카드 전원 전압을 생성할 수 있다. 마이크로컨트롤러와의 통신은 다중화 또는 비다중화 구성으로 표준 병렬 8비트 버스에 의해 제공된다.

소프트웨어 구성

이 애플리케이션 노트의 단계를 따라 하려면, 사용자의 PC에 Dallas Semiconductor Microcontroller 툴 킷(MTK)과 Keil의 PK51 전문 개발자용 툴 킷 소프트웨어가 설치되어 있어야 한다. 두 소프트웨어 패키지는 모두 DS8007 EV 킷에 포함되어 있다. 다음은 이들 애플리케이션의 설치 단계에 대한 설명한다. 이 애플리케이션 중 하나 또는 두 개가 이미 PC에 설치되어 있는 경우에는 해당 부분에 대한 설명은 건너뛰어도 좋다.

마이크로컨트롤러 툴 킷 설치

  1. DS8007 EV 킷 설치 CD를 컴퓨터의 CD-ROM 드라이브에 삽입한다. CD가 자동 부팅되고 DS8007 EV 킷 시작 화면이 나타난다. CD-ROM이 자동 부팅되지 않으면 CD 루트 폴더로 가서 index.html 파일을 두 번 클릭한다.
  2. "Install MTK" 버튼을 클릭하고 "Run" 버튼을 클릭하여 설치를 시작한다.
  3. MTK 설치 시 디폴트 설정을 선택한다. 참고: 웹 브라우저의 보안 설정과 Windows® 버전에 따라 보안 경고창이 나타날 수 있다. 경고창이 뜨면 내용을 확인하고 설치를 계속 진행한다.

Keil 전문 개발자용 툴 킷 설치

  1. Keil의 PK51 전문 개발자용 툴 킷을 설치하려면 DS8007 EV 킷에 포함되어 있는 Keil 마이크로컨트롤러 개발 툴 CD를 컴퓨터의 CD-ROM 드라이브에 삽입한다. CD가 자동 부팅되고 메인 메뉴가 표시된다. CD-ROM이 자동 부팅되지 않으면, CD 루트 폴더로 가서 setup.exe 파일을 두 번 클릭한다.
  2. 메인 메뉴에서 "Install Evaluation Software"를 선택한 다음 "C51 Compiler(Eval Tools)"를 선택한다.
  3. 화면에 나타나는 명령에 따라 PC에 Keil 툴을 설치한다.

하드웨어 구성

DS8007 EV 킷 보드를 구성하려면 적절히 점퍼를 설정하고, PC에 직렬 포트를 연결하고, 전원을 연결하는 단계가 필요하다. 이들 단계에 대해서는 아래에 자세히 설명되어 있다.

  1. 그림 2표 1의 설명을 참조하면서 점퍼 1 ~ 13을 연결한다..
  2. 제공된 직렬 케이블의 한쪽 끝을 보드의 DB-9 커넥터(J6)에 연결하고, 다른 쪽 끝을 PC의 COM 포트에 연결한다.
  3. EV 킷에 포함된 5V (레귤레이트된(±5%) 300mA, 2.5mm 중심) 포지티브 전원을 보드의 J7 전원 커넥터에 연결한다.

    Figure 2. DS8007 board jumper locations.
    그림 2. DS8007 보드 점퍼 위치
표 1. DS8007 보드 점퍼 설정
Jumper Installed Description
JU1 Installed Board's DVDD connected to DS8007's digital VDD
JU2 Installed DS8007's VCCA connected to smart card socket 1, pin C1
JU3 Installed Board's AVDD connected to DS8007's analog supply, VDDA
JU4 Installed: Connect pins 1 and 2 Board's AVDD connected to smart card socket 1, pin S2
JU5 Installed: Connect pins 2 and 3 Board's AVDD connected to smart card socket 1 pin, S1 through 10K
JU6 Not Installed
JU7 Not Installed
JU8 Installed DS8007's VCCB connected to SAM socket, pin C1
JU9 Installed: Connect pins 2 and 3 DS8007's PRESB connected to GND (through 10K)
JU10 Installed: Connect pins 2 and 3 DS5002FP's nPROG connected to RS-232 DTR0/DSR0
JU11 Installed Board's 5V supply connected to board's AVDD
JU12 Installed Board's 5V supply connected to board's DVDD
JU13 Installed: Connect pins 2 and 3 DS8007's INTAUX pin connected to GND (through 10K)

실행 파일 생성 및 로드

다음 단계는 .HEX 파일을 생성하는 것이다. 이 파일은 보드의 메모리에 다운로드한 후 DS5002FP로 실행할 수 있다. 이 파일을 생성하려면 로드 가능한 적절한 파일을 생성하도록 Keil µVision® 프로젝트 파일을 구성하고, 그런 다음 생성된 파일을 보드의 비휘발성 메모리에 다운로드해야 한다.

µVision 프로젝트 생성

PC에 Keil C51 개발 툴을 설치한 후, 생성된 아이콘을 클릭하여 µVision 프로그램을 시작한다. 이제 다음 단계를 따라 데모 프로그램을 위한 프로젝트와 C 소스 파일을 생성한다.
  1. Project 제목에서 "New Project"를 선택하고 프로젝트명에 DS8007-1을 입력한다.
  2. "Select Device for Target"이 나타나면, 소자 선택 리스트에서 Dallas Semiconductor 그룹과 DS5002FP를 선택한다.
  3. "Copy Standard 8051 Startup Code to Project Folder and Add File to Project" 메시지가 나타나면 "Yes" 버튼을 클릭한다.
  4. "File"과 "New"를 차례로 클릭하고 다음 정보를 입력하여 소스 파일을 생성한다. 이 파일은 다운로드 가능하다(ZIP, 11kB).
    // File DS8007-1.C 
    
    #include <REG5000.H>                    // special function register declarations 
    //                                      // for the DS5000/5002                   
    #include <stdio.h>                      // prototype declarations for I/O functions 
    
    // Main C function.  Program execution starts here.
    void main (void) {
    
    // Set up the serial port for 38400 baud at 14.7MHz.
            TMOD=0x21;                      // Timer 1: 8-bit auto-reload from TH1, Timer 0: 16-bit
            TH1 = 0xFE;                     // Set timer reload value for 38,400 baud
            PCON|=0x80;                     // Turn on baud rate doubler SMOD_0
            TCON=0x50;                      // Enable timers 0 and 1
            SCON=0x50;                      // 10-bit async, enabled
            TI=1;                           // Set TI to send first character
            TR1 = 1;                        // Start timer 1
    
    // Start main program
            printf ("\nHello DS8007 World!\n\n");   // Output message
            while (1) ;                     // End program by looping here.
    }
    
  5. 텍스트 입력을 마치면 "File"과 "Save As"를 클릭하고 파일명으로 "DS8007-1.c"를 입력하여 파일을 저장한다.
  6. Project Workspace 창에서 Target 1을 마우스 오른쪽 버튼으로 클릭하고 "Manage Components" 옵션을 선택하여 프로젝트 리스트에 이 파일을 추가한다. Project Components 탭에서 "Add Files" 버튼을 클릭한 다음 파일명 부분에 파일명(DS8007-1.c)을 입력한다. "Add" 버튼을 클릭한 다음 "Close" 버튼을 클릭한다. "OK" 버튼을 클릭하여 Components 창을 닫으면, 이 파일이 Source Group 1에 추가된 것을 볼 수 있다.
  7. Project Workspace 창에서 Target 1을 마우스 오른쪽 버튼으로 클릭하고 "Options for Target 'Target 1'"을 선택하여 프로젝트 옵션을 구성한다. Target 탭을 클릭한 다음 Xtal 박스에 14.7을 입력한다. 아래의 그림 3과 같이 Memory Model에는 "Small: variables in DATA"를, Code ROM Size에는 "Large: 64K program"을, Operating system에는 "None"을 각각 선택한다. 나머지 항목은 디폴트 상태로 둔다.
  8. Output 탭에서 "Create Executable"이 선택되어 있지 않으면 박스에 체크 표시하고 "Create HEX File" 체크박스도 선택한다. 그림 4와 같이 드롭다운 선택 박스에서 HEX-80의 HEX 형식을 선택한다. 나머지 항목은 디폴트 상태로 둔다. "OK"를 클릭하여 'Target 1'의 Options 창을 닫는다.
  9. "File"과 "Save All"을 클릭하여 프로젝트 파일을 저장한다.
  10. "Project" 제목을 클릭하고 "Rebuild All Target Files"를 선택하여 실행 파일을 생성한다. 화면 아래 쪽에 있는 build window에는 0 Error(s), 0 Warning(s)이 표시되어야 하며, 그렇지 않을 경우 에러를 찾아 필요한 조치를 취한다. 에러가 존재하지 않을 때까지 이 단계를 반복한다.
Figure 3. Project options target tab settings.
그림 3. 프로젝트 옵션 Target 탭 설정

Figure 4. Project options output tab settings.
그림 4. 프로젝트 옵션 Output 탭 설정

실행 파일 로딩

위의 단계에 따라 하드웨어 구성을 완료하면 DS8007 보드를 PC의 COM 포트에 연결한다. 이제 사용 가능한 온 보드 메모리에 액세스할 수 있도록 프로세서를 구성해야 한다. 이러한 작업을 수행하기 위해 다음과 같이 프로세서의 MCON 및 RPCTL 레지스터에 적절한 값을 쓴다.
  1. PC에서 MTK 프로그램을 찾아 실행시킨다.
  2. Select Device 창(그림 5)에서 "DS5002FP"를 선택하고 "OK"를 클릭한다.
  3. "Options"와 "Configure Serial Port"를 차례로 클릭하여 DS8007 보드를 연결할 포트(COM1 등)를 선택한다. 이어 드롭다운 메뉴에서 "Speed 38400"을 선택하고 "OK"를 클릭한다.
  4. "Target"을 클릭한 다음 "Open COM1 at 38400 baud"를 선택한다.
  5. 보드의 직렬 포트가 PC에 연결되어 있는지, 그리고 5V 전원이 인가되고 있는지 확인한다. "Target"과 "Connect to Loader"를 클릭한다. 성공적으로 연결되면 DS5002FP에는 그림 6과 같은 부트 로더 배너가 나타난다.
  6. > 프롬프트에 다음 명령을 입력하여 MCON 및 RPCTL 레지스터를 구성한다.
    > W MCON 0A
    
    > W RPCTL 01
    
    > R
    
    MCON:0A RPCTL:81 MSL:01        Microcontroller's response to read register command
    
    부트 로더 명령을 입력할 때 "E: LOCKED" 에러 메시지가 나타나면 부품에 보안 록(lock)이 설정되어 있다는 것을 의미한다. 부품의 록을 해제하려면 간단히 로더 프롬프트 >에 록 해제 명령(U)을 입력하면 된다. 이렇게 하면 프로세서의 메모리에 저장된 모든 정보가 삭제되지만, 부품의 록이 해제되면 위의 레지스터 명령을 입력할 수 있다. 읽기 레지스터 명령(> R)을 입력하면 그림과 같이 DS5002FP는 레지스터 MCON(0A) 및 RPCTL(81)의 상태를 보고한다. DS5002FP는 MSL 비트 상태(여기서는 01)도 표시한다(자세한 내용은 보안 마이크로컨트롤러 사용자 가이드 참조).
이제 DS8007 보드는 Keil 개발 툴을 사용하여 생성된 프로그램 파일을 로드할 준비가 되었다.
  1. "File"을 클릭한 다음 "Load SRAM"을 선택한다. 파일 DS8007-1.HEX를 선택하고 "OPEN"을 클릭한다. DS5002FP 프로세서는 다음과 같이 응답하며,
    > Loading File ...\DS8007-1.hex
    
    연속적인 점들은 로드가 진행 중임을 나타낸다.
  2. 로드가 완료되면 프로세서는 "Load complete"를 보고한다. 이제 "Target"과 "Disconnect from Loader"를 클릭하면 프로그램을 실행할 수 있다.
부트스트랩 로더의 연결을 분리하는 즉시 프로세서는 프로그램을 실행하기 시작한다. MTK 화면에 프로그램의 출력 "Hello DS8007 World!"가 표시되면 성공적으로 완료된 것이다.

Figure 5. MTK device selection.
그림 5. MTK 소자 선택

Figure 6. DS5002FP boot loader banner.
그림 6. DS5002FP 부트 로더 배너

EV 킷 LCD 모듈

DS8007 EV 킷의 유용한 기능을 시연하기 위해 이제 2라인, 20자 LCD에 메시지를 표시하는 애플리케이션 프로그램을 생성해보자. 시작하기 전에 프로그램 실행 시 메시지가 적절히 표시될 수 있도록 LCD 대비를 설정해야 한다. 먼저 보드에 전원을 인가하고 LCD는 빈 화면이어야 한다. 보드에서 가변 저항 R7(위의 그림 2 참조)을 찾아 소형 스크루드라이버를 사용하여 개별 5 x 7 도트 블록이 디스플레이의 문자 위치에 나타날 때까지 저항을 조정한다. 그리고 블록이 저절로 사라질 때까지 천천히 R7을 조정한다. 이러한 LCD 대비 설정으로 문자는 보이고 스페이스는 보이지 않도록 한다.

새로운 프로젝트와 실행 파일을 생성하려면 위의 1 - 10 단계를 따라한다(µVision 프로젝트 생성). 프로젝트 파일명에는 DS8007-2를, C 소스 코드 파일명에는 DS8007-2.c를 사용한다. 이 프로그램의 소스 코드는 아래 부록 A에 나와있다. 이 정보는 위에서 언급한 FTP 웹 사이트에서 .ZIP 파일로도 제공되고 있으므로 직접 입력하지 않아도 된다.

일단 HEX 파일을 생성한 다음 위의 단계(실행 파일 로딩)에 따라 보드 메모리에 생성된 파일을 로드한다. 로더를 분리하면 LCD에 2라인 메시지가 표시된다.

결론

DS8007 EV 킷은 DS8007 듀얼 스마트 카드 인터페이스를 평가할 수 있는 간편하고 성능이 검증된 플랫폼을 제공한다. 이 킷과 Keil C 개발 툴을 이용하면 스마트 카드 애플리케이션 개발을 간소화할 수 있다..

부록 A. LCD 데모 코드

// file DS8007-2.c
//

#include <REG5000.H>                      // special function register declarations
//                                        // for the DS5000/5002 #include <string.h>
#include "LCD_Funct.h"




        int tmp = 0;
        uint8_t LCD_Str[42];


void main(void)
{

        // Initialize LCD Module, and display 2-line message.
        LCD_Init();
        strcpy(LCD_Str, "DS8007 Dual");                 // Create first line of LCD text
        tmp = LCD_Curpos(1,5);                          // Position cursor line 1 char 5
        if (tmp == 0) LCD_WRStr(LCD_Str);               // Write string to LCD

        strcpy(LCD_Str, "Smart Card Interface");        // Create 2nd line of LCD text
        tmp = LCD_Curpos(2,1);                          // Position cursor on line 2, char 1
        if (tmp == 0) LCD_WRStr(LCD_Str);               // Write string to LCD
        
        tmp = LCD_Curpos(1,20);                         // Return cursor to line 1 char 20

        while (1);                                      // Loop here to end program
}


void LCD_Init()
{
        LCD_Delay();                    // Delay to ensure that LCD power-up is complete
        
        LCD_WRCmd(FnctSet);             // Write FnctSet instruction
        LCD_WRCmd(DispCnt);             // Write Display Control instruction
        LCD_WRCmd(DispClear);           // Write Display Clear instruction
        LCD_WRCmd(EntryMode);           // Write Entry Mode instruction
}

// Write a string to the 2 x 20 LCD module
void LCD_WRStr(uint8_t LCD_Str[])
{
        int     i = 0;

        while ((LCD_Str[i] != '\0')     && (i < 20))
        {
                LCD_WRChr(LCD_Str[i]) ; // Write first 20 characters
                i++;
        }
        
        if  (LCD_Str[i] != '\0')
            LCD_WRCmd(Line2Ad);         // Set CGRAM address to first char 2nd line

        while ((LCD_Str[i] != '\0')     && (i < 40))
        {
                LCD_WRChr(LCD_Str[i]) ;
                i++;
        }
}

// Write a single character to the 2 x 20 LCD module
void LCD_WRChr(uint8_t LCD_Chr)
{
        LCD_Busy();                     // Wait until the LCD is not busy
        LCD_RS = 1;                     // Set RS high for character write
        LCD_Dat = LCD_Chr;              // Output character
        LCD_EN = 1;                     // Set enable high
        LCD_EN = 0;                     // Clear enable
        LCD_RS = 0;
        LCD_Dat = 0xFF;                 // Re-establish Port Pins as inputs
}

// Write a command to the 2 x 20 LCD module
void LCD_WRCmd(uint8_t LCD_Cmd)
{
        LCD_EN = 0;                     // Make sure that the LCD enable is low 
        LCD_RS = 0;                     // Set LCD register select and R/W lines
        LCD_RW = 0;
        LCD_Busy();                     // Make sure that the display is not busy

        LCD_Dat = LCD_Cmd;              // Output instruction
        LCD_EN = 1;                     // Set enable high
        LCD_EN = 0;                     // Clear enable
        LCD_Dat = 0xFF;                 // Re-establish Port Pins as inputs
}

// Set the cursor position to a specific location
int LCD_Curpos(uint8_t VPos, uint8_t HPos)
{
        int rtn;
        uint8_t Addr, Cmd;

        // Check input range 1..2 line, 1..20 characters per line
        if (((VPos == 0) || (VPos > 2)) || ((HPos == 0) || (HPos > 20)))
                rtn = -1;
        else
        {
                if(VPos == 2) Addr = (0x40 + (HPos - 1));
                else Addr = HPos - 1;
                rtn = 0;
                Cmd = Addr | 0x80;
                LCD_WRCmd(Cmd);
        }
        return(rtn);    
}

// Test the LCD Module to see if it is Busy (loop until
// not busy) 
void LCD_Busy()
{
        uint8_t LCD_Stat = LCD_Dat;     // Get byte containing status

        while (LCD_Stat & 0x80){        // Wait for busy flag to clear
                LCD_RW = 1;             // LCD RW needs to be high
                LCD_EN = 1;             // Strobe enable signal
                LCD_Stat = LCD_Dat;     // Read staus
                LCD_EN = 0;
                LCD_RW = 0;
        }
}

// Time delay for 2 x 20 LCD module (approximately 50ms)
void LCD_Delay()
{
        uint8_t i, j ;

        for (i=0;i!=100;i++)
        {
                for (j=0;j!=153;j++);
        }
}

µVision은 Keil Corporation의 등록상표이다.
Windows는 Microsoft Corporation의 등록상표이다.


의견을 보내주세요!
위 내용이 도움이 되셨나요?
여러분의 의견을 기다립니다 — Maxim은 보내주신 정정이나 제안사항을 반영하고 있습니다. 이 페이지를 평가하고 의견을 보내주십시오.


자동 업데이트
관심있는 분야의 애플리케이션 노트가 나올 때 자동으로 업데이트 받고 싶으세요? 그렇다면 EE-Mail™을 신청하십시오.



추가 정보  APP 4036: May 13, 2008
DS5002FP 보안 마이크로프로세서 칩 전체 데이터 시트
(PDF, 1.2MB)
무료 샘플
DS5250 고속 보안 마이크로컨트롤러 간략한 데이터 시트
(PDF, 100kB)
DS8007 멀티프로토콜 듀얼 스마트 카드 인터페이스 전체 데이터 시트
(PDF, 628kB)
무료 샘플
DS8007-KIT DS8007 EMV EV 킷 전체 데이터 시트
(PDF, 544kB)
 

다운로드, PDF 형식다운로드, PDF 형식 (153kB)
 AN4036, AN 4036, APP4036, Appnote4036, Appnote 4036



         


      개인정보보호 정책    법적 고지

      Copyright © 2008 by Maxim Integrated Products, Dallas Semiconductor