0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Android架構(gòu)的基礎(chǔ)上實(shí)現(xiàn)POS機(jī)刷卡器讀芯片驅(qū)動(dòng)的設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:郭婷 ? 作者:電子設(shè)計(jì) ? 2018-12-04 09:01 ? 次閱讀

引言

Google公司在2007年11月5日推出了開(kāi)源的An-droid操作系統(tǒng),它是基于Linux內(nèi)核的開(kāi)源手機(jī)操作系統(tǒng)。目前,Android應(yīng)用商店Android market已經(jīng)擁有超過(guò)70 萬(wàn)個(gè)應(yīng)用程序,有超過(guò)10 萬(wàn)名軟件開(kāi)發(fā)人員為Android開(kāi)發(fā)應(yīng)用程序,Android系統(tǒng)已經(jīng)廣泛運(yùn)用于便攜式移動(dòng)設(shè)備。

移動(dòng)POS機(jī)又稱(chēng)無(wú)線(xiàn)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是以L(fǎng)inux為內(nèi)核的開(kā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編寫(xiě)的。

應(yīng)用框架層是開(kāi)發(fā)人員從事Android應(yīng)用程序開(kāi)發(fā)的基礎(chǔ),該層簡(jiǎn)化了組件重用,可以直接使用系統(tǒng)提供的組件快速的進(jìn)行應(yīng)用程序開(kāi)發(fā),主要包括ActivityManager,Content Provider,View System等。

在系統(tǒng)運(yùn)行庫(kù)層中包括了兩個(gè)部分:程序庫(kù)和運(yùn)行時(shí)庫(kù),主要由Dalvik Java 虛擬機(jī)和基礎(chǔ)的Java 類(lèi)庫(kù)組成 ,為應(yīng)用程序提供服務(wù)和Java 編程語(yǔ)言核心庫(kù)。

Android的核心系統(tǒng)服務(wù)依賴(lài)于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í)處于卡在線(xiàn)狀態(tài)。然后就開(kāi)始將磁條卡上的數(shù)據(jù)讀取并存儲(chǔ)到緩存中。對(duì)應(yīng)于這種卡在線(xiàn)狀態(tài),控制器應(yīng)當(dāng)將STROBE置高。對(duì)應(yīng)于STROBE的上升沿,ASIC會(huì)將DATA置高,并清除卡在線(xiàn)信號(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í)候才開(kāi)始存儲(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)能夠充分的滿(mǎn)足符號(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)行的,這就像將一盤(pán)磁帶或錄音帶翻帶。

在復(fù)位時(shí),會(huì)清除ASIC上的所有數(shù)據(jù),將所有的數(shù)據(jù)位都置為0(高電平)。

3 驅(qū)動(dòng)設(shè)計(jì)

驅(qū)動(dòng)程序是Linux內(nèi)核與硬件之間的接口,直接對(duì)硬件設(shè)備進(jìn)行操作,同時(shí)對(duì)上層應(yīng)用程序提供接口。

Android的設(shè)備驅(qū)動(dòng)主要完成以下功能:初始化和釋放設(shè)備;讀取硬件設(shè)備數(shù)據(jù);將內(nèi)核數(shù)據(jù)寫(xiě)入到硬件設(shè)備;讀取應(yīng)用程序數(shù)據(jù)傳送給設(shè)備文件等。在Android系統(tǒng)中刷卡器驅(qū)動(dòng)應(yīng)包括:Linux內(nèi)核驅(qū)動(dòng)程序、HAL(硬件抽象層)模塊、JNI方法、application framework硬件訪(fǎng)問(wèn)服務(wù)。刷卡器閱讀芯片與開(kāi)發(fā)板的連接框圖如圖1所示。

在Android架構(gòu)的基礎(chǔ)上實(shí)現(xiàn)POS機(jī)刷卡器讀芯片驅(qū)動(dòng)的設(shè)計(jì)

3.1 Linux內(nèi)核刷卡器閱讀芯片驅(qū)動(dòng)程序

