摘要:本文阐述使用DS8007双智能卡接口评估(EV)套件的步骤,解释了怎样安装和配置软件、配置硬件,建立并装载板上DS5002FP微控制器执行的应用软件。提供了一个简单的"Hello World"实例,以及几个C程序函数,以演示板上LCD模块的使用。
DS8007评估套件包括DS8007和DS5002FP安全微控制器,通过对其编程可提供完整的智能卡接口。它还提供两个智能卡插槽:一个用于标准信用卡和支付卡,一个用于用户识别模块(SIM)。DS8007评估板如图1所示。本文阐述该评估套件的使用步骤,如何开发并运行应用软件代码。
图1. DS8007评估板
DS8007为两个独立的智能卡和微控制器的物理连接提供所有必须的电信号。该器件包括一个专用内部序列发生器,控制卡自动激活和禁止,还含有用于数据通信的ISO UART。此外,DS8007的电荷泵和电压稳压器使其能够工作在2.7V至6.0V电压,并提供两路独立的智能卡供电电压,每一路都可以是1.8V、3.0V或者5.0V。标准并行8位总线以复用或非复用配置实现与微控制器的通信。
图3. 工程选项目标标签设置
图4. 工程选项输出标签设置
图5. MTK器件选择
图6. DS5002FP启动加载程序标志
按照上面的第1步到第10步(建立µVision工程),建立一个新工程和可执行文件。工程文件名为DS8007-2,C源代码文件名为DS8007-2.c。该程序的源代码在下面的附录A中给出。如果您不愿意输入这些信息,也可以从上面提到的FTP网站下载这些文件的.ZIP文件。
一旦建立了HEX文件,按照上面的步骤(装入可执行文件)将其装入到电路板的存储器中。和加载程序断开后,LCD将显示两行消息。
简介
DS8007评估(EV)套件为DS8007双智能卡接口评估提供方便、成熟的平台。DS8007是混合信号外设,管理微控制器和两个独立智能卡之间的所有接口。DS8007评估套件包括DS8007和DS5002FP安全微控制器,通过对其编程可提供完整的智能卡接口。它还提供两个智能卡插槽:一个用于标准信用卡和支付卡,一个用于用户识别模块(SIM)。DS8007评估板如图1所示。本文阐述该评估套件的使用步骤,如何开发并运行应用软件代码。
图1. DS8007评估板
DS8007为两个独立的智能卡和微控制器的物理连接提供所有必须的电信号。该器件包括一个专用内部序列发生器,控制卡自动激活和禁止,还含有用于数据通信的ISO UART。此外,DS8007的电荷泵和电压稳压器使其能够工作在2.7V至6.0V电压,并提供两路独立的智能卡供电电压,每一路都可以是1.8V、3.0V或者5.0V。标准并行8位总线以复用或非复用配置实现与微控制器的通信。
软件设置
本应用笔记中,应该在计算机上安装并运行Dallas Semiconductor的微控制器工具套件(MTK)和Keil公司的PK51专业开发工具软件。两个软件包都含在DS8007评估套件中。下面的章节说明安装这些应用软件的步骤。如果您已经在计算机上安装了这些应用软件,那么可以略过说明安装过程的这些章节。安装微控制器工具套件
- 将DS8007评估套件安装CD插入到计算机的CD-ROM驱动器中。CD将自动启动,显示DS8007评估套件欢迎界面。如果CD-ROM没有自动启动,请浏览CD根目录文件夹,双击index.html文件。
- 单击"Install MTK"按钮,单击"Run"按钮,开始安装。
- 在MTK安装期间,选择默认设置。注意:可能会出现安全报警,这取决于您的网络浏览器安全设置以及您的Windows®版本。如果的确出现了报警,接受它,继续安装。
安装Keil专业开发工具
- 安装Keil公司的PK51专业开发工具套件时,将Keil微控制器开发工具CD (含在DS8007评估套件中)插入到您计算机的CD-ROM驱动器中。CD会自动启动,显示主菜单。如果CD-ROM没有自动启动,请浏览CD根目录文件夹,双击setup.exe文件。
- 在主菜单上,选择"Install Evaluation Software",然后选择"C51 Compiler (Eval Tools)"。
- 按照屏幕显示的提示,在计算机上安装Keil工具。
硬件设置
配置DS8007评估套件电路板时,需要正确设置跳线,将串口和计算机相连,并连接电源。下面详细说明这些步骤。- 按照图2,连接跳接器1到13,其详细说明在表1中。
- 将所提供的串行电缆的一端连接至电路板DB-9连接器(J6),另一端连接至计算机的COM口。
- 将评估套件中的5V ±5%、300mA稳压电源的2.5mm中心正极电源连接至电路板的J7电源连接器。
图2. 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工程
在计算机上安装了Keil C51开发工具后,单击生成的图标,启动µVision程序。我们将按照以下步骤为演示程序建立一个工程文件和C程序文件:- 在工程标题栏,选择"New Project",输入DS8007-1作为工程名。
- 当出现了"Select Device for Target"时,从器件选择列表中选择Dallas Semiconductor和DS5002FP。
- 当"Copy Standard 8051 Startup Code to Project Folder and Add File to Project"消息出现时,单击"Yes"按钮。
- 单击"File",然后是"New",输入以下信息,建立源文件。如果您更愿意下载该文件,则可以下载(ZIP, 11kB)。
// File DS8007-1.C #include
// special function register declarations // // for the DS5000/5002 #include // 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. } - 输入这些文本后,单击"File",然后是"Save As",输入"DS8007-1.c"作为文件名,保存该文件。
- 右键单击工程工作空间窗口中的Target 1,将该文件加到工程列表中,然后单击"Manage Components"选项。在Project Components标签下,单击"Add Files"按钮,在文件名区输入文件名(DS8007-1.c)。单击"Add"按钮,然后单击"Close"按钮。单击"OK"按钮,关闭Components窗口。您会看到该文件已经被加入到Source Group 1中。
- 右键单击工程工作空间中的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"。该窗口中的所有其他选项不进行设置,为默认状态。
- 在Output标签中,选中"Create Executable" (如果还没有选它),确定选中了"Create HEX File"框。从下拉选择框中选择HEX Format of HEX-80,如图4所示。该窗口中的所有其他选项都应保持默认状态。单击"OK",关闭'Target 1'窗口的Options for Target。
- 单击"File",然后是"Save All",保存工程文件。
- 单击"Project"标题栏,选择"Rebuild All Target Files",建立可执行文件。屏幕底部的构建窗口应显示0 Error(s), 0 Warning(s)。如果没有这一显示,则应该找到错误,进行必要的改正。重复该步骤,直到不再报告错误为止。
图3. 工程选项目标标签设置
图4. 工程选项输出标签设置
装载可执行文件
按照上述步骤对硬件进行配置后,DS8007电路板将连接到计算机的COM口。现在应对处理器进行配置,使其能够知道怎样访问板上存储器。向处理器的MCON和RPCTL寄存器写入对应的数值可完成该任务,按下面步骤进行。- 在您的计算机上找到MTK程序,启动它。
- 在Select Device窗口中选择"DS5002FP" (图5),单击"OK"。
- 单击"Options",然后单击"Configure Serial Port"。选择DS8007电路板所要连接的计算机端口,例如COM1。然后,从下拉菜单中选择"Speed 38400",单击"OK"。
- 单击"Target",单击"Open COM1 at 38400 baud"。
- 确定电路板的串口已经和计算机建立了连接,并加载了5V电源。单击"Target"和"Connect to Loader"。如果连接成功,DS5002FP将显示其启动加载程序标志,如图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"错误消息,说明该部分有自己的安全锁定设置。要对该部分进行解锁,在加载程序提示符 >下输入解锁命令(U)即可。这样做会破坏存储在处理器存储器中的信息,但是该部分解锁后,可以输入上面的寄存器命令。发出读寄存器命令(> R)后,DS5002FP报告寄存器MCON (0A)和RPCTL (81)的状态。DS5002FP还显示MSL位的状态(参见安全微控制器用户指南(English only),了解详细信息),该例中为01。
- 单击"File",然后选择"Load SRAM"。选择文件DS8007-1.HEX,然后单击"OPEN"。DS5002FP处理器的响应是: > Loading File ...\DS8007-1.hex
> Loading File ...\DS8007-1.hex
通过显示一连串的圆点表示正在装载。 - 完成后,处理器将报告"Load complete",单击"Target",然后单击"Disconnect from Loader",执行程序。
图5. MTK器件选择
图6. DS5002FP启动加载程序标志
评估LCD模块
为演示DS8007评估套件非常有用的一项功能,我们现在建立一个应用程序,在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将显示两行消息。
结论
DS8007评估套件为DS8007双路智能卡接口评估提供方便、成熟的平台。套件和Keil C语言开发工具简化了智能卡应用程序的开发过程。附录A. LCD演示程序
// file DS8007-2.c // #include// special function register declarations // // for the DS5000/5002 #include #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++); } }
评论
查看更多