基于Android的POS機(jī)刷卡器閱讀芯片驅(qū)動(dòng)研究
摘要:由于現(xiàn)行的POS機(jī)的系統(tǒng)界面簡(jiǎn)陋,軟件資源匱乏,不利于POS機(jī)的功能擴(kuò)展。刷卡器閱讀芯片是POS機(jī)主要功能的承擔(dān)者,對(duì)其Andr oid驅(qū)動(dòng)程序的研究,有助于POS機(jī)在Android平臺(tái)上的發(fā)展。MagTek刷卡器閱讀芯片21006450應(yīng)用廣泛,對(duì)于它的研究將有助于刷卡器閱讀芯片驅(qū)動(dòng)程序在實(shí)際中的應(yīng)用。這里所研究的Android系統(tǒng)架構(gòu)、芯片工作原理及接口調(diào)用是刷卡器閱讀芯片驅(qū)動(dòng)程序設(shè)計(jì)的理論基礎(chǔ),對(duì)驅(qū)動(dòng)程序的實(shí)現(xiàn)做指導(dǎo)。
關(guān)鍵字:Android;POS機(jī);刷卡器讀芯片;驅(qū)動(dòng)程序
0 引言
Google公司在2007年11月5日推出了開源的Androld操作系統(tǒng),它是基于Linux內(nèi)核的開源手機(jī)操作系統(tǒng)。目前,Android應(yīng)用商店Android market已經(jīng)擁有超過(guò)70萬(wàn)個(gè)應(yīng)用程序,有超過(guò)10萬(wàn)名軟件開發(fā)人員為Android開發(fā)應(yīng)用程序,Android系統(tǒng)已經(jīng)廣泛運(yùn)用于便攜式移動(dòng)設(shè)備。
移動(dòng)POS機(jī)又稱無(wú)線POS,是一種RF-SIM卡終端閱讀器,通過(guò)CDMA,GPRS,TCP/IP等與數(shù)據(jù)服務(wù)器相連進(jìn)行工作。移動(dòng)POS機(jī)具有移動(dòng)性強(qiáng),平均交易時(shí)間段,易于攜帶等特性在各大行業(yè)都已經(jīng)廣泛使用。將Android系統(tǒng)移植到POS機(jī)上,將為POS機(jī)提供更加豐富的應(yīng)用和功能擴(kuò)展。
刷卡器作為POS機(jī)主要功能承擔(dān)者,其驅(qū)動(dòng)程序的研究和優(yōu)化也直接影響到Android系統(tǒng)在POS機(jī)領(lǐng)域的發(fā)展。
1 Android系統(tǒng)架構(gòu)
Android是以Linux為內(nèi)核的開放式的手機(jī)操作系統(tǒng),采用了整合的策略思想,包括底層Linux操作系統(tǒng)、中間層的中間件和上層的Java應(yīng)用程序。Android系統(tǒng)是由應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層、Linux內(nèi)核層組成的,系統(tǒng)架構(gòu)如圖1所示。
在應(yīng)用程序?qū)又邪薃ndroid系統(tǒng)的基礎(chǔ)應(yīng)用程序,所有的應(yīng)用程序都是用Java編寫的。
應(yīng)用框架層是開發(fā)人員從事Android應(yīng)用程序開發(fā)的基礎(chǔ),該層簡(jiǎn)化了組件重用,可以直接使用系統(tǒng)提供的組件快速的進(jìn)行應(yīng)用程序開發(fā),主要包括Activity Manager,Content Provider,View System等。
在系統(tǒng)運(yùn)行庫(kù)層中包括了兩個(gè)部分:程序庫(kù)和運(yùn)行時(shí)庫(kù),主要由Dalvik Java虛擬機(jī)和基礎(chǔ)的Jaya類庫(kù)組成,為應(yīng)用程序提供服務(wù)和Java編程語(yǔ)言核心庫(kù)。Android的核心系統(tǒng)服務(wù)依賴于Linux 2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層。
2 刷卡器工作原理
MagTek公司的磁卡閱讀器芯片21006450是一款高性能、低功耗的三軌磁條解碼芯片。在對(duì)磁卡閱讀芯片復(fù)位時(shí),如果STRBOE沒(méi)有置高,就需要將其置高,并將DATA拉低,然后再將STROBE置低。在復(fù)位之后仍需要將DATA強(qiáng)制置低,在釋放DATA之前需要將STROBE置高,然后再置低。在完成上述過(guò)程后,仍需要再完成一次STROBE的置高、置底,這樣才能完成復(fù)位序列。
當(dāng)讀卡器芯片處在準(zhǔn)備讀卡狀態(tài)時(shí),一旦檢測(cè)到三個(gè)磁通翻轉(zhuǎn),ASIC就會(huì)通過(guò)將DATA拉低來(lái)表明此時(shí)處于卡在線狀態(tài)。然后就開始將磁條卡上的數(shù)據(jù)讀取并存儲(chǔ)到緩存中。對(duì)應(yīng)于這種卡在線狀態(tài),控制器應(yīng)當(dāng)將STROBE置高。對(duì)應(yīng)于STROBE的上升沿,ASIC會(huì)將DATA置高,并清除卡在線信號(hào)??刂破鲿?huì)將STROBE置低,然后等待DATA的下降沿,以此來(lái)表明處在緩存器就緒狀態(tài)。從內(nèi)存中讀取或提取數(shù)據(jù),需要用脈沖信號(hào)將STROBE輸入置高再置低來(lái)驅(qū)使數(shù)據(jù)指針將數(shù)據(jù)指向DATA的管腳。在數(shù)據(jù)讀取期間,當(dāng)STROBE的輸入為低時(shí),DATA上的一個(gè)低電平代表1,而高電平代表0。需要說(shuō)明的是,DATA進(jìn)入緩存器就緒狀態(tài)后,在復(fù)位之前,ASIC不會(huì)對(duì)再一次刷卡做出反應(yīng)。在片上緩存(內(nèi)存)中,為磁條卡的三個(gè)磁道中的每一個(gè)分配了704 b的空間,總共有2 112 b。對(duì)每條磁道而言,只有在卡上檢測(cè)到1的時(shí)候才開始存儲(chǔ)數(shù)據(jù),在這個(gè)1之前的所有的0都不會(huì)存儲(chǔ)進(jìn)緩存。當(dāng)檢測(cè)到第一個(gè)1之后,每個(gè)磁道存儲(chǔ)704 b的數(shù)據(jù),而一旦數(shù)據(jù)超過(guò)這個(gè)長(zhǎng)度,將會(huì)丟失超出的數(shù)據(jù)。但這并不意味著芯片的存儲(chǔ)空間太小,確切來(lái)說(shuō),這么大的空間已經(jīng)能夠充分的滿足符號(hào)ISO編碼標(biāo)準(zhǔn)的磁條卡的需求。
在提取數(shù)據(jù)時(shí),STROBE是根據(jù)磁道A,磁道B,然后磁道C的順序進(jìn)行接收的。當(dāng)數(shù)據(jù)指針到達(dá)3個(gè)磁道共2112位的最后位置時(shí),它將從反方向再次循環(huán)數(shù)據(jù)。需要說(shuō)明的是,數(shù)據(jù)的移出的首選順序是磁道A、磁道B然后磁道C。ASIC并不決定刷卡的方向,只是簡(jiǎn)單的將接收的數(shù)據(jù)表示出來(lái)。然后,反方向刷卡數(shù)據(jù)的移出時(shí)是以磁道C、磁道B、磁道A的順序進(jìn)行的,這就像將一盤磁帶或錄音帶翻帶。
在復(fù)位時(shí),會(huì)清除ASIC上的所有數(shù)據(jù),將所有的數(shù)據(jù)位都置為0(高電平)。
linux相關(guān)文章:linux教程
pos機(jī)相關(guān)文章:pos機(jī)原理
評(píng)論