基于ARM的非接觸IC卡網(wǎng)絡系統(tǒng)
隨著計算機信息技術(shù)和超大規(guī)模集成電路技術(shù)的發(fā)展,以及芯片微型化封裝技術(shù)的日趨成熟,非接觸IC卡逐漸成為人們關(guān)注和研究的重點[1].非接觸IC卡作為一種全新的應用領(lǐng)域,具有無機械磨損、容易維護、方便使用、信息存儲量大[2][3]等特點。本文設計的非接觸IC卡網(wǎng)絡系統(tǒng)采用ARM處理器,在ARM上移植μC/OS-II實時操作系統(tǒng),嵌入TCP/IP[4];建立SQL Server 2000大型關(guān)系數(shù)據(jù)庫[5],同時,結(jié)合Delphi與SQL Server 2000數(shù)據(jù)庫編程技術(shù)和Delphi網(wǎng)絡編程技術(shù)[6][7][8]編寫管理軟件,實現(xiàn)TCP/IP網(wǎng)絡通信;利用ASP+SQL Server動態(tài)網(wǎng)站開發(fā)技術(shù)建立IIS5.1服務器網(wǎng)站,實現(xiàn)大規(guī)模的非接觸IC卡網(wǎng)絡管理系統(tǒng)[9][10],能滿足對信息載體的便攜性、高安全性、易用性、超大規(guī)模管理等要求。本系統(tǒng)可用于服務領(lǐng)域,如貨物銷售與后勤、商業(yè)、生產(chǎn)企業(yè)和材料流通等。
1 系統(tǒng)結(jié)構(gòu)和原理
系統(tǒng)設計分為C/S和B/S結(jié)構(gòu)。C/S結(jié)構(gòu)中主要包括專用讀卡芯片F(xiàn)M1702N、ARM組成的讀卡終端、SQL Server數(shù)據(jù)庫和Delphi編寫的管理軟件,系統(tǒng)管理員可以在管理界面對用戶進行注冊、修改、刪除、查詢等操作,在運行界面實時顯示各個讀卡終端的狀態(tài)并記錄在數(shù)據(jù)庫上。B/S主要有SQL Server數(shù)據(jù)庫和IIS5.1建立服務器網(wǎng)站,用戶能夠通過遠端的Web網(wǎng)頁查詢和管理IC卡信息。系統(tǒng)框圖如圖1所示。

2 系統(tǒng)硬件設計
硬件主要由三星S3C2410、FM1702N、RTL8019AS、LCD、JTAG、語音芯片、鍵盤等組成。S3C2410采用1.8V ARM920T內(nèi)核,帶有3.3V 16KB指令和16KB數(shù)據(jù)緩存及MMU單元,非線性(NAND)Flash引導單元,系統(tǒng)管理器(包括片選邏輯和SDRAM控制器),3通道的異步串行口(UART),4通道的DMA,實時時鐘單元(RTC),I2C總線接口,IIS總線接口,16/32位RISC微處理器。移植μC/OS-II操作系統(tǒng),嵌入TCP/IP協(xié)議,通過RTL8019AS以太網(wǎng)芯片實現(xiàn)TCP/IP網(wǎng)絡通信;FM1702N是讀卡專用芯片,主要實現(xiàn)對非接觸IC卡的讀寫操作; LCD實現(xiàn)顯示功能;JTAG 用于軟件調(diào)試使用;音頻實現(xiàn)語音功能;鍵盤實現(xiàn)對系統(tǒng)的輸入設置。硬件框圖如圖2所示。

2.1 FM1702N與S3C2410的接口電路
FM1702N與S3C2410的接口電路如圖3所示。FM1702N是上海復旦微電子股份有限公司設計的基于ISO14443標準、Mifare標準的三重認證算法的射頻IC卡讀卡專用芯片,采用0.6μm CMOS EPPROM工藝,支持多種加密算法,兼容飛利浦的MFRC530.內(nèi)部的發(fā)射器不需要增加有源電路就可以驅(qū)動近距離的天線(可達10cm)。接收電路中的FM1702N采用了正交解調(diào)電路解調(diào)RX腳上ISO14443標準的負載波信號。

