简介DS8007评估(EV)套件为DS8007双智能卡接口评估提供方便、成熟的平台。DS8007是混合信号外设,管理微控制器和两个独立智能卡之间的所有接口。
DS8007评估套件包括DS8007和DS5002FP安全微控制器,通过对其编程可提供完整的智能卡接口。它还提供两个智能卡插槽:一个用于标准xyk和支付卡,一个用于用户识别模块(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公司的PK51专业开发工具套件时,将Keil微控制器开发工具CD (含在DS8007评估套件中)插入到您计算机的CD-ROM驱动器中。CD会自动启动,显示主菜单。如果CD-ROM没有自动启动,请浏览CD根目录文件夹,双击setup.exe文件。
- 在主菜单上,选择"Install EvaluaTIon Software",然后选择"C51 Compiler (Eval Tools)"。
- 按照屏幕显示的提示,在计算机上安装Keil工具。
- 按照图2,连接跳接器1到13,其详细说明在表1中。
- 将所提供的串行电缆的一端连接至电路板DB-9连接器(J6),另一端连接至计算机的COM口。
- 将评估套件中的5V ±5%、300mA稳压电源的2.5mm中心正极电源连接至电路板的J7电源连接器。
图2. DS8007电路板跳线位置
建立并装载可执行文件下一步是建立.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 - 输入这些文本后,单击"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') LCD_WRCmd(Line2Ad); // Set CGRAM address to first char 2nd line while ((LCD_Str[i] != '// 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] != '
') && (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, An ARM Company的注册商标。Windows是Microsoft Corp.的注册商标。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)