物聯(lián)傳媒 旗下網(wǎng)站
登錄 注冊
RFID世界網(wǎng) >  技術文章  >  其他  >  正文

基于Linux串口的非接觸式IC卡開發(fā)應用

作者:姜遠 高嶺 楊建鋒
來源:中國一卡通網(wǎng)
日期:2008-07-09 11:53:13
摘要:在Linux 操作系統(tǒng)平臺下的串口通信基礎上,研究了如何通過編寫程序?qū)崿F(xiàn)在Linux系統(tǒng)下,應用字符設備開發(fā)IC卡設備驅(qū)動模塊?;贚inttx串口編程和非接觸式IC卡應用設計并實現(xiàn)了一個串口通訊過程,并以相應的程序?qū)嵗右哉f明。有效利用了非接觸式IC卡的特點,提高了讀寫卡的速度。

0 引 言 

    隨著信息技術的快速發(fā)展,個人數(shù)據(jù)將成為未來信息的主要角色。IC卡作為卡基應用系統(tǒng)中的一種卡型,利用安裝在卡中的集成電路(IC)來記錄和傳遞信息,是一種將個人信息有效地送人信息網(wǎng)絡并獲得所需結(jié)果的有效辦法。IC卡芯片具有寫入數(shù)據(jù)和存儲數(shù)據(jù)的能力,IC卡存儲器中的內(nèi)容根據(jù)需要可以有條件地供外部讀取,或供內(nèi)部信息處理和判定之用。作為IC卡與讀寫設備數(shù)據(jù)交換的一種方式,非接觸式IC卡是通過無線電波或電磁場感應的方式,將卡中集成電路內(nèi)的數(shù)據(jù)與外部設備接口設備通信,卡片不用直接接觸接口設備的電極就可以進行數(shù)據(jù)讀寫。通信距離可以從幾厘米至幾十米遠。其主要優(yōu)點是環(huán)境適應性強、可全天候、無接觸地完成自動識別、跟蹤與管理。

1 Linux中的串口通信設備模塊 

1.1 Linux設備文件 

    在Linux中硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對硬件設備進行操作。這些設備文件提供了到大多數(shù)物理設備的接口,它們分為字符設備、塊設備和網(wǎng)絡設備。 

    (1)字符設備:在存取時沒有緩存的設備,不使用系統(tǒng)緩沖,對設備文件的操作直接反映到硬件上,串口就屬于字符設備。
    (2)塊設備:讀寫都有緩存的支持,并且能夠隨機存取。主要包括軟盤設備、CD—ROM等。
    (3)網(wǎng)絡設備:任何網(wǎng)絡設備都要經(jīng)過一個網(wǎng)絡接151即一個能夠和其它主機交換數(shù)據(jù)的設備,通常接口是個硬件設備但也可能是個純軟件設備。 

1.2 串口通信的設置 

    對串口硬件設備進行操作,有兩種方法:一是利用Linux內(nèi)核自帶的串口驅(qū)動程序;另外一種方法就是直接瀆寫串口硬件端口,在這里只使用第一種方法。要設置串口屬性,首先應在程序中包含termios.h的頭文件,這個頭文件包含終端控制結(jié)構(gòu)和控制函數(shù)。

    其中有一個非常重要的數(shù)據(jù)結(jié)構(gòu)struct temfios,這個數(shù)據(jù)結(jié)構(gòu)包含了所有的串口參數(shù),如波特率、數(shù)據(jù)位、輸入輸出方式等。設置串口屬性就是對這個數(shù)據(jù)結(jié)構(gòu)賦值??梢酝ㄟ^termios. h中的函數(shù)tssetattr()設置串口的termios參數(shù);通過函數(shù)tsgetattr()獲取串口的termios參數(shù)。該數(shù)據(jù)結(jié)構(gòu)的各成員的屬性值以及參數(shù)含義可以參考文獻[1]。 

    設置完通信參數(shù)后就可用read從串口讀取數(shù)據(jù)和write向串口寫數(shù)據(jù)了,其實質(zhì)就是對串口文件進行讀寫。運行程序時要注意用戶是否有對要操作的串口文件進行讀寫的權力,可以用chmod命令進行文件權限修改。

2 非接觸式IC卡簡介 

    Mifare 1 IC智能(射頻)卡的核心是Philips公司的Mifare 1 IC $50。內(nèi)建有高速的CMOS EEPROMMCU等??ㄆ铣薎C微晶片及一副高效率天線外無任何其他元件,無源(無任何電池),工作時的電源能量由卡片讀寫器天線發(fā)送無線電載波信號耦合到卡片上天線而產(chǎn)生電能,一般可達2V以上供卡片上IC工作工作頻率13.56Mttz。 

    Mifare 1 IC卡上具有先進的數(shù)據(jù)通信加密并雙向驗證密碼系統(tǒng);且具有防重疊功能,能在同一時間處理重疊在卡片讀寫器天線的有效工作距離內(nèi)的多張重疊的卡片。其通訊原理如圖1所示。