FM1702N與S3C2410通過并行接口連接,F(xiàn)M1702N的IRQ與S3C2410的EINT1相連,采用外部中斷模式;FM1702N的數(shù)據(jù)D0~D7與S3C2410數(shù)據(jù)線的DATA0~DATA7相連;FM1702N的片選信號NCS接在S3C2410的nGCS1,對應的內(nèi)存地址為0X08000000~0X10000000;FM1702N的A0和A1接高電平,A2接低電平,工作在讀/寫選通模式下;WR、RD分別與S3C2410的nWE、nOE連接。穩(wěn)定的工作頻率對FM1702N非常重要,本設計外部時鐘源,時鐘信號加到OSCIN和OSCOUT端口,晶振頻率為13.56MHz,同時注意時鐘的占空比和防抖動,以保證時鐘信號的品質(zhì)。
2.2 讀寫器天線的設計
讀寫器天線的設計是與M1卡進行通信的關(guān)鍵,根據(jù)互感原理,半徑越大、匝數(shù)越多讀寫器上的天線和M1卡上天線的互感系數(shù)就越大。根據(jù)國際標準的要求,M1卡和讀寫器的通信距離為10cm.天線可等效成R、L、C并聯(lián)回路,等效電路圖如圖4所示, L為天線的自感,R為天線的等效電阻,C為天線的分布電容。

天線的品質(zhì)因數(shù)是設計天線時要注意的部分。根據(jù)國際無線通信標準ISO1444規(guī)定:無論TYPEA或TYPEB射頻IC卡,讀寫器和射頻IC卡之間的數(shù)據(jù)傳輸速度為106kb/s,載波頻率為13.56MHz,所以每一位數(shù)據(jù)維持時間是9.44μs.Type A型射頻IC卡讀寫器到射頻IC卡的信號編碼是修正米勒編碼,傳送每一位數(shù)具有3?滋s的載波中斷,因此,該信號的帶寬近似為B=333.333kHz,故讀寫器天線的品質(zhì)因數(shù)Q=13.56MHz/333.333kHz=35,天線的傳輸帶寬與品質(zhì)因數(shù)成反比關(guān)系。因此,過高的品質(zhì)因數(shù)會導致帶寬縮小,從而減弱讀寫器的調(diào)制邊帶,導致讀寫器無法與卡通信。耦合天線電感值L1(nH)采用下面公式進行估算:

式(1)中:l1為一圈導體的長度,D1為導線的直徑或PCB板的線寬(cm),K為線的形狀系數(shù)(環(huán)形K=1.07,矩形K=1.47),N1為環(huán)數(shù)[3].
2.3 RTL8019AS與S3C2410的接口電路
TRL8019AS與S3C2410的接口電路如圖5所示。RTL8019AS是高度集成以太網(wǎng)控制器,帶寬10MB/s~20MB/s,支持JUMPER和JUMPERLESS選項,集成10BASET收發(fā)器,BNC和AUI接口之間具有自動檢測功能,有8條IRQ總線和16條基本地址總線,支持16KB、32KB和64KB BROM和閃存接口。

通過雙向三態(tài)緩沖器74LS245實現(xiàn)TRL8019AS和S3C2410數(shù)據(jù)電平的轉(zhuǎn)換,采用外部中斷EINT1,TRL8019AS的地址與S3C2410的A0~A4連接,TRL8019AS的AEN與S3C2410的nCS3連接,對應的內(nèi)存地址ox18000000~ox20000000.
{$page$}
3 系統(tǒng)軟件設計
本系統(tǒng)程序設計分為下位機和上位機,μC/OS-II程序結(jié)構(gòu)如圖6所示。通過對OS_CFG.H文件的設置來裁剪操作系統(tǒng),在μC/OS-II中嵌入TCP/IP協(xié)議,編寫FM1702驅(qū)動、TRTL8019驅(qū)動、LCD顯示和語音驅(qū)動;建立SQL2000數(shù)據(jù)庫,Delphi前端數(shù)據(jù)庫管理軟件設計,ASP動態(tài)網(wǎng)站的制作。

讀卡時,非接觸IC卡的信息由FM1702N驅(qū)動,通過μC/OS-II操作系統(tǒng)向應用程序傳送,然后應用程序調(diào)用TCP/IP協(xié)議,TRL8019AS驅(qū)動以太網(wǎng)向PC上位機傳輸數(shù)據(jù),通過Delphi管理軟件對數(shù)據(jù)庫進行各種操作。寫卡時,PC機通過以太網(wǎng)TRL8019AS驅(qū)動TCP/IP協(xié)議,μC/OS-II的應用程序通過FM1702N驅(qū)動將信息寫入非接觸IC卡。
3.1 FM1702N驅(qū)動程序設計
FM1702N驅(qū)動程序的設計主要是對非接觸IC卡(簡稱M1卡)的讀寫操作,由S3C2410通過對讀卡專用芯片F(xiàn)M1702N的寄存器進行設置。FM1702N對M1卡操作流程圖如圖7所示。