刷卡器的基本功能就是讀取磁卡中的數(shù)據(jù)進(jìn)行解碼,并將得到的解碼數(shù)據(jù)傳遞給上層應(yīng)用程序。An-droid為了保護(hù)一些硬件提供商的知識(shí)產(chǎn)權(quán)提出了HAL層的概念,避開(kāi)了Linux的GPL束縛,基本的思路是把控制硬件的動(dòng)作都放在Android HAL層,而Linux driver只是完成一些簡(jiǎn)單的數(shù)據(jù)交換。這里的Linux內(nèi)核刷卡器驅(qū)動(dòng)程序同樣也只是一個(gè)的字符設(shè)備驅(qū)動(dòng),設(shè)備以模塊的形式存在Linux內(nèi)核中,模塊的加載和卸載通過(guò)stat-ic int_init msr_init(void)和static void_exit msr_exit(void)函數(shù)實(shí)現(xiàn),static int_msr_setup_dev(structmsr_Android_dev* dev)函數(shù)對(duì)設(shè)備進(jìn)行初始化,函數(shù)static long msr_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)實(shí)現(xiàn)驅(qū)動(dòng)程序?qū)λ⒖ㄆ鞯腎/O控制。設(shè)備的打開(kāi)、關(guān)閉及具體的代碼實(shí)現(xiàn)可以參考《Linux設(shè)備驅(qū)動(dòng)程序》。對(duì)內(nèi)核配置編譯后就可以在Linux內(nèi)核中得到設(shè)備模塊msr.o,在上層中可以通過(guò)調(diào)用這個(gè)模塊來(lái)實(shí)現(xiàn)對(duì)刷卡器的控制。

3.2 HAL層訪(fǎng)問(wèn)內(nèi)核驅(qū)動(dòng)程序

硬件抽象層中訪(fǎng)問(wèn)不同設(shè)備內(nèi)核驅(qū)動(dòng)程序的模塊是以*.so文件形式存在的,這樣可以有效的保護(hù)硬件廠商的知識(shí)產(chǎn)權(quán)。在runtime(JNI部分),則向HAL取得特定模塊的operations,再callback 這些操作函數(shù)。在HAL 層包括許多模塊,而runtime 只需要說(shuō)明類(lèi)型,即module ID,就可以取得相應(yīng)模塊的operations.在HAL層中需要具體實(shí)現(xiàn)刷卡器的讀卡操作。首先需要查找到開(kāi)始標(biāo)志0x0b,然后將磁道1中的數(shù)據(jù)放到buf1中,用同樣的方法可以將磁道2,3的數(shù)據(jù)存到buf2,buf3中,磁道2最多40個(gè)字符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn),而磁道3最多107個(gè)字符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn)。

然后將buf中的數(shù)據(jù)補(bǔ)齊之后放在主寄存器中。HAL層中還需要使用static int check_msr_io(void)對(duì)I/O 的狀態(tài)進(jìn)行檢測(cè),并對(duì)設(shè)備進(jìn)行初始化static int msr_de-vice_init(void)。具體的實(shí)現(xiàn)由于篇幅限制,不在進(jìn)行詳細(xì)介紹。

3.3 編寫(xiě)JNI方法訪(fǎng)問(wèn)硬件

從編程語(yǔ)言看,Android系統(tǒng)是由基于Java語(yǔ)言的Java層與基于C/C++語(yǔ)言的C/C++層組成的,為了使這兩層相互配合、共同完成任務(wù)就必須使用Java本地接口(JNI,Java Native Interface)將這兩層有機(jī)的聯(lián)系起來(lái)。

JNI提供了一系列接口,允許Java類(lèi)與使用C/C++編寫(xiě)的應(yīng)用程序、模塊、庫(kù)進(jìn)行交互操作。JNI是通過(guò)函數(shù)方法映射表static const JNINativeMethod method_table,將Java本地方法和HAL層提供的C函數(shù)接口銜接起來(lái)。

3.4 在application framework增加硬件訪(fǎng)問(wèn)服務(wù)

在Android Framework或應(yīng)用程序開(kāi)發(fā)中所需要的主要API都是以服務(wù)的形式存在的。對(duì)應(yīng)用程序來(lái)說(shuō),硬件服務(wù)是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程中的,若要調(diào)用這些服務(wù)就需要在硬件服務(wù)和應(yīng)用程序之間添加通信接口。應(yīng)用程序通過(guò)Interface IMsrService接口,調(diào)用硬件服務(wù)提供的Init()等函數(shù)。在刷卡器的硬件服務(wù)中是將定義的通信接口與JNI提供的接口相關(guān)聯(lián)起來(lái)。同時(shí)需要將磁卡閱讀芯片服務(wù)添加到系統(tǒng)服務(wù)中Service-Manager.addService(“msr”,new MsrService()),這樣應(yīng)用程序就能通過(guò)Java接口調(diào)用硬件服務(wù),實(shí)現(xiàn)對(duì)磁卡閱讀芯片的控制。圖2以讀取芯片數(shù)據(jù)為例,簡(jiǎn)單介紹各層之間的調(diào)用。

在Android架構(gòu)的基礎(chǔ)上實(shí)現(xiàn)POS機(jī)刷卡器讀芯片驅(qū)動(dòng)的設(shè)計(jì)

