簡(jiǎn)介
DS8007評(píng)估(EV)套件為DS8007雙智能卡接口評(píng)估提供方便、成熟的平臺(tái)。DS8007是混合信號(hào)外設(shè),管理微控制器和兩個(gè)獨(dú)立智能卡之間的所有接口。DS8007評(píng)估套件包括DS8007和DS5002FP安全微控制器,通過(guò)對(duì)其編程可提供完整的智能卡接口。它還提供兩個(gè)智能卡插槽:一個(gè)用于標(biāo)準(zhǔn)信用卡和支付卡,一個(gè)用于用戶識(shí)別模塊(SIM)。DS8007評(píng)估板如圖1所示。本文闡述該評(píng)估套件的使用步驟,如何開(kāi)發(fā)并運(yùn)行應(yīng)用軟件代碼。
圖1. DS8007評(píng)估板
DS8007為兩個(gè)獨(dú)立的智能卡和微控制器的物理連接提供所有必須的電信號(hào)。該器件包括一個(gè)專用內(nèi)部序列發(fā)生器,控制卡自動(dòng)激活和禁止,還含有用于數(shù)據(jù)通信的ISO UART。此外,DS8007的電荷泵和電壓穩(wěn)壓器使其能夠工作在2.7V至6.0V電壓,并提供兩路獨(dú)立的智能卡供電電壓,每一路都可以是1.8V、3.0V或者5.0V。標(biāo)準(zhǔn)并行8位總線以復(fù)用或非復(fù)用配置實(shí)現(xiàn)與微控制器的通信。
軟件設(shè)置
本應(yīng)用筆記中,應(yīng)該在計(jì)算機(jī)上安裝并運(yùn)行Dallas Semiconductor的微控制器工具套件(MTK)和Keil公司的PK51專業(yè)開(kāi)發(fā)工具軟件。兩個(gè)軟件包都含在DS8007評(píng)估套件中。下面的章節(jié)說(shuō)明安裝這些應(yīng)用軟件的步驟。如果您已經(jīng)在計(jì)算機(jī)上安裝了這些應(yīng)用軟件,那么可以略過(guò)說(shuō)明安裝過(guò)程的這些章節(jié)。安裝微控制器工具套件
- 將DS8007評(píng)估套件安裝CD插入到計(jì)算機(jī)的CD-ROM驅(qū)動(dòng)器中。CD將自動(dòng)啟動(dòng),顯示DS8007評(píng)估套件歡迎界面。如果CD-ROM沒(méi)有自動(dòng)啟動(dòng),請(qǐng)瀏覽CD根目錄文件夾,雙擊index.html文件。
- 單擊"Install MTK"按鈕,單擊"Run"按鈕,開(kāi)始安裝。
- 在MTK安裝期間,選擇默認(rèn)設(shè)置。注意:可能會(huì)出現(xiàn)安全報(bào)警,這取決于您的網(wǎng)絡(luò)瀏覽器安全設(shè)置以及您的Windows?版本。如果的確出現(xiàn)了報(bào)警,接受它,繼續(xù)安裝。
安裝Keil專業(yè)開(kāi)發(fā)工具
- 安裝Keil公司的PK51專業(yè)開(kāi)發(fā)工具套件時(shí),將Keil微控制器開(kāi)發(fā)工具CD (含在DS8007評(píng)估套件中)插入到您計(jì)算機(jī)的CD-ROM驅(qū)動(dòng)器中。CD會(huì)自動(dòng)啟動(dòng),顯示主菜單。如果CD-ROM沒(méi)有自動(dòng)啟動(dòng),請(qǐng)瀏覽CD根目錄文件夾,雙擊setup.exe文件。
- 在主菜單上,選擇"Install Evaluation Software",然后選擇"C51 Compiler (Eval Tools)"。
- 按照屏幕顯示的提示,在計(jì)算機(jī)上安裝Keil工具。
硬件設(shè)置
配置DS8007評(píng)估套件電路板時(shí),需要正確設(shè)置跳線,將串口和計(jì)算機(jī)相連,并連接電源。下面詳細(xì)說(shuō)明這些步驟。- 按照?qǐng)D2,連接跳接器1到13,其詳細(xì)說(shuō)明在表1中。
- 將所提供的串行電纜的一端連接至電路板DB-9連接器(J6),另一端連接至計(jì)算機(jī)的COM口。
- 將評(píng)估套件中的5V ±5%、300mA穩(wěn)壓電源的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) |
建立并裝載可執(zhí)行文件
下一步是建立.HEX文件,它可以下載到電路板存儲(chǔ)器中,由DS5002FP運(yùn)行。建立該文件需要配置Keil μVision?工程文件,以建立正確的可裝載文件,然后將其下載到電路板的非易失存儲(chǔ)器中。建立μVision工程
在計(jì)算機(jī)上安裝了Keil C51開(kāi)發(fā)工具后,單擊生成的圖標(biāo),啟動(dòng)μVision程序。我們將按照以下步驟為演示程序建立一個(gè)工程文件和C程序文件:- 在工程標(biāo)題欄,選擇"New Project",輸入DS8007-1作為工程名。
- 當(dāng)出現(xiàn)了"Select Device for Target"時(shí),從器件選擇列表中選擇Dallas Semiconductor和DS5002FP。
- 當(dāng)"Copy Standard 8051 Startup Code to Project Folder and Add File to Project"消息出現(xiàn)時(shí),單擊"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"選項(xiàng)。在Project Components標(biāo)簽下,單擊"Add Files"按鈕,在文件名區(qū)輸入文件名(DS8007-1.c)。單擊"Add"按鈕,然后單擊"Close"按鈕。單擊"OK"按鈕,關(guān)閉Components窗口。您會(huì)看到該文件已經(jīng)被加入到Source Group 1中。
- 右鍵單擊工程工作空間中的Target 1,選擇"Options for Target 'Target 1",配置工程選項(xiàng)。單擊Target標(biāo)簽,在Xtal框中輸入14.7。如下面的圖3所示,Memory Model選擇"Small: variables in DATA",Code ROM Size選擇"Large: 64K program",Operating system選擇"None"。該窗口中的所有其他選項(xiàng)不進(jìn)行設(shè)置,為默認(rèn)狀態(tài)。
- 在Output標(biāo)簽中,選中"Create Executable" (如果還沒(méi)有選它),確定選中了"Create HEX File"框。從下拉選擇框中選擇HEX Format of HEX-80,如圖4所示。該窗口中的所有其他選項(xiàng)都應(yīng)保持默認(rèn)狀態(tài)。單擊"OK",關(guān)閉'Target 1'窗口的Options for Target。
- 單擊"File",然后是"Save All",保存工程文件。
- 單擊"Project"標(biāo)題欄,選擇"Rebuild All Target Files",建立可執(zhí)行文件。屏幕底部的構(gòu)建窗口應(yīng)顯示0 Error(s), 0 Warning(s)。如果沒(méi)有這一顯示,則應(yīng)該找到錯(cuò)誤,進(jìn)行必要的改正。重復(fù)該步驟,直到不再報(bào)告錯(cuò)誤為止。
圖3. 工程選項(xiàng)目標(biāo)標(biāo)簽設(shè)置
圖4. 工程選項(xiàng)輸出標(biāo)簽設(shè)置
裝載可執(zhí)行文件
按照上述步驟對(duì)硬件進(jìn)行配置后,DS8007電路板將連接到計(jì)算機(jī)的COM口?,F(xiàn)在應(yīng)對(duì)處理器進(jìn)行配置,使其能夠知道怎樣訪問(wèn)板上存儲(chǔ)器。向處理器的MCON和RPCTL寄存器寫(xiě)入對(duì)應(yīng)的數(shù)值可完成該任務(wù),按下面步驟進(jìn)行。- 在您的計(jì)算機(jī)上找到MTK程序,啟動(dòng)它。
- 在Select Device窗口中選擇"DS5002FP" (圖5),單擊"OK"。
- 單擊"Options",然后單擊"Configure Serial Port"。選擇DS8007電路板所要連接的計(jì)算機(jī)端口,例如COM1。然后,從下拉菜單中選擇"Speed 38400",單擊"OK"。
- 單擊"Target",單擊"Open COM1 at 38400 baud"。
- 確定電路板的串口已經(jīng)和計(jì)算機(jī)建立了連接,并加載了5V電源。單擊"Target"和"Connect to Loader"。如果連接成功,DS5002FP將顯示其啟動(dòng)加載程序標(biāo)志,如圖6所示。
- 在 > 提示符下,輸入以下命令來(lái)配置MCON和RPCTL寄存器:
> W MCON 0A > W RPCTL 01 > R MCON:0A RPCTL:81 MSL:01 Microcontroller's response to read register command
如果在輸入啟動(dòng)加載程序命令時(shí),您收到"E: LOCKED"錯(cuò)誤消息,說(shuō)明該部分有自己的安全鎖定設(shè)置。要對(duì)該部分進(jìn)行解鎖,在加載程序提示符 >下輸入解鎖命令(U)即可。這樣做會(huì)破壞存儲(chǔ)在處理器存儲(chǔ)器中的信息,但是該部分解鎖后,可以輸入上面的寄存器命令。發(fā)出讀寄存器命令(> R)后,DS5002FP報(bào)告寄存器MCON (0A)和RPCTL (81)的狀態(tài)。DS5002FP還顯示MSL位的狀態(tài)(參見(jiàn)安全微控制器用戶指南(English only),了解詳細(xì)信息),該例中為01。
- 單擊"File",然后選擇"Load SRAM"。選擇文件DS8007-1.HEX,然后單擊"OPEN"。DS5002FP處理器的響應(yīng)是: > Loading File ...\DS8007-1.hex
> Loading File ...\DS8007-1.hex
通過(guò)顯示一連串的圓點(diǎn)表示正在裝載。 - 完成后,處理器將報(bào)告"Load complete",單擊"Target",然后單擊"Disconnect from Loader",執(zhí)行程序。
圖5. MTK器件選擇
圖6. DS5002FP啟動(dòng)加載程序標(biāo)志
評(píng)估LCD模塊
為演示DS8007評(píng)估套件非常有用的一項(xiàng)功能,我們現(xiàn)在建立一個(gè)應(yīng)用程序,在2行20字符的液晶顯示屏(LCD)上顯示一條消息。但是在開(kāi)始前,必須設(shè)置LCD的對(duì)比度,使其在程序執(zhí)行時(shí)能夠正確地顯示消息。首先,對(duì)電路板加電,LCD應(yīng)不亮。找到電路板上的可變電阻R7 (參見(jiàn)上面的圖2),使用小螺絲刀對(duì)電阻進(jìn)行調(diào)整,直到一個(gè)5 x 7點(diǎn)陣出現(xiàn)在顯示屏的字符位置。慢慢調(diào)整R7,直到點(diǎn)陣剛剛消失。這設(shè)置LCD的對(duì)比度,使我們能夠看到字符,而看不到間隔。按照上面的第1步到第10步(建立μVision工程),建立一個(gè)新工程和可執(zhí)行文件。工程文件名為DS8007-2,C源代碼文件名為DS8007-2.c。該程序的源代碼在下面的附錄A中給出。如果您不愿意輸入這些信息,也可以從上面提到的FTP網(wǎng)站下載這些文件的.ZIP文件。
一旦建立了HEX文件,按照上面的步驟(裝入可執(zhí)行文件)將其裝入到電路板的存儲(chǔ)器中。和加載程序斷開(kāi)后,LCD將顯示兩行消息。
結(jié)論
DS8007評(píng)估套件為DS8007雙路智能卡接口評(píng)估提供方便、成熟的平臺(tái)。套件和Keil C語(yǔ)言開(kāi)發(fā)工具簡(jiǎn)化了智能卡應(yīng)用程序的開(kāi)發(fā)過(guò)程。附錄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++); } }
評(píng)論
查看更多