尋卡(Request):當系統(tǒng)初始化后,F(xiàn)M1702N循環(huán)向天線發(fā)出尋卡信號。只要M1卡處在M1卡讀寫器天線的工作范圍之內(nèi),S3C2410控制讀寫器便向M1卡發(fā)出REQUEST all(或REQUEST std)命令。得到能量后,M1卡的ATR啟動,將M1卡Block0中的M1卡類型號共2個字節(jié)傳送給讀寫器,建立M1卡與讀寫器的第一步通信聯(lián)絡。如果不進行復位請求操作,讀寫器對M1卡的其它操作將不會進行。
防沖突機制(Anti collision loop):當有多張卡進入讀寫器操作范圍時,防沖突機制會從其中選擇一張進行操作,未選中的則處于空閑模式等待下一次選卡。該過程會返回被選卡的序列號。
選卡(Select Card):選擇被選中的M1卡的序列號,并同時返回卡的容量代碼。
三次相互認證(3 Pass Authentication):選定要處理的M1卡后,讀寫器就確定要訪問的扇區(qū)號,并對該扇區(qū)密碼進行密碼校驗,在三次相互認證之后就可以通過加密流進行通訊(在選擇另一扇區(qū)時則必須進行另一扇區(qū)密碼校驗)。三次認證的令牌原理框圖如圖8所示。