圖1 Mifare 1 IC卡讀寫流程圖 

3 IC卡設備在Linux下的開發(fā)實現(xiàn) 

    采取通用的Mifare S50卡為例,詳細描述其在校園機房的使用。 

3.1 建立相應的數(shù)據(jù)結(jié)構(gòu) 

    在頭文件AcctData.h中,定義結(jié)構(gòu)體AcctItem,用于反映機器的使用狀態(tài),頭文件ICCard.h中,定義類ICCard用于反映IC卡的使用狀態(tài)。確定在驅(qū)動模塊程序中應用的數(shù)據(jù)結(jié)構(gòu)的最終目的是讀取和寫入卡數(shù)據(jù)處理,所以規(guī)范整齊的數(shù)據(jù)結(jié)構(gòu)是必須的。


通訊模式及率
}; 

    這樣,就定義了全部的卡處理數(shù)據(jù)結(jié)構(gòu)定義以及設備操作映射函數(shù)結(jié)構(gòu),綜上所述,就實現(xiàn)了IC卡設備的打開、讀寫和監(jiān)控函數(shù) 。 

3.2 模塊初始化函數(shù)的實現(xiàn) 

    模塊初始化函數(shù)是模塊開發(fā)過程中必不可少的處理函數(shù),用于實現(xiàn)設備的初始化,中斷初始化及處理設備等。

    在上面類中首先應用GetCardData(char*,CardData&)實現(xiàn)了卡數(shù)據(jù)的初始化;然后定義了隊列數(shù)據(jù),再進行了上機處理以及下機處理,故障恢復處理;最后實現(xiàn)了恢復故障處理。
 
3.3 中斷處理 

    模塊采用了定時器中斷,在每個定時器中斷發(fā)生時對刷卡狀況進行檢測,如果在天線范圍內(nèi)檢測到刷卡,根據(jù)使用標記進行判斷,未使用則進行讀卡操作;使用中則進行寫卡操作,同時更新IC卡的狀態(tài)數(shù)據(jù)。
 
    程序中的中斷處理采用了信號量機制來實現(xiàn)中斷的后續(xù)處理,其處理流程為:


3.4 注銷模塊處理 

    用于模塊卸載時進行資源的釋放,在關閉串口前,需要通過tcsetattr(fd,TCSANOW,&oldtio);將串口參數(shù)恢復為原來的設置,最后通過close系統(tǒng)調(diào)用關閉串口,如下所述:

3.5 設備的讀、寫和配置函數(shù) 

    主要是通過實現(xiàn)IC卡的各種操作,在先前的類ICCard中已經(jīng)介紹,根據(jù)Mirare 1 IC的通訊原理,實現(xiàn)卡的初始化操作。 

    綜上所述,卡驅(qū)動模塊的基本實現(xiàn)原理是:當有刷卡操作發(fā)生時,由使用標記引發(fā)中斷或進行讀卡操作;或進行寫卡操作,同時進行相應數(shù)據(jù)處理。從而實現(xiàn)有卡操作發(fā)生時馬上進行卡數(shù)據(jù)的更新[ 。 

4 模塊的編譯調(diào)試 

編寫相應的makefile文件:

chown root$(BINDIR)/pubacct
chown u+s$(BINDIR)/pubacct
clean:
rm-f*.o pubaect 

    執(zhí)行幾個make命令,便可以實現(xiàn)驅(qū)動模塊的動態(tài)編譯。
 
5 結(jié)束語 

    文中筆者創(chuàng)新點:介紹了非接觸式IC卡的概況和發(fā)展前景。有助于有一定IC卡經(jīng)驗、技術及具有一定的計算機軟緞件技術的研發(fā)者設計出諸多應用場合的產(chǎn)品。這里只是截取了IC卡應用的一個方向,以及簡單的設計開發(fā)。在其它的高級應用中還可以加入密鑰保護等措施。 

    基金項目:陜西省自然科學基金項目(2005f36)
    作者簡介;姜遠(1978--),男,陜西西安人,西北大學信息學院,碩士研究生,研究方向 為網(wǎng)絡管理;高嶺,教授,西北大學信息學院,研究方向為網(wǎng)絡測量和網(wǎng)絡管理。楊建鋒,西北大學現(xiàn)代技術教育中心

    參考文獻:
    [1] 劉崢嶸,張智超,許振山.嵌入式Linux應用開發(fā)詳解[M].北京:機械工業(yè)出版社,2005.
    [2] 尤晉元.UNIX環(huán)境高級編程[M].北京:機械工業(yè)出版社,2004.
    [3] Sweet M R.Se蒯Programing Guide for FOSIX Operating Systems[M].[s.I.]:O’Reilly& Associates,2002.
    [4] BaumannPH.SerialProgrammingHOWTO[M].[S.1.]:O’Reiuy& Associates,20o0.
    [5] 龍飛,李曉帆,蔡志開,等.一個利用多線程及重疊I/O實現(xiàn)的串口通信類[J].微機發(fā)展,2004,14(3):51—53.