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