三次相互認證過程:
?。ˋ)環(huán):由M1卡向讀寫器發(fā)送一個隨機數(shù)據(jù)RB;
(B)環(huán):由讀寫器收到RB后向M1卡發(fā)送一個令牌數(shù)據(jù)TOKEN AB,其中包含讀寫器發(fā)出的一個隨機數(shù)據(jù)RA;
?。–)環(huán):M1卡接收到TOKEN AB后,對其加密部分進行解密,并校驗第一次由(A)環(huán)中M1卡發(fā)出的隨機數(shù)RB是否與(B)環(huán)中接收到的TOKEN AB 中的RB相一致;
(D)環(huán):如果(C)環(huán)校驗正確,則M1卡向讀寫器發(fā)送令牌TOKENBA;
(E)環(huán):讀寫器收到令牌TOKEN BA后,將對令牌TOKEN BA中的RB(隨機數(shù))進行解密,并校驗第一次由(B)環(huán)中讀寫器發(fā)出的隨機數(shù)RA是否與(D)環(huán)中接收到的TOKEN BA中的RA一致。如果上述的每一個環(huán)都為“真”,都能正確通過驗證,則整個認證過程成功;相反,認證過程中的任何一環(huán)出現(xiàn)差錯,整個認證失敗,必須重新開始。如果事先不知卡片上的密碼,由于密碼的變化極其復雜,因此靠猜測密碼而想打開卡上的一個扇區(qū)的可能性幾乎為零。
對數(shù)據(jù)塊的操作:讀(Read),讀一個塊;寫(Write),寫一個塊;加(Increment),對數(shù)值塊進行加值;減(Decrement),對數(shù)值塊進行減值;存儲(Restore),將塊中的內(nèi)容存到數(shù)據(jù)寄存器中;傳輸(Transfer),將數(shù)據(jù)寄存器中的內(nèi)容寫入塊中;中止(Halt),將卡置于暫停工作狀態(tài)。
3.2 RTL8019AS驅(qū)動程序的設計
RTL8019AS驅(qū)動設計的主要任務是完成芯片初始化及實現(xiàn)數(shù)據(jù)的收發(fā)功能。芯片初始化的主要任務是完成DCR(配置寄存器遠端DMA位數(shù))、PSTART(接收緩沖區(qū)起始頁的地址)、PSTOP(接收緩沖區(qū)的結(jié)束頁的地址)、TPSR(發(fā)送緩沖區(qū)的起始地址)、BNRY(指向最后一個已經(jīng)讀取的頁(讀指針))、CURR(當前的接收結(jié)束頁地址(寫指針))的初始化。設置發(fā)送緩沖區(qū)為0X40~0X4b,可存儲2個最大以太網(wǎng)數(shù)據(jù)包;將0X4c~0X7f設置為接收緩沖區(qū)。
發(fā)送數(shù)據(jù)時,先將待發(fā)送的數(shù)據(jù)通過遠程DMA寫入芯片RAM,給出發(fā)送緩沖區(qū)首地址和數(shù)據(jù)包長度,啟動發(fā)送命令(CR=0x3E),即可實現(xiàn)RTL8019AS的數(shù)據(jù)發(fā)送。
接收數(shù)據(jù)時,接收緩沖區(qū)構(gòu)成一個循環(huán)FIFO隊列,PSTART和PSTOP兩個寄存器限定了循環(huán)隊列的開始和結(jié)束頁,CURR為受芯片控制的寫入指針,BNRY為由主機程序控制的讀出指針。根據(jù)CURR是否等于BNRY+1,可以判斷是否收到新的數(shù)據(jù)包,新收到的數(shù)據(jù)包存于以CURR指定的地址為首地址的RAM中,即可實現(xiàn)數(shù)據(jù)的接收。
3.3 Delphi管理軟件
Delphi管理軟件的關(guān)鍵是對SQL Server數(shù)據(jù)庫的讀寫并用Winsocket編寫程序?qū)崿F(xiàn)TCP/IP網(wǎng)絡通信。首先在系統(tǒng)上安裝SQL Server 2000數(shù)據(jù)庫(本系統(tǒng)安裝的是SQL Server 2000個人版),然后打開“企業(yè)管理器”,在“控制臺根目錄”下打開“Microsoft SQL Servers”中的“SQL Server組”,點擊本地服務器使SQL Server啟動,在“數(shù)據(jù)庫”項上點擊右鍵選擇“新建數(shù)據(jù)庫”就可以建立數(shù)據(jù)庫,如果是已建好的數(shù)據(jù)庫也可以選擇“所有任務”中的附加數(shù)據(jù)庫。在系統(tǒng)上安裝Delphi7數(shù)據(jù)庫前端開發(fā)軟件之后,新建一個工程,在工程中建一個數(shù)據(jù)模塊,使用Delphi提供的ADO組件TADOConnection,通過設置ConnectionString屬性為“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=IcNet”連接數(shù)據(jù)庫(IcNet是本系統(tǒng)的數(shù)據(jù)庫名),利用TADOQuery執(zhí)行SQL語句,使用前設置TADOQuery的Connection屬性為ADOConnection,SQL語句如下:
- With ADOQuery do
- Begin
- Close;//關(guān)閉數(shù)據(jù)集
- SQL.Clear;//清空SQL語句
- SQL.Add(‘Select?鄢From tablename’);//添加SQL語句
- Open;//執(zhí)行SQL語句
- End;
通過SQL語句訪問SQL Server數(shù)據(jù)庫,實現(xiàn)對系統(tǒng)用戶的注冊、修改、刪除和查詢等操作。
Socket通信程序采用Delphi7中的ServerSocket和ClientSocket兩個組件實現(xiàn)TCP/IP網(wǎng)絡通信。ClientSocket組件為客戶端組件,是通信的請求方主動與服務器端建立連接。ServerSocket組件為服務器端組件,是通信的響應方,它的動作是監(jiān)聽以及被動接受客戶端的連接請求,并對請求進行回復。ServerSocket組件可以同時接受一個或多個ClientSocket組件的連接請求,并與每個ClientSocket組件建立單獨連接,進行單獨通信。在設計中,服務器端程序聲明了一個記錄類型:
- type
- client_record=record
- CHandle:integer; //客戶端套接字句柄
- CSocket:TCustomWinSocket; //客戶端套接字
- CName:string; //客戶端計算機名稱
- CAddress:string; //客戶端計算機IP地址
- CUsed:boolean; //客戶端聯(lián)機標志
- end;
- 定義一個公共數(shù)組:
- Session:array[0……CMax] of client_record;//客戶端連接數(shù)
- //組,CMax為最大連接數(shù)
- Sessions:integer; //客戶端連接數(shù)
記錄類型數(shù)據(jù)保存客戶端的信息,同時保存當前客戶端的連接狀態(tài)。其中CHandle保存客戶端套接字句柄,以便準確定位每個與服務器端保持連接的客戶端;Csocket保存客戶端套接字,通過它可以對客戶端進行回復;Cused記錄當前客戶端是否與服務器端保持連接。對組件ServerSocket的屬性進行設置,。Port是通信端口(端口號的有效范圍0~65535,大于49151的端口號一般為動態(tài)的),必須設置,本系統(tǒng)設為2222;。ServerTypt是服務器端讀寫信息類型,設置為stNonBlocking表示異步讀寫信息;。ThreadCacheSize是客戶端的最大連接數(shù),即服務器端最多允許多少客戶端同時連接通信,它可以根據(jù)系統(tǒng)的要求設置,其他屬性采用默認設置即可。組件ClientSocket的屬性設置,。Port是通信的端口,必須與服務器端的設置相同;。ClientType是客戶端讀寫信息類型,應該與服務器端的設置相同,為stNonBlocking表示異步讀寫信息;。Host是客戶端要連接的服務器的IP地址,必須設置,當然也可以在代碼中動態(tài)設置,其他屬性采用默認設置即可。
3.4 ASP動態(tài)網(wǎng)站
ASP動態(tài)網(wǎng)站采用ASP+SQL Server動態(tài)網(wǎng)站開發(fā)技術(shù)。首先在服務器上安裝IIS5.1軟件,打開管理工具的“internet服務管理器”,在“默認網(wǎng)站”上單擊鼠標右鍵,選擇“新建虛擬目錄”創(chuàng)建一個“非接觸IC卡網(wǎng)絡站點”,并對各項屬性進行設置。系統(tǒng)采用Macromedia Dreamweaver MX 2004開發(fā)平臺來編寫和調(diào)試ASP網(wǎng)頁代碼,首先在開發(fā)平臺上建立一個“非接觸IC卡網(wǎng)絡站點”,對站點的參數(shù)進行設置使其與IIS5.1服務器連接,在ASP動態(tài)網(wǎng)站中關(guān)鍵是對服務器SQL Server數(shù)據(jù)庫的訪問,因此建立了一個連接(conn.asp),以實現(xiàn)對SQL Server數(shù)據(jù)庫讀寫操作,語句如下:
- Set conn=Server.CreateObject(″ADODB.Connection″)
- conn.connectionstring=″Driver={SqlServer};Server=(local);UID=sa;database=IcNet″
- conn.open
- 當要訪問SQL Server數(shù)據(jù)庫時,除了要調(diào)用conn.asp連接數(shù)據(jù)庫(),還要創(chuàng)建一個記錄對象,語句如下:
- set rs=server.CreateObject(″adodb.recordset″)
- sql=″select?鄢from tablename where condition″
- rs.open sql,conn,3,3
這樣就可以實現(xiàn)對SQL Server數(shù)據(jù)庫的訪問操作。在設計時主要采用了VBScript和JAVAScript編程技術(shù),ASP中的Form標簽用來創(chuàng)建一個提交的表單數(shù)據(jù),利用Session對象記錄客戶端信息和Request對象從客戶端獲得信息等ASP+SQL Server動態(tài)網(wǎng)站開發(fā)技術(shù)。
{$page$}
4 系統(tǒng)測試
ARM讀卡終端與服務器建立網(wǎng)絡連接時,測讀寫器得到的數(shù)據(jù)如表1所示。當M1卡向不同的方向運動及M1卡處于靜止時,系統(tǒng)能正常工作;當M1卡被紙張、木材和塑料等非金屬或非透明的材質(zhì)包覆時,也可以進行穿透性通訊,但若是鐵質(zhì)金屬,則無法進行通訊。
從表1可以看出,讀寫器與M1卡之間讀寫的最大無沖突通訊時間都小于11ms,處理每個沖突時間只要1ms.一般情況下,50張M1卡在1s之內(nèi)可以處理完,所以該系統(tǒng)能應用于大規(guī)模的非接觸IC卡網(wǎng)絡管理,用于身份識別、計費、智能管理等實際應用中。

