基于Linux串口的非接觸式IC卡開(kāi)發(fā)應用
文章出處:http://psychicreadingswithdeb.com 作者:姜遠 高嶺 楊建鋒 人氣: 發(fā)表時(shí)間:2011年09月23日
0 引 言
隨著(zhù)信息技術(shù)的快速發(fā)展,個(gè)人數據將成為未來(lái)信息的主要角色。IC卡作為卡基應用系統中的一種卡型,利用安裝在卡中的集成電路(IC)來(lái)記錄和傳遞信息,是一種將個(gè)人信息有效地送人信息網(wǎng)絡(luò )并獲得所需結果的有效辦法。IC卡芯片具有寫(xiě)入數據和存儲數據的能力,IC卡存儲器中的內容根據需要可以有條件地供外部讀取,或供內部信息處理和判定之用。作為IC卡與讀寫(xiě)設備數據交換的一種方式,非接觸式IC卡是通過(guò)無(wú)線(xiàn)電波或電磁場(chǎng)感應的方式,將卡中集成電路內的數據與外部設備接口設備通信,卡片不用直接接觸接口設備的電極就可以進(jìn)行數據讀寫(xiě)。通信距離可以從幾厘米至幾十米遠。其主要優(yōu)點(diǎn)是環(huán)境適應性強、可全天候、無(wú)接觸地完成自動(dòng)識別、跟蹤與管理。
1 Linux中的串口通信設備模塊
1.1 Linux設備文件
在Linux中硬件設備只是一個(gè)設備文件,應用程序可以像操作普通文件一樣對硬件設備進(jìn)行操作。這些設備文件提供了到大多數物理設備的接口,它們分為字符設備、塊設備和網(wǎng)絡(luò )設備。
(1)字符設備:在存取時(shí)沒(méi)有緩存的設備,不使用系統緩沖,對設備文件的操作直接反映到硬件上,串口就屬于字符設備。
(2)塊設備:讀寫(xiě)都有緩存的支持,并且能夠隨機存取。主要包括軟盤(pán)設備、CD—ROM等。
(3)網(wǎng)絡(luò )設備:任何網(wǎng)絡(luò )設備都要經(jīng)過(guò)一個(gè)網(wǎng)絡(luò )接151即一個(gè)能夠和其它主機交換數據的設備,通常接口是個(gè)硬件設備但也可能是個(gè)純軟件設備。
1.2 串口通信的設置
對串口硬件設備進(jìn)行操作,有兩種方法:一是利用Linux內核自帶的串口驅動(dòng)程序;另外一種方法就是直接瀆寫(xiě)串口硬件端口,在這里只使用第一種方法。要設置串口屬性,首先應在程序中包含termios.h的頭文件,這個(gè)頭文件包含終端控制結構和控制函數。
其中有一個(gè)非常重要的數據結構struct temfios,這個(gè)數據結構包含了所有的串口參數,如波特率、數據位、輸入輸出方式等。設置串口屬性就是對這個(gè)數據結構賦值??梢酝ㄟ^(guò)termios.h中的函數tssetattr()設置串口的termios參數;通過(guò)函數tsgetattr()獲取串口的termios參數。該數據結構的各成員的屬性值以及參數含義可以參考文獻[1]。
設置完通信參數后就可用read從串口讀取數據和write向串口寫(xiě)數據了,其實(shí)質(zhì)就是對串口文件進(jìn)行讀寫(xiě)。運行程序時(shí)要注意用戶(hù)是否有對要操作的串口文件進(jìn)行讀寫(xiě)的權力,可以用chmod命令進(jìn)行文件權限修改。
2 非接觸式IC卡簡(jiǎn)介
Mifare 1 IC智能(射頻)卡的核心是Philips公司的Mifare 1 IC $50。內建有高速的CMOS EEPROMMCU等??ㄆ铣薎C微晶片及一副高效率天線(xiàn)外無(wú)任何其他元件,無(wú)源(無(wú)任何電池),工作時(shí)的電源能量由卡片讀寫(xiě)器天線(xiàn)發(fā)送無(wú)線(xiàn)電載波信號耦合到卡片上天線(xiàn)而產(chǎn)生電能,一般可達2V以上供卡片上IC工作工作頻率13.56Mttz。
Mifare 1 IC卡上具有先進(jìn)的數據通信加密并雙向驗證密碼系統;且具有防重疊功能,能在同一時(shí)間處理重疊在卡片讀寫(xiě)器天線(xiàn)的有效工作距離內的多張重疊的卡片。其通訊原理如圖1所示。
圖1 Mifare 1 IC卡讀寫(xiě)流程圖
3 IC卡設備在Linux下的開(kāi)發(fā)實(shí)現
采取通用的Mifare S50卡為例,詳細描述其在校園機房的使用。
3.1 建立相應的數據結構
在頭文件AcctData.h中,定義結構體AcctItem,用于反映機器的使用狀態(tài),頭文件ICCard.h中,定義類(lèi)ICCard用于反映IC卡的使用狀態(tài)。確定在驅動(dòng)模塊程序中應用的數據結構的最終目的是讀取和寫(xiě)入卡數據處理,所以規范整齊的數據結構是必須的。
通訊模式及率
};
這樣,就定義了全部的卡處理數據結構定義以及設備操作映射函數結構,綜上所述,就實(shí)現了IC卡設備的打開(kāi)、讀寫(xiě)和監控函數 。
3.2 模塊初始化函數的實(shí)現
模塊初始化函數是模塊開(kāi)發(fā)過(guò)程中必不可少的處理函數,用于實(shí)現設備的初始化,中斷初始化及處理設備等。

