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

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

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

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

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

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

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

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

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

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

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