參考文獻
- [1] 陳欣,郎為民,王建秋,等。射頻識別技術(shù)安全問題[J].電子技術(shù),2004,(04):37-38.
- [2] 章曉卿,劉中元。非接觸式RFID讀寫器系統(tǒng)的研究[J].國外電子元器件,2006,(2):15-16.
- [3] Klaus Finkenzeller[德]著,陳大才編譯,王桌人審校。射頻識別技術(shù)[M].北京:電子工業(yè)出版社,2001.
- [4] LABROSSE J J著,邵貝貝譯。μC/OS-II-源代碼公開的實時嵌入式操作系統(tǒng)[M].北京:中國電力出版社,2001.
- [5] 賽奎春,宋坤。SQL Server數(shù)據(jù)庫開發(fā)實例解析[M].北京:機械工業(yè)出版社,2006.
- [6] 清宏計算機工作室。Delphi編程技術(shù)(網(wǎng)絡與數(shù)據(jù)庫篇)[M].北京:機械工業(yè)出版社,2001.
- [7] 馬海蓮。Delphi7組件應用實例[M].北京:電子工業(yè)出版社,2003.
- [8] 彭勇,王建芬。Delphi5.0網(wǎng)絡與通信開發(fā)應用[M].北京:中國水力出版社,2000.
- [9] 楊世襲,趙輝編。ASP+SQL Server動態(tài)網(wǎng)站開發(fā)從基礎到實踐[M].北京:電子工業(yè)出版社,2006.
- [10] 袁啟昌,景鵬森。ASP動態(tài)網(wǎng)頁設計教程[M].北京:科學出版社,2005.