<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于MF RC632的專用讀卡器軟件系統(tǒng)設(shè)計(jì)

          基于MF RC632的專用讀卡器軟件系統(tǒng)設(shè)計(jì)

          作者:天 津 大 學(xué) 李君 沈保鎖 北方工業(yè)大學(xué) 于興晗 李正熙 時(shí)間:2008-05-23 來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 收藏

            引 言

          本文引用地址:http://www.ex-cimer.com/article/82981.htm

            隨著北京市政交通一卡通工程和門禁系統(tǒng)的普及,技術(shù)在消費(fèi)電子、通信設(shè)備、工業(yè)控制等領(lǐng)域也取得了飛速的發(fā)展。因此在硬件設(shè)備大部分相同的情況下,軟件系統(tǒng)就成了該設(shè)備性能好壞的關(guān)鍵。本文主要介紹一款專用的軟件系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)。

            1 系統(tǒng)概述

            本系統(tǒng)主要作為一種專用的訓(xùn)練器材。除具備通用的Mifare卡的讀寫器功能外,還可作為一種專用的訓(xùn)練評(píng)估工具。例如將該設(shè)備安裝在跑道的周圍,并將MifareOne卡安裝在測(cè)試者的鞋上,每個(gè)訓(xùn)練者都有自己的ID號(hào)。當(dāng)他從起跑線起跑時(shí),安裝在起跑線的專用就會(huì)將自己的設(shè)備ID號(hào)和當(dāng)時(shí)的時(shí)間寫入測(cè)試者的MifareOne卡中;當(dāng)經(jīng)過(guò)下一個(gè)基站時(shí)會(huì)將自己的設(shè)備ID和當(dāng)時(shí)的時(shí)間寫入測(cè)試者的Mirare One卡中,同時(shí)會(huì)將測(cè)試者的ID號(hào)、姓名等個(gè)人信息(包括經(jīng)過(guò)上個(gè)測(cè)試基站時(shí)間)都讀進(jìn)設(shè)備中保存。由于Mifare One卡共有16個(gè)扇區(qū),每個(gè)扇區(qū)又分為4塊、每塊又有16個(gè)字節(jié)。除了系統(tǒng)使用的外,用戶還可以使用的有48×16字節(jié)。而通過(guò)Mifare One卡存儲(chǔ)的數(shù)據(jù)均不大,只占用一塊存儲(chǔ)區(qū)。換句話說(shuō),Mifare One卡的數(shù)據(jù)存儲(chǔ)區(qū)可以存儲(chǔ)48次,當(dāng)超過(guò)48次時(shí)就從前面覆蓋數(shù)據(jù)。所以,在Mifare one卡中存儲(chǔ)的永遠(yuǎn)是最近48個(gè)基站的信息。訓(xùn)練結(jié)束后,就可以通過(guò)主站將各個(gè)基站的數(shù)據(jù)收集起來(lái)以評(píng)估測(cè)試者的信息。而主站和基站之間通信可以采用的方式也是多樣的。當(dāng)主站和基站的距離比較近時(shí),可以采用RS232、RS485,為提高通信質(zhì)量也可以采用工業(yè)總線的方式,如CAN總線、I2C總線或One Wire總線等。當(dāng)距離比較遠(yuǎn)時(shí),也可采用無(wú)線通信的方式,如GSM等。除此之外,各個(gè)基站還可以通過(guò)打印機(jī)將數(shù)據(jù)輸出。

            2 系統(tǒng)硬件框圖及工作原理

            系統(tǒng)硬件框圖如圖1所示。主板上電后,讀取存儲(chǔ)器中的系統(tǒng)設(shè)置,然后根據(jù)其中的設(shè)置初始化整個(gè)系統(tǒng),包括本設(shè)備的ID號(hào)、主站、從站、開機(jī)時(shí)間、關(guān)機(jī)時(shí)間、數(shù)據(jù)的存儲(chǔ)方式等。

                 

            3 系統(tǒng)的軟件結(jié)構(gòu)及特點(diǎn)

            整個(gè)系統(tǒng)的軟件結(jié)構(gòu)框圖如圖2所示。

                 
            
            整個(gè)系統(tǒng)主要是由核心控制單元P89LPC932、與Mi-fare One卡通信的MFRC632、與PC機(jī)通信的RS232、提供時(shí)間基準(zhǔn)的實(shí)時(shí)時(shí)鐘芯片PCF8563和存儲(chǔ)系統(tǒng)設(shè)置數(shù)據(jù)的存儲(chǔ)器AT45DB021等。因此針對(duì)本系統(tǒng)整個(gè)軟件系統(tǒng)的開發(fā)也主要分為系統(tǒng)啟動(dòng)、硬件驅(qū)動(dòng)、任務(wù)調(diào)度等。

            4 系統(tǒng)軟件設(shè)計(jì)及實(shí)現(xiàn)

            4.1 啟動(dòng)代碼

            在本系統(tǒng)中,主要指在系統(tǒng)剛一上電后先將所有的外圍電路和CPU本身初始化成靜止?fàn)顟B(tài),然后根據(jù)系統(tǒng)的要求將所有的外圍電路和CPU本身進(jìn)行初始化設(shè)置。設(shè)置完畢后再將CPU的中斷源打開。在本系統(tǒng)中,系統(tǒng)一上電首先執(zhí)行Init_System()函數(shù)。部分代碼如下:

                 

            程序執(zhí)行完Init_System()函數(shù)后執(zhí)行RcChipReady函數(shù)。此函數(shù)的功能是初始化MF RC630芯片。

            4.2 硬件驅(qū)動(dòng)

            4.2.1 PCF8563驅(qū)動(dòng)

            由于本芯片是一款標(biāo)準(zhǔn)的I2C總線設(shè)備,所以硬件驅(qū)動(dòng)實(shí)際上就是標(biāo)準(zhǔn)的I2C總線控制。由于篇幅有限,這里就不介紹了。

            4.2.2 MF RC632驅(qū)動(dòng)

            MF RC632是MF RC500芯片的升級(jí)產(chǎn)品,所以MFRC630的大部分寄存器與MF、RC500均相同,它們對(duì)Mifare One卡的操作流程也基本相同。下面介紹對(duì)Mifare One卡的操作流程。

            (1)Mifare One卡的操作流程

            整個(gè)系統(tǒng)的工作由對(duì)Mifare卡操作和系統(tǒng)后臺(tái)處理兩大部分組成。由于篇幅有限,本文只對(duì)Mifare卡的操作流程進(jìn)行簡(jiǎn)單介紹。Mifare One卡的操作可以分為以下幾項(xiàng):

            ①?gòu)?fù)位請(qǐng)求。當(dāng)一張Mifare卡片處在卡片讀寫器天線的工作范圍之內(nèi)時(shí),程序員控制讀寫器便向卡片發(fā)出REQUEST all(或REQUEST std)命令。卡片的ATR將啟動(dòng),將卡片Block 0中的卡片類型(TagType)號(hào)共2個(gè)字節(jié)傳送給讀寫器,建立卡片與讀寫器的第一步通信聯(lián)絡(luò)。如果不進(jìn)行“得位請(qǐng)求”操作,讀寫器對(duì)卡片的其他操作將不會(huì)進(jìn)行。

           ?、诜磁鲎膊僮鳌H绻卸鄰圡ifare卡片處在卡片讀寫器天線的工作范圍之內(nèi),PCD將首先與每一張卡片進(jìn)行通信,取得每一張卡片的序列號(hào)。由于每一張Mifare卡片都具有其唯一的序列號(hào),決不會(huì)相同,因此PCD根據(jù)卡片的序列號(hào)來(lái)保證一次只對(duì)一張卡操作。該操作PCD得到PICC的返回值為卡的序列號(hào)。

            ③卡選擇操作。完成了上述2個(gè)步驟之后,PCD必須對(duì)卡片進(jìn)行選擇操作。執(zhí)行操作后,返回卡上的SIZE字節(jié)。

            ④認(rèn)證操作。經(jīng)過(guò)上述3個(gè)步驟,在確認(rèn)已經(jīng)選擇了一張卡片時(shí),PCD在對(duì)卡進(jìn)行讀/寫操作之前,必須對(duì)卡片上已經(jīng)設(shè)置的密碼進(jìn)行認(rèn)證。如果匹配,才允許進(jìn)一步的讀/寫操作。

           ?、葑x/寫操作。對(duì)卡的最后操作是讀、寫、增值、減值、存儲(chǔ)和傳送等操作。

            (2)MF RC500軟件開發(fā)包移植

            在本系統(tǒng)中,主要是將標(biāo)準(zhǔn)的MF RC500軟件開發(fā)包進(jìn)行移植來(lái)完成MF RC632驅(qū)動(dòng)的編寫。在本系統(tǒng)中使用的是SPI總線,所以只要將MF RC500標(biāo)準(zhǔn)軟件開發(fā)包中對(duì)寄存器讀/寫的函數(shù)改成SPI總線的讀/寫函數(shù)即可。在本系統(tǒng)中主要是增加了SpiSendByte()和SpiReByte()函數(shù),同時(shí)修改了 ReadRawRc(uchar Address)和WriteR-awRc(uchar Address,uchar value)函數(shù)。部分代碼如下:

                 

            4.2.3存儲(chǔ)器驅(qū)動(dòng)

            在本系統(tǒng)中主要是指AT45DB021的驅(qū)動(dòng)。因?yàn)锳T45DB021也是標(biāo)準(zhǔn)的I2C總線設(shè)備,所以硬件驅(qū)動(dòng)實(shí)際上就足標(biāo)準(zhǔn)的I2C總線控制。由于篇幅有限,這里就不介紹了。

            4.2.4其他電路驅(qū)動(dòng)

            其他電路驅(qū)動(dòng)在本系統(tǒng)中主要是指一些硬件電路電源的控制,為降低功耗所有的外圍電路都通過(guò)一個(gè)三級(jí)管來(lái)控制。所有三級(jí)管的基極均與CPU的I/O口相連,這樣通過(guò)CPU的I/O口即可控制所有外圍電路的電源。

            4.3 任務(wù)調(diào)度

            為提高CPU的工作效率和系統(tǒng)任務(wù)的處理速度,本系統(tǒng)使用分時(shí)處理流程。代碼如下:

                 

            4.4 可靠性對(duì)策

            由于本系統(tǒng)是一臺(tái)標(biāo)準(zhǔn)的讀卡器設(shè)備,所以在系統(tǒng)軟件開發(fā)上為降低二次開發(fā)的難度,增強(qiáng)任務(wù)處理能力。在系統(tǒng)的任務(wù)調(diào)度上采用了比較流行的分時(shí)處理流程,這樣只要所加的任務(wù)處理時(shí)間小于任務(wù)輪詢的時(shí)間均可采用此種方式。同時(shí)為增加Mare I卡的使用壽命,在對(duì)Mare I卡的內(nèi)存進(jìn)行讀寫時(shí)采用平均讀寫的方式,即從長(zhǎng)時(shí)間讀寫來(lái)看,Mare I卡的每塊存儲(chǔ)區(qū)所得到的讀寫次數(shù)相同,避免了由于單塊存儲(chǔ)區(qū)讀寫次數(shù)太多而損壞。

            5 結(jié) 論

            經(jīng)過(guò)調(diào)試,由本系統(tǒng)軟件所開發(fā)出的讀寫器具有 高性能、高穩(wěn)定性和強(qiáng)兼容性。典型的讀寫距離為11 cm,在有效讀寫區(qū)域內(nèi)無(wú)死區(qū),讀寫操作可靠。在桌面工作環(huán)境中,卡片在有效感應(yīng)區(qū)域內(nèi)連續(xù)讀寫出錯(cuò)率低于0.01%。其兼容性表現(xiàn)在不僅能夠讀取標(biāo)準(zhǔn)的卡片,對(duì)于偏離標(biāo)準(zhǔn)很多的卡片也能夠進(jìn)行讀取。



          關(guān)鍵詞: 射頻 讀卡器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();