實(shí)現(xiàn)以RFID卡仿真磁卡的模塊設(shè)計(jì)
文章出處:http://www.sgrivertours.com 作者:沈文龍 人氣: 發(fā)表時(shí)間:2011年09月23日
2O世紀(jì)8O年代,以磁卡和條形碼作為信息載體,各種身份識(shí)別逐漸廣泛應(yīng)用于我國(guó)服務(wù)領(lǐng)域、物流與企業(yè)管理領(lǐng)域.射頻識(shí)別(radio frequency identification,RFID)卡具有非接觸、操作方便、可靠、識(shí)別率高、壽命長(zhǎng)等突出優(yōu)點(diǎn),2O世紀(jì)9O年代起大規(guī)模應(yīng)用于眾多領(lǐng)域.目前仍有大量基于磁卡和條碼的應(yīng)用系統(tǒng)正在或即將投入使用,這些系統(tǒng)在設(shè)計(jì)時(shí)不少是把磁卡或條碼解碼部分作為獨(dú)立的模塊加以考慮.基于此,提出以下設(shè)想:若能夠采用廉價(jià)只讀RFID卡取代磁卡或條碼,而讓RFID卡閱讀模塊直接替換原來(lái)的磁卡機(jī)芯或條碼解碼模塊,那么,整個(gè)系統(tǒng)不需做什么改動(dòng),即可投入運(yùn)行或繼續(xù)使用.這樣,不論改造舊系統(tǒng)或過(guò)渡到采用RFID卡的新系統(tǒng),都可提高效率,減少浪費(fèi),在當(dāng)前仍有市場(chǎng)和積極的意義.本文介紹的模塊只考慮以只讀的RFID卡替代不需修改信息的磁卡(其他情況讀寫(xiě)卡程序有所不同).
1 模塊組成和工作原理
本仿真模塊的功能就是解碼讀取只讀RFID卡的信息(通常就是簡(jiǎn)單的序列號(hào),并仿真磁卡機(jī)芯輸出美國(guó)銀行家協(xié)會(huì)(American banker S association,ABA)磁卡格式數(shù)據(jù),其組成框圖見(jiàn)圖1.
圖1 仿真模塊的組成框圖
模塊的關(guān)鍵部分是天線、ATMEL的射頻卡讀寫(xiě)基站芯片U2270B和單片機(jī)AT89C2051.工作時(shí),基站芯片U2270B通過(guò)天線(一般使用銅制漆包線繞制直徑3 cm、線圈100圈即可,電感值為1.35 mH)以約125 kHz的調(diào)制射頻信號(hào)為RFID卡提供能量(電源),同時(shí)能接收來(lái)自H4001的信息,并以曼徹斯特編碼(Manchester)輸出.而AT89C2051則是從U2270B得到H4001卡的64位信息,根據(jù)曼徹斯特編碼規(guī)則進(jìn)行解碼,對(duì)數(shù)據(jù)加以校驗(yàn),獲取其中代表1O位十進(jìn)制序列號(hào)的32位二進(jìn)制數(shù),并轉(zhuǎn)換成對(duì)應(yīng)的ABA磁卡格式數(shù)據(jù),再?gòu)模疌LD、CLK、DATA 3根信號(hào)線仿真磁卡機(jī)芯輸出數(shù)據(jù).
2 RFID卡H4001及曼徹斯特編碼
圖1所示模塊中,配套使用的RFID卡是EM Microelectronic公司的H4001,該卡屬于無(wú)源的低頻RFID卡,典型工作頻率為125 kHz,工作所需要的能量是通過(guò)電磁耦合單元或天線,以非接觸的方式傳送.當(dāng)獲得足夠能量后,H4001便不斷循環(huán)地往外部發(fā)送其自身的序列號(hào)等64位信息.
發(fā)送時(shí)要對(duì)數(shù)據(jù)進(jìn)行曼徹斯特編碼和信號(hào)調(diào)制.規(guī)則如下:在每個(gè)時(shí)鐘周期(對(duì)應(yīng)1位數(shù)據(jù))的中間位置,當(dāng)數(shù)據(jù)位為“0”時(shí)電平由高向低跳變,而數(shù)據(jù)位為“1”時(shí)電平由低向高跳變;本模塊的另一種表示方法則恰好相反,其波形如圖2所示.
圖2 一個(gè)典型數(shù)據(jù)序列的Manchester編碼波形圖
對(duì)于采用曼徹斯特編碼的H4001,其數(shù)據(jù)速率為RF/64.假設(shè)基站工作時(shí)的射頻頻率是125 kHz,則對(duì)應(yīng)1位的時(shí)鐘(CLOCK)的周期( T)µs.
3 基站芯片U2270B與模塊電路
射頻卡的讀寫(xiě)需要由射頻卡基站芯片來(lái)完成數(shù)據(jù)的調(diào)制、發(fā)射和射頻的接收以及數(shù)據(jù)的解調(diào)任務(wù).ATMEL公司生產(chǎn)的U2270B是一種低成本、性能完善的低頻(100—150 kHz)射頻卡基站芯片,采用Man—chester編碼和雙相編碼,可用于讀取H4001 RFID卡.參照文獻(xiàn)[3]和[5],針對(duì)H4001 RFID卡,采用U2270B設(shè)計(jì)的射頻識(shí)別卡讀取模塊的電路見(jiàn)圖3.
圖3 基于U2270B的REID卡讀取模塊電路圖
通過(guò)調(diào)整U2270B的第15腳(RF端)所接電阻的大小,可將內(nèi)部振蕩頻率固定在125 kHz.計(jì)算公式如下:
讀卡時(shí),RFID卡發(fā)射來(lái)的經(jīng)過(guò)125 kHz載波調(diào)制后的信號(hào)由基站天線接收后,饋送到U2270B的第4 腳(Input)處,在第2腳(Output)輸出解調(diào)后的Manchester編碼的數(shù)據(jù)信號(hào),送給微處理器.應(yīng)當(dāng)說(shuō)明,射頻卡H4001返回的是采用Manchester編碼的數(shù)據(jù)流,基站U2270B負(fù)責(zé)信號(hào)的接收、整流和解調(diào)工作,而解碼工作由單片機(jī)AT89C2051完成.
4 磁卡的磁道及ABA編碼
根據(jù)ISO有關(guān)標(biāo)準(zhǔn)規(guī)定,磁卡或存折上的磁條劃分為3個(gè)磁道.第2道數(shù)據(jù)標(biāo)準(zhǔn)最初由ABA規(guī)定,第2磁道上記錄信息包含SS、PAN、FS、ADATA、ES和LRC等6項(xiàng)內(nèi)容.其中,SS為起始標(biāo)志,其代碼0BH;PAN為主帳號(hào);FS為域分隔符0DH;ADATA為附加數(shù)據(jù);ES為結(jié)束標(biāo)志,其代碼0FH;LRC為縱向冗余校驗(yàn)字符,低4位分別是從SS到ES各字符的值按位異或操作的結(jié)果.具體應(yīng)用時(shí)可根據(jù)實(shí)際情況做些修改,在本模塊中用RFID卡的序列號(hào)取代PAN,無(wú)需FS域和ADATA域.在SS之前及LRC之后都增加若干同步時(shí)鐘.
ISO有關(guān)標(biāo)準(zhǔn)還規(guī)定了該磁道編碼字符集(表1).
表1 第2道數(shù)據(jù)編碼字符集
表1中各字符編碼由BCD碼(4位二進(jìn)制數(shù))另加1位奇校驗(yàn)表示,即用P、B3、B2、B1、B0表示1個(gè)十進(jìn)制位或控制/標(biāo)志符,且P+ B3+B2+B1+B0=1.如ES(結(jié)束標(biāo)志)的代碼是0FH,加了校驗(yàn)的BCD碼則為1FH,對(duì)應(yīng)的字符是‘?’.
刷卡時(shí)按上述規(guī)定解碼磁卡信息,各字符的裝配順序由低位到高位.這需要磁頭、放大整形電路、時(shí)鐘與數(shù)據(jù)分離解碼電路(可用專門電路或軟件解碼),解碼后由3根信號(hào)線CLK、DATA和/CLD 把信息傳遞給有關(guān)處理單元進(jìn)行解釋處理.本模塊并不需要解碼磁卡信息,但是要求仿真ABA磁卡信息,并由CLK、DATA、/CLD信號(hào)線輸出.3根信號(hào)線的用途如下.(1)CLK(CLOCK)同步時(shí)鐘信號(hào),1個(gè)周期對(duì)應(yīng)1位二進(jìn)制.(2)DATA數(shù)據(jù)輸出端,在各CLK周期中間位置之前,確定其輸出電平.若發(fā)送“0”,則DATA置為高;反之,發(fā)送“1”則DATA置為低.(3)/CLD(CARD LOAD),有效(低電平)時(shí)表示已檢測(cè)到磁卡,正在刷卡.接收處理單元應(yīng)做好接收準(zhǔn)備.它必須比CLK、DATA先有效,后撤消.
手工刷卡速度范圍一般是10—120 cm·s-1,對(duì)應(yīng)的CLK周期變化范圍很大.為了便于后續(xù)處理,仿真輸出可取一個(gè)穩(wěn)定的較大值,滿足絕大多數(shù)應(yīng)用系統(tǒng)的要求,因此,本模塊設(shè)定為3 ms.
5 模塊的軟件設(shè)計(jì)
參照?qǐng)D1,U2270B接收114001的信息,并通過(guò)U2270B的Output腳把解調(diào)的數(shù)據(jù)輸出給AT89C2051 進(jìn)行解碼.AT89C2051除了對(duì)H4001卡信息解碼,還需進(jìn)行二進(jìn)制到十進(jìn)制數(shù)據(jù)轉(zhuǎn)換,仿真ABA編碼格式輸出數(shù)據(jù)等.本文介紹AT89C2051軟件核心部分的設(shè)計(jì)思路和程序流程.
5.1 H4001輸出的64位數(shù)據(jù)的解碼
參照?qǐng)D2的Manchester編碼,其解碼方法如下:在每個(gè)位時(shí)鐘周期的中間位置檢測(cè)電平的變化情況,如果檢測(cè)到電平由低變高則該位解碼為“0”;反之,電平由高變低則解碼為“1”.若未發(fā)生變化則視為信號(hào)異常進(jìn)行出錯(cuò)處理.
這里存在如何檢測(cè)、界定時(shí)鐘周期的起始位置、中間位置問(wèn)題,各種卡的做法并不一致.H4001沒(méi)有專門的硬同步信號(hào),不能檢測(cè)特殊信號(hào)作為起始標(biāo)志,而是規(guī)定64位數(shù)據(jù)位的前9位固定為全“1”,最后1位設(shè)定為“0”,作為起始和結(jié)束標(biāo)志或設(shè)定為同步信息.分析連續(xù)的若干位“1”和連續(xù)若干位“0”,其波形非常相似,所以實(shí)際解碼時(shí),應(yīng)該先檢測(cè)到1位“0”,再接著檢測(cè)連續(xù)的9位“1”,那么可以肯定,后續(xù)的54 個(gè)信息位便是40位真正的數(shù)據(jù)和14位相關(guān)的奇偶校驗(yàn)位,有關(guān)數(shù)據(jù)排列順序見(jiàn)文獻(xiàn)[4].可以想象,這里不應(yīng)該實(shí)際上也不可能再次出現(xiàn)1位“0”后跟隨連續(xù)的9位“1”.接下來(lái)是最后1位,必須是“0”,如此繼續(xù)下一循環(huán),否則便是出錯(cuò).為了提高效率,可以在循環(huán)內(nèi)邊檢測(cè)校驗(yàn),邊解碼保存H4001卡的信息,其程序流程如圖4所示.
圖4 H4001卡數(shù)據(jù)的解碼程序流程圖
圖4未對(duì)解碼得到的40位二進(jìn)制(BIN)數(shù)據(jù)進(jìn)一步分解.其中前8位是客戶標(biāo)識(shí)代碼,用于區(qū)別不同的系或客戶;后32位表示該卡的序列號(hào),一般需要轉(zhuǎn)換為l0 位的十進(jìn)制數(shù).例如,在該模塊上檢測(cè)到某卡的64位二進(jìn)制數(shù)據(jù)串如下:111111111 00011 10001 00000 00000 10010 10100 00000 10111 10010 0001l 1001 0.其中最先出現(xiàn)的是起始標(biāo)志9位“1”,然后l0組5位的數(shù)據(jù),各組的最后1位是本組的偶校驗(yàn)碼(從實(shí)際解碼得到的數(shù)據(jù)看,它們都是正確的),接著的1組4位數(shù)據(jù)“1001”是這l0組數(shù)據(jù)的縱向冗余校驗(yàn)碼(LRC)或偶校驗(yàn)碼,最后1組是1位的結(jié)束標(biāo)志“0”.第1組、第2組數(shù)據(jù)“0001”、“1000”(剔除校驗(yàn)碼,下同)代表客戶編號(hào)或版本號(hào),第3組到第1O組數(shù)據(jù)是以二進(jìn)制表示的本卡號(hào):0000 0000 1001 1010 0000 1011 1001 0001(高位在先),轉(zhuǎn)換成十進(jìn)制,得到的序列號(hào)是0010095505.再分別計(jì)算這l0組第1,2,3,4位的偶校驗(yàn)碼,應(yīng)該分別是1,0,0,1,正好是解碼得到的LRC.所以,這64位數(shù)據(jù)串是正確讀出的0010095505號(hào)H4001 RFID卡上數(shù)據(jù).
5.2 仿真ABA格式磁卡的解碼輸出
在得到l0位十進(jìn)制的序列號(hào)后再仿真ABA磁卡格式數(shù)據(jù)輸出.先把每1位十進(jìn)制數(shù)位以BCD碼再加1位奇校驗(yàn)碼表示(統(tǒng)稱字符),輸出時(shí)在這些表示序列號(hào)的字符前后還需增加其他附加字符或代碼,用作同步信號(hào)、起止標(biāo)志、校驗(yàn)碼.典型的輸出卡號(hào)的程序流程如圖5所示.
圖5 仿真ABA格式磁卡輸出卡號(hào)的程序流程圖
無(wú)數(shù)據(jù)輸出時(shí),/CLD信號(hào)應(yīng)一直為高電平,檢測(cè)到正確卡號(hào)后準(zhǔn)備發(fā)送數(shù)據(jù)時(shí)把它置低,并維持到發(fā)送過(guò)程結(jié)束;CLK信號(hào)線在延時(shí)3—5 ms后開(kāi)始以設(shè)定的頻率發(fā)出占空比為50% 的方波(時(shí)鐘),直到全部發(fā)送完畢;DATA在具體數(shù)據(jù)的前后,要發(fā)送5位以上“0”,作為同步信號(hào),起始標(biāo)志0BH(加校驗(yàn)位,發(fā)送順序ll010),數(shù)據(jù)之后發(fā)送結(jié)束標(biāo)志0FH(加校驗(yàn)位,發(fā)送順序11 1 11),5位LRC,還有5位以上“0”.⋯0’的表示方法是在CLK上半周結(jié)束前,把DATA線置高,一直維持到下一CLK周期;“1”則是在CLK上半周結(jié)束前,把DATA線置低,一直維持到下一CLK周期.
6 結(jié)束語(yǔ)
根據(jù)上述方案設(shè)計(jì)的模塊能較好地讀取H4001的信息并仿真ABA磁卡格式輸出數(shù)據(jù)(卡號(hào)).在調(diào)試過(guò)程中發(fā)現(xiàn),即使卡片沒(méi)有進(jìn)人模塊發(fā)送與接收的有效區(qū)域,或者說(shuō)模塊未真正收到H4001的信息,在U2270B的OUTPUT端也偶有信號(hào)輸出,但是沒(méi)什么規(guī)律;在卡片進(jìn)人有效區(qū)后,信號(hào)漸漸變得有規(guī)律,信號(hào)周期接近標(biāo)準(zhǔn)的512信號(hào).在判斷“O1”信號(hào)時(shí)一定要確認(rèn)其周期在512左右,如果不合則應(yīng)舍去,繼續(xù)等待,直到檢測(cè)出滿足符合周期要求的“O1”才開(kāi)始接著往下解碼,提取數(shù)據(jù).
另外,不排除在接收過(guò)程中由于干擾等因素造成錯(cuò)誤.由于H4001不斷循環(huán)發(fā)送64位卡內(nèi)信息,因此,可以直接放棄本循環(huán)的解碼與轉(zhuǎn)換,而等待下一輪(相隔約33 ms)再進(jìn)行解碼與轉(zhuǎn)換.這樣犧牲33 ms時(shí)間換取低誤碼率、漏碼率,整體性能遠(yuǎn)超出磁卡閱讀器.這種模塊實(shí)現(xiàn)方案性能可靠,具有高性價(jià)比,完全滿足應(yīng)用需求.
作者簡(jiǎn)介:沈文龍(1963一),男,福建莆田學(xué)院電子信息工程系,高級(jí)工程師.研究方向:嵌入式系統(tǒng)及其應(yīng)用.
Emafl:williptxy@126.com.
參考文獻(xiàn)
[1]曉玲,王正華.從Ic卡到RFID[J].中國(guó)集成電路,2007,16(4):75.
[2]陳大才.射頻識(shí)別(RFID)技術(shù)[M].北京:電子工業(yè)出版社,2001:193.
[3]王文理,田云霞,王麗.TEMIC系列射頻卡讀寫(xiě)器的開(kāi)發(fā)設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,2006,25(7):39—40.
[4]朱偉,薛有為,高玉.H4001非接觸式Ic卡讀卡程序的研究[J].電子工程師,2002,28(7):39—40.
[5]馬秀麗,李瑩,華宇寧.一種非接觸式射頻卡基站讀寫(xiě)電路的設(shè)計(jì)與應(yīng)用[J].金卡工程,2003,7(8):53—55.
[6]許丹,徐平.維根及ABA磁卡編碼產(chǎn)生器[J].金卡工程,2004,8(5):5l一52.