摘要:本文闡述使用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++); } }
評論
查看更多