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