Mifare 系列射頻卡讀寫器的研制
文章出處:http://www.nyfzw.net 作者:李建軍 人氣: 發表時間:2011年10月15日
1 引言
IC卡按卡與外界數據傳送的形式不同,分為接觸式IC卡和非接觸式 IC卡。接觸式IC卡通過8個觸點從讀寫器獲取能量和交換數據;非接觸式IC卡通過射頻感應從讀寫器獲取能量和交換數據,所以非接觸式IC卡又叫射頻卡。現在常見的是接觸式IC卡,這類卡的讀寫操作速度較慢,操作也不方便,每次讀寫時必須把卡正確地插入到讀寫器的口槽才能完成數據交換。這樣,在公交、考勤等需要頻繁讀寫卡的場合就很不方便,而且IC卡的觸點暴露在外,容易損壞和搞臟而造成接觸不良。非接觸式IC卡是根據電磁感應原理產生的。它的讀寫操作只需將卡片放在讀寫器附近一定的距離之內就能實現數據交換,無需任何接觸,使用非常方便、快捷,不易損壞。因此,在公交、門禁、校園、企事業人事管理等方面有廣泛的應用前景。目前我國引進的射頻IC卡主要有PHILIPS公司的Mifare卡和ATMEL公司的Temic卡[1]。而PHILIPS公司的 Mifare卡現在是市場的主流產品,應用越來越廣。其典型型號為Mifare1 S50,它有1K字節E2PROM用于存放數據,分成16個區,每個區都有自己獨立的密碼,完善的安全機制使之具有一卡多用的特性。
Mifare 卡是一種智能卡(smart card),內建有中央微處理機(MCU)和ASIC等,使卡在安全保密性、認證邏輯、算術運算等微操作控制有序進行。 Mifare 卡讀寫器的設計一般用PHILIPS公司生產的讀寫模塊MCM200或MCM500。隨著技術的進步,PHILIPS公司現在生產了功能及性能更好的讀卡芯片,我們就是以這種芯片為基礎來設計和開發Mifare射頻卡讀寫器。
2 工作原理
射頻IC卡讀寫器以射頻識別技術為核心,讀寫器內主要使用了1 片Mifare卡專用的讀寫處理芯片(MF RC500)。它是一個小型的最大操作距離達100mm的Mifare讀/寫設備的核心器件,其功能包括調制、解調、產生射頻信號、安全管理和防碰撞機制。內部結構分為射頻區和接口區:射頻區內含調制解調器和電源供電電路,直接與天線連接;接口區有與單片機相連的端口,還具有與射頻區相連的收/發器、 64字節的數據緩沖器、存放3套寄存器初始化文件的E2PROM、存放16套密鑰的只寫存儲器以及進行三次證實和數據加密的密碼機、防碰撞處理的防碰撞模塊和控制單元。這是與射頻卡實現無線通信的核心模塊,也是讀寫器讀寫Mifare卡的關鍵接口芯片。
讀寫器工作時,與Mifare卡專用的讀卡芯片(MF RC500)相連的天線線圈[3]不斷地向外發出一組固定頻率的電磁波(13.56MHz),當有卡靠近時,卡片內有一個LC串聯諧振電路,其頻率與讀寫器的發射頻率相同,這樣在電磁波的激勵下,LC諧振電路產生共振,從而使電容充電有了電荷。在這個電容另一端,接有一個單向導電的電子泵,將電容內的電荷送到另一個電容內存儲。當電容器充電達到2V時,此電容就作為電源為卡片上的其他電路提供工作電壓,將卡內數據發射出去或接收讀寫器發來的數據與保存。
3 系統組成
非接觸式IC卡應用系統由Mifare卡、發卡器、讀卡器和 PC管理機組成,如圖1所示。其中Mifare卡存放身份號(PIN)等相關數據,由發卡器將密碼和數據一次性寫入完成。發卡器實際上是一種通用寫卡器,直接與PC機的RS-232串行口相連或經過RS-485網絡間接與PC機相連,由系統管理員管理,通過PC機設置或選擇好要寫入的數據,發出寫卡命令完成對Mifare卡的數據及密碼的寫入。與讀卡器不同,發卡器往往處于被動地位,不主動讀寫進入射頻能量范圍內的射頻卡,必須接收PC機的命令才操作,即必須聯機才能工作;而讀卡器往往可以脫離PC管理機工作。讀卡器是主動操作的,只要有非接觸式IC卡進入讀卡器天線射頻能量范圍,讀卡器便可讀寫卡中相關指定扇區的數據。
圖1 典型射頻卡應用系統組成框圖
發卡器與讀卡器在硬件設計上大同小異,都是由單片機控制專用讀寫芯片(MF RC500),再加上一些必要的外圍器件組成。圖2為讀卡器硬件系統組成。讀卡器用P89C58BP單片機作主控制器;MF RC500射頻芯片作為單片機與射頻卡通訊的中介;74HC595作顯示驅動器驅動LED數碼顯示器,PS/2總線作為通用編碼鍵盤接口,鍵盤與LED顯示器作為人機交互接口;AT24C256串行E2PROM作數據存儲器;DS1302串行時鐘芯片作硬件實時時鐘;MAX232或MAX485作串口信號轉換;DS1232作看門狗定時器;Q9012三極管作提示報警信號驅動,有卡進入并讀卡成功指示燈閃一下,喇叭叫一聲。Mifare射頻卡進入距離射頻天線100mm內,讀卡器就可以讀到卡中的數據。讀卡器讀到Mifare射頻卡中的數據后,系統單片機要將所讀數據及刷卡的時間一起存入存儲器 AT24C256,并在LED顯示器上顯示卡數據。沒有卡進入讀卡器工作范圍時,系統讀出實時時鐘芯片中的時間,在顯示器上顯示當前時間。讀卡出錯,顯示出錯標志。主控器P89C58BP內部有32KB的Flash存儲器,256字節RAM,可方便反復擦寫、修改程序,同時,由于外部不用擴展程序存儲器,可以簡化電路設計,減小讀卡器的尺寸,同時有較多的I/O口提供給系統使用。
圖2 讀卡器硬件系統組成
4 硬件設計
4.1 射頻芯片
MF RC500是Philips公司為Mifare卡設計的專用讀卡芯片,它與非接觸式IC卡之間通訊標準兼容ISO14443A,其功能框圖如圖3所示[4]。
圖3 MF RC500功能框圖
它內部包括微控制器接口單元、模擬信號處理單元和ISO14443A規定的協議處理單元,以及 Mifare卡特殊的Crypto1安全密鑰存儲單元。它可以與所有兼容Intel或Motorola總線的微控制器實現8位并行“無縫”接口(直接連接),其內部還具有64個字節的先進先出(FIFO)隊列,可以和微控制器之間高速傳輸數據;其片內的ISO14443A協議處理單元包括狀態和控制單元、數據轉換處理單元;片內的模擬單元能夠將數字信號處理單元的數據信息調制并發送到天線中,也可以將天線接收到的信息解調成數字信號傳送給協議處理單元,帶有一定的天線驅動能力。
MF RC500的工作頻率為13.56MHz,它可以在有效的發射空間內形成一個13.56MHz的交變電磁場,為處于發射區域內的非接觸式IC卡提供能量,同時卡或RC500需要傳送的數據信息也被調制在這個頻率上。RC500與非接觸式IC卡之間能量的傳遞和數據雙向傳輸的過程是初級和次級兩個線圈之間的耦合過程,從讀卡器發射給卡的數據信息在調制前采用彌勒(Miller)編碼,而從卡到讀卡器的數據信息采用曼徹斯特編碼。
4.2 實時時鐘
刷卡時要記錄刷卡的時間,用外接硬件實時時鐘芯片的辦法,為系統提供一個準確可靠的時鐘,用3V備用電池保證在系統掉電時也能正常走時。我們選用體積小、接口簡單的實時時鐘芯片DS1302。它是美國DALLAS公司推出的低功耗串行通信接口專用芯片,采用3線串行方式與單片機進行數據通信。DS1302片內還有31字節的靜態RAM,可自動進行閏年補償。數據可按單字節方式或多字節突發方式傳送。DS1302為8腳DIP封裝[5],與P89C58串行接口用3根線,SCLK接CPU的P2.2,同步時鐘輸入;RST接CPU的P2.3,通信允許信號;I/O接CPU的P2.4,串行數據輸入輸出。此外, X1,X2接32768Hz的石英晶振;Vcc1接3V備用鋰電池,主電源接Vcc2。
每個數據傳輸都是先送命令字節,隨后才是數據。單字節方式傳送時,在RST=1期間(RST必須為1數據傳送才有效),先送命令字節,緊接著發送一個字節的數據,DS1302在接收到命令字節后自動將數據寫入指定的內部地址或從該地址讀取數據。寫數據在SCLK的上升沿有效,讀數據是在SCLK的下降沿有效。多字節突發方式傳送時,在命令字節后,是多個字節的數據。在RST=1期間,DS1302接收到命令字節后,接著進行8個字節日歷時鐘數據或31個字節內部RAM單元數據的讀寫操作。DS1302內部寄存器地址中,00H-06H分別對應存放秒、分、時、日、月、星期、和年信息的寄存器,07H為寫保護控制寄存器,08H為電池充電控制寄存器。時鐘數據以 BCD碼格式存放在00H-06H這7個寄存器中。在DS1302中串行數據傳送都是低位在前,高位在后,這與AT24C256的數據傳送正好相反。
4.3 串行存儲器
我們用AT24C256作數據存儲器。AT24C256是串行E2PROM存儲器,支持I2C總線數據傳輸協議,32KB存儲器容量,用兩根線與CPU構成串行接口。SDA是雙向數據線,接CPU的P2.1;SCL是時鐘線,接CPU的P2.0;這兩根線必須接上拉電阻。WP是寫保護線,一般接地,表示允許讀寫操作。A0、A1是地址線,通過這二根地址線CPU最多可尋址4個AT24C256器件,4個芯片都有固定的地址,分別對應A0、A1為00到11,在此二根地址線上可擴充1~3片AT24C256串行E2PROM存儲器。串行E2PROM讀寫格式和操作時序如圖4所示。
圖4 串行E2PROM讀寫格式和操作時序
寫數據到AT24C256有字節寫和頁面寫兩種方式。在字節寫模式下,主器件(單片機) 發送起始信號和從器件(AT24C256)地址信息,在從器件送回應答信號后,主器件發送兩個8位地址字節給AT24C256,主器件在收到從器件的應答信號后,再發送數據到被尋址的存儲單元。AT24C256再次應答,并在主器件產生停止信號后開始內部數據的擦寫周期,在內部擦寫過程中AT24C256 不再應答主器件的任何請求。頁寫模式下一次最多可以寫入64個字節數據。從AT24C256中讀數據有三種方式,即當前地址讀、隨機讀和連續讀。如隨機讀,允許主器件對E2PROM的任意地址進行讀操作。分兩步進行,首先主器件發起始信號、器件地址和兩字節的存儲器地址執行一個偽寫操作,在 AT24C256應答之后,主器件再發起始信號和器件地址,AT24C256響應并發應答信號,然后輸出8位數據,主器件收到數據后發停止信號結束本次操作。連續讀可用隨機讀開始,在收到AT24C256發來的8位數據后,主器件不發停止信號,而發應答信號, AT24C256收到主器件的應答信號后,又傳下一個地址的數據,一直進行下去,直到主器件發停止信號為止。
5 程序設計
5.1 單片機主程序流程圖
單片機的程序包括:IC卡讀/寫/密碼驗證/擦除操作程序,與RC500通信中斷處理程序,鍵盤中斷處理程序,與PC機通信中斷處理程序,顯示程序及存儲器讀寫程序等。讀卡器的主程序流程圖如圖5所示:
圖5 讀卡器的主程序流程圖
5.2 讀/寫卡程序設計
讀寫卡過程是一個很復雜的程序執行過程,要執行一系列的操作指令,調用多個C51函數。包括裝載密碼,詢卡,防沖突,選卡,驗證密碼,讀寫卡,停卡。這一系列的操作必須按固定的順序進行。在沒有Mifare卡進入射頻天線有效范圍時,在低5位顯示當前時鐘,當有Mifare卡進入到射頻天線的有效范圍,讀卡程序驗證卡及密碼成功后,將卡號和讀卡時間及相關數據作為一條記錄存入E2PROM存儲器中,并在LED顯示器高5位上顯示卡號。
程序設計采用單片機匯編語言和KeilC51混合編程。看門狗定時器中斷服務程序采用匯編語言編寫,其它程序采用C語言編寫。程序的每一部分按模塊化設計成一個文件,單獨調試通過后,再在KeilC51環境下加入到工程文件中匯編生成HEX文件,用仿真器進行仿真通過后,寫入P89C58BP芯片中脫離仿真器運行。
6 結束語
本文設計的Mifare系列射頻卡讀寫器能夠讀寫多種 Mifare系列射頻卡,如Mifare 1 S50、Mifare Light和Mifare Pro等,讀寫距離在10cm范圍內。該讀寫器操作方便靈活,只要通過計算機串口按規定協議發送命令給它即可完成讀卡、寫卡、取消和更改密碼等操作;也可設置為脫離計算機獨立工作方式,必要時再將所存儲的記錄數據上傳到上位機供其處理。本讀寫器已經實際應用在長沙某非接觸式IC卡預付費電度表的售電系統中,系統運行良好、可靠性高。實際應用中證明:此射頻卡讀寫器系統讀寫非接觸式IC卡片迅速、方便、可靠、安全、穩定,深受用戶歡迎。有足夠的優勢取代目前仍使用磁卡和接觸式IC卡讀寫器的應用,具有巨大的市場競爭力和廣闊的發展前景。