在上面類(lèi)中首先應用GetCardData(char*,CardData&)實(shí)現了卡數據的初始化;然后定義了隊列數據,再進(jìn)行了上機處理以及下機處理,故障恢復處理;最后實(shí)現了恢復故障處理。
3.3 中斷處理
模塊采用了定時(shí)器中斷,在每個(gè)定時(shí)器中斷發(fā)生時(shí)對刷卡狀況進(jìn)行檢測,如果在天線(xiàn)范圍內檢測到刷卡,根據使用標記進(jìn)行判斷,未使用則進(jìn)行讀卡操作;使用中則進(jìn)行寫(xiě)卡操作,同時(shí)更新IC卡的狀態(tài)數據。
程序中的中斷處理采用了信號量機制來(lái)實(shí)現中斷的后續處理,其處理流程為:


3.4 注銷(xiāo)模塊處理
用于模塊卸載時(shí)進(jìn)行資源的釋放,在關(guān)閉串口前,需要通過(guò)tcsetattr(fd,TCSANOW,&oldtio);將串口參數恢復為原來(lái)的設置,最后通過(guò)close系統調用關(guān)閉串口,如下所述:

3.5 設備的讀、寫(xiě)和配置函數
主要是通過(guò)實(shí)現IC卡的各種操作,在先前的類(lèi)ICCard中已經(jīng)介紹,根據Mirare 1 IC的通訊原理,實(shí)現卡的初始化操作。
綜上所述,卡驅動(dòng)模塊的基本實(shí)現原理是:當有刷卡操作發(fā)生時(shí),由使用標記引發(fā)中斷或進(jìn)行讀卡操作;或進(jìn)行寫(xiě)卡操作,同時(shí)進(jìn)行相應數據處理。從而實(shí)現有卡操作發(fā)生時(shí)馬上進(jìn)行卡數據的更新[ 。
4 模塊的編譯調試
編寫(xiě)相應的makefile文件:

chown root$(BINDIR)/pubacct
chown u+s$(BINDIR)/pubacct
clean:
rm-f*.o pubaect
執行幾個(gè)make命令,便可以實(shí)現驅動(dòng)模塊的動(dòng)態(tài)編譯。
5 結束語(yǔ)
文中筆者創(chuàng )新點(diǎn):介紹了非接觸式IC卡的概況和發(fā)展前景。有助于有一定IC卡經(jīng)驗、技術(shù)及具有一定的計算機軟緞件技術(shù)的研發(fā)者設計出諸多應用場(chǎng)合的產(chǎn)品。這里只是截取了IC卡應用的一個(gè)方向,以及簡(jiǎn)單的設計開(kāi)發(fā)。在其它的高級應用中還可以加入密鑰保護等措施。
基金項目:陜西省自然科學(xué)基金項目(2005f36)
作者簡(jiǎn)介;姜遠(1978--),男,陜西西安人,西北大學(xué)信息學(xué)院,碩士研究生,研究方向 為網(wǎng)絡(luò )管理;高嶺,教授,西北大學(xué)信息學(xué)院,研究方向為網(wǎng)絡(luò )測量和網(wǎng)絡(luò )管理。楊建鋒,西北大學(xué)現代技術(shù)教育中心
參考文獻:
[1] 劉崢嶸,張智超,許振山.嵌入式Linux應用開(kāi)發(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] 龍飛,李曉帆,蔡志開(kāi),等.一個(gè)利用多線(xiàn)程及重疊I/O實(shí)現的串口通信類(lèi)[J].微機發(fā)展,2004,14(3):51—53.