4 結(jié)語(yǔ)

隨著系統(tǒng)逐漸成熟,應(yīng)用程序日益豐富,Android系統(tǒng)與POS機(jī)的結(jié)合將為POS機(jī)的發(fā)展提供更為廣闊的空間。本文在分析了Android架構(gòu)的基礎(chǔ)上,分析刷卡器的工作原理,研究將POS機(jī)刷卡器閱讀芯片驅(qū)動(dòng)程序添加到Android系統(tǒng)中,為上層應(yīng)用程序提供接口,實(shí)現(xiàn)刷卡器的功能。各層之間的接口調(diào)用銜接是整個(gè)驅(qū)動(dòng)程序成功運(yùn)行的基礎(chǔ),在驅(qū)動(dòng)設(shè)計(jì)中,每編寫(xiě)一層都應(yīng)進(jìn)行測(cè)試,這樣能更好的定位驅(qū)動(dòng)設(shè)計(jì)中存在的不足。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    455

    文章

    50851

    瀏覽量

    423988
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3937

    瀏覽量

    127454
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1765

    瀏覽量

    57559
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    手機(jī)刷卡器為移動(dòng)支付發(fā)展錦上添花

    每到信用卡還款日,銀行ATM機(jī)前總會(huì)排起長(zhǎng)隊(duì)。如今,一類(lèi)名為手機(jī)刷卡器的產(chǎn)品走俏市場(chǎng),讓消費(fèi)者足不出戶(hù),就可以把ATM機(jī)“搬”到家中。正如廣告詞所說(shuō)的:“不受時(shí)間、空間限制,只要有無(wú)線(xiàn)網(wǎng)絡(luò)的地方
    發(fā)表于 06-09 17:21

    藍(lán)牙手刷、M-POS磁卡解碼芯片首選PF52913、PF52923

    磁頭過(guò)來(lái)的信號(hào)放大、處理,再讓mcu進(jìn)行解碼。相對(duì)于傳統(tǒng)硬解碼方案來(lái)說(shuō)有很節(jié)約成本,加上PF52913體積很小(4mm*4mm)是是做藍(lán)牙刷卡器的不二之選。
    發(fā)表于 01-04 17:22

    基于RFID-RC522刷卡器的智能門(mén)禁,誰(shuí)做過(guò)??

    本人的實(shí)訓(xùn)課題目是基于STM32的智能門(mén)禁系統(tǒng),買(mǎi)了RFID-RC522刷卡器模塊,繼電器模塊,可是開(kāi)始寫(xiě)程序時(shí),遇到好多問(wèn)題了,誰(shuí)有資料,分享?。。。?!
    發(fā)表于 03-10 10:24

    無(wú)線(xiàn)POS機(jī)產(chǎn)生了哪些影響?

    ,經(jīng)過(guò)處理的信息返回到POS機(jī),從而完成用戶(hù)的刷卡消費(fèi)業(yè)務(wù)。為了實(shí)現(xiàn)上述數(shù)據(jù)交換過(guò)程,POS
    發(fā)表于 11-05 07:26

    串口/并口基礎(chǔ)上實(shí)現(xiàn)51內(nèi)核單片機(jī)的在線(xiàn)編程

    串口/并口基礎(chǔ)上實(shí)現(xiàn)51內(nèi)核單片機(jī)的在線(xiàn)編程摘要:詳細(xì)說(shuō)明利用并口模擬I2C總線(xiàn)協(xié)議,實(shí)現(xiàn)Myson MTV230
    發(fā)表于 04-12 14:01 ?34次下載

    pos機(jī)_pos是什么意思

    本內(nèi)容介紹了pos是什么意思,POS機(jī)的組成,了解了pos刷卡機(jī)的相關(guān)應(yīng)用
    發(fā)表于 12-21 15:49 ?4.2w次閱讀

    WEINVIEW充電樁的應(yīng)用

    本系統(tǒng)采用WEINVIEW MT8070iH人機(jī)界面,實(shí)現(xiàn)了與刷卡器、單片機(jī)、上位機(jī)的實(shí)時(shí)連接通訊。
    發(fā)表于 10-11 22:19 ?16次下載
    WEINVIEW<b class='flag-5'>在</b>充電樁<b class='flag-5'>上</b>的應(yīng)用

    ??拼?b class='flag-5'>POS機(jī)刷卡這五點(diǎn)需要注意

      刷卡消費(fèi)已經(jīng)成了人們生活中不可或缺的一部分,刷卡雖然方便,但是刷卡使用的pos機(jī)也存在安全隱患,下面微辰金服提醒大家使用海科大
    發(fā)表于 03-19 15:38 ?322次閱讀

    微辰金服介紹??拼?b class='flag-5'>POS機(jī)分類(lèi)

    刷卡器:類(lèi)似一款外接讀卡,只要將它**智能手機(jī)音頻孔建立連接后就能使用余額查詢(xún)、轉(zhuǎn)賬匯款燈功能。手機(jī)刷卡器本身沒(méi)有支付的功能,需要有支付通道的軟件來(lái)配合才可以有支付、收單的功能  (4)、智能
    發(fā)表于 03-21 15:06 ?417次閱讀

    微辰金服告訴你??拼?b class='flag-5'>POS機(jī)有無(wú)封頂機(jī)

      POS機(jī)還有沒(méi)有封頂機(jī)?POS機(jī)的封頂手續(xù)費(fèi)是針對(duì)信用卡刷卡來(lái)說(shuō)的。今天微辰金服為大家介紹海
    發(fā)表于 04-01 15:03 ?331次閱讀

    【沐渥科技】網(wǎng)絡(luò)刷卡器新品面世,刷新移動(dòng)物聯(lián)新生活

    物聯(lián)網(wǎng)應(yīng)用需求和身份校驗(yàn)普及的影響下,沐渥科技自主研發(fā)生產(chǎn)了一款基于網(wǎng)絡(luò)協(xié)議傳輸?shù)淖x卡設(shè)備——網(wǎng)絡(luò)刷卡器,這是一款體積小巧,方便攜帶,即插即用,無(wú)需安裝驅(qū)動(dòng),采用USB通訊,即刻響應(yīng)對(duì)接客戶(hù)的軟件
    的頭像 發(fā)表于 11-23 10:26 ?467次閱讀
    【沐渥科技】網(wǎng)絡(luò)<b class='flag-5'>刷卡器</b>新品面世,刷新移動(dòng)物聯(lián)新生活

    一文讓你了解網(wǎng)絡(luò)刷卡器的特點(diǎn)和優(yōu)勢(shì)

    網(wǎng)絡(luò)刷卡器一款高性能的多協(xié)議電子標(biāo)簽讀寫(xiě),保持高識(shí)率的同時(shí)實(shí)現(xiàn)對(duì)電子標(biāo)簽的快速讀寫(xiě)處理,廣泛應(yīng)用于物流追蹤、個(gè)人身份識(shí)別、人員管理、智能停車(chē)場(chǎng)、門(mén)禁考勤、公交一卡通、餐飲、金融等多
    的頭像 發(fā)表于 11-13 14:16 ?522次閱讀
    一文讓你了解網(wǎng)絡(luò)<b class='flag-5'>刷卡器</b>的特點(diǎn)和優(yōu)勢(shì)

    MDB-RS232測(cè)試NAYAX的VPOS自動(dòng)售貨機(jī)刷卡器注意事項(xiàng)

    MDB-RS232測(cè)試NAYAX的VPOS自動(dòng)售貨機(jī)刷卡器注意事項(xiàng)以及必要的通信指令。給我們?cè)O(shè)計(jì)自動(dòng)售貨機(jī),自助咖啡機(jī)的控制系統(tǒng)提供了必要的指令協(xié)助,幫我客戶(hù)更好的了解MDB協(xié)議。
    的頭像 發(fā)表于 05-08 22:20 ?904次閱讀
    MDB-RS232測(cè)試NAYAX的VPOS自動(dòng)售貨機(jī)<b class='flag-5'>刷卡器</b>注意事項(xiàng)

    MDB硬幣,紙幣接收以及MDB刷卡器等MDB設(shè)備RS-232通信PC轉(zhuǎn)接盒

    電子發(fā)燒友網(wǎng)站提供《MDB硬幣,紙幣接收以及MDB刷卡器等MDB設(shè)備RS-232通信PC轉(zhuǎn)接盒.pdf》資料免費(fèi)下載
    發(fā)表于 09-23 17:49 ?0次下載

    網(wǎng)絡(luò)刷卡器的功能和使用場(chǎng)景

    網(wǎng)絡(luò)刷卡器是一種連接互聯(lián)網(wǎng)的設(shè)備,能夠通過(guò)網(wǎng)絡(luò)將讀取到的各種卡片信息傳輸至服務(wù)進(jìn)行處理。這類(lèi)刷卡器通常支持多種類(lèi)型的卡片,如銀行卡、身份證、會(huì)員卡、公交卡等,并運(yùn)用現(xiàn)代信息技術(shù)確保數(shù)據(jù)的安全性
    的頭像 發(fā)表于 12-23 16:34 ?178次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>刷卡器</b>的功能和使用場(chǎng)景