基于MF RC632的專(zhuān)用讀卡器軟件系統(tǒng)設(shè)計(jì)
文章出處:http://m.coolbang.cn 作者:于興晗 李正熙 李君 沈保鎖 人氣: 發(fā)表時(shí)間:2011年10月23日
引 言
隨著北京市政交通一卡通工程和門(mén)禁系統(tǒng)的普及,射頻技術(shù)在消費(fèi)電子、通信設(shè)備、工業(yè)控制等領(lǐng)域也取得了飛速的發(fā)展。因此在硬件設(shè)備大部分相同的情況下,軟件系統(tǒng)就成了該設(shè)備性能好壞的關(guān)鍵。本文主要介紹一款專(zhuān)用射頻讀卡器的軟件系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)。
1 系統(tǒng)概述
本系統(tǒng)主要作為一種專(zhuān)用的訓(xùn)練器材。除具備通用的Mifare卡的讀寫(xiě)器功能外,還可作為一種專(zhuān)用的訓(xùn)練評(píng)估工具。例如將該設(shè)備安裝在跑道的周?chē)ifareOne卡安裝在測(cè)試者的鞋上,每個(gè)訓(xùn)練者都有自己的ID號(hào)。當(dāng)他從起跑線起跑時(shí),安裝在起跑線的專(zhuān)用讀卡器就會(huì)將自己的設(shè)備ID號(hào)和當(dāng)時(shí)的時(shí)間寫(xiě)入測(cè)試者的MifareOne卡中;當(dāng)經(jīng)過(guò)下一個(gè)基站時(shí)讀卡器會(huì)將自己的設(shè)備ID和當(dāng)時(shí)的時(shí)間寫(xiě)入測(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)、主站、從站、開(kāi)機(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、與Mifare 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)的開(kāi)發(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的中斷源打開(kāi)。在本系統(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卡片處在卡片讀寫(xiě)器天線的工作范圍之內(nèi)時(shí),程序員控制讀寫(xiě)器便向卡片發(fā)出REQUEST all(或REQUEST std)命令。卡片的ATR將啟動(dòng),將卡片Block 0中的卡片類(lèi)型(TagType)號(hào)共2個(gè)字節(jié)傳送給讀寫(xiě)器,建立卡片與讀寫(xiě)器的第一步通信聯(lián)絡(luò)。如果不進(jìn)行“得位請(qǐng)求”操作,讀寫(xiě)器對(duì)卡片的其他操作將不會(huì)進(jìn)行。
②反碰撞操作。如果有多張Mifare卡片處在卡片讀寫(xiě)器天線的工作范圍之內(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é)。
?、苷J(rèn)證操作。經(jīng)過(guò)上述3個(gè)步驟,在確認(rèn)已經(jīng)選擇了一張卡片時(shí),PCD在對(duì)卡進(jìn)行讀/寫(xiě)操作之前,必須對(duì)卡片上已經(jīng)設(shè)置的密碼進(jìn)行認(rèn)證。如果匹配,才允許進(jìn)一步的讀/寫(xiě)操作。
?、葑x/寫(xiě)操作。對(duì)卡的最后操作是讀、寫(xiě)、增值、減值、存儲(chǔ)和傳送等操作。
(2)MF RC500軟件開(kāi)發(fā)包移植
在本系統(tǒng)中,主要是將標(biāo)準(zhǔn)的MF RC500軟件開(kāi)發(fā)包進(jìn)行移植來(lái)完成MF RC632驅(qū)動(dòng)的編寫(xiě)。在本系統(tǒng)中使用的是SPI總線,所以只要將MF RC500標(biāo)準(zhǔn)軟件開(kāi)發(fā)包中對(duì)寄存器讀/寫(xiě)的函數(shù)改成SPI總線的讀/寫(xiě)函數(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)軟件開(kāi)發(fā)上為降低二次開(kāi)發(fā)的難度,增強(qiáng)任務(wù)處理能力。在系統(tǒng)的任務(wù)調(diào)度上采用了比較流行的分時(shí)處理流程,這樣只要所加的任務(wù)處理時(shí)間小于任務(wù)輪詢(xún)的時(shí)間均可采用此種方式。同時(shí)為增加Mare I卡的使用壽命,在對(duì)Mare I卡的內(nèi)存進(jìn)行讀寫(xiě)時(shí)采用平均讀寫(xiě)的方式,即從長(zhǎng)時(shí)間讀寫(xiě)來(lái)看,Mare I卡的每塊存儲(chǔ)區(qū)所得到的讀寫(xiě)次數(shù)相同,避免了由于單塊存儲(chǔ)區(qū)讀寫(xiě)次數(shù)太多而損壞。
5 結(jié) 論
經(jīng)過(guò)調(diào)試,由本系統(tǒng)軟件所開(kāi)發(fā)出的讀寫(xiě)器具有 高性能、高穩(wěn)定性和強(qiáng)兼容性。典型的讀寫(xiě)距離為11 cm,在有效讀寫(xiě)區(qū)域內(nèi)無(wú)死區(qū),讀寫(xiě)操作可靠。在桌面工作環(huán)境中,卡片在有效感應(yīng)區(qū)域內(nèi)連續(xù)讀寫(xiě)出錯(cuò)率低于0.01%。其兼容性表現(xiàn)在不僅能夠讀取標(biāo)準(zhǔn)的卡片,對(duì)于偏離標(biāo)準(zhǔn)很多的卡片也能夠進(jìn)行讀取。