目次
1 緒論 1.1 課題研究的背景和意義 1.2 目前國內外研究現狀 1.3 本課題設計的主要工作和任務 2 讀卡器系統方案設計與實現 2.1 IC卡介紹 2.2 讀卡器基本原理 2.3 總體方案論證 3 系統硬件設計與實現 3.1 電源模塊 3.2 人機接口模塊 3.3 系統時鐘模塊 3.4 存儲模塊 3.5 MF-RC500讀寫模塊 3.6 通信模塊 4 系統軟件設計與實現 4.1 軟件設計環境 4.2 主程序的設計 4.3 讀/寫卡程序設計 4.4 讀卡器外圍基本電路程序的設計 4.5 通信部分程序設計 5系統調試 結 論 致 謝 參 考 文 獻 附錄A 總電路圖 附錄B 讀/寫卡源程序
1 緒論 1.1 課題研究的背景和意義 IC卡是集成電路卡(Integrated Circuit Card)的英文簡稱,在有些國家也稱之為智能卡、微芯片卡等,IC卡是在較為原始的磁卡的基礎上發展起來的,它的最初設想是由日本人提出來的。1969年12月,日本的有村國孝提出一種制造安全可靠的信用卡方法,并于1970年獲得專利,那時叫ID卡(Identification Card)。1974年,法國的羅蘭·莫雷諾(Roland Moreno)發明了帶集成電路芯片的塑料卡片,并取得了專利權,這就是早期的IC卡。1976年法國布爾(Bull)公司研制出世界第一枚IC卡[1]。 早期的IC卡系統是接觸式的,它有其本身不可克服的缺點,如接觸磨損、交易速率慢、難以維護、基礎設施投入大等。隨著信息業和服務業的全球化,在一些場合,對信息載體的便攜性、安全性及易用性等方面提出更高的要求,于是非接觸式IC卡以其無機械磨損、容易維護、方便使用等優點,成為IC卡中潛力最大的新軍而備受國內外業界的矚目。 非接觸式IC卡系統是當今世界先進的射頻技術和IC卡技術相結合的產物,是世界上最近幾年發展起來的一項新技術,它成功地將射頻識別技術和IC技術結合起來,解決了無源和免接觸這一難題,是電子器件領域的一大突破,使卡片在靠近讀寫器表面時即可完成卡中數據的讀寫操作。非接觸式IC卡一經問世,便立即引起廣泛的關注。非接觸式IC卡操作方便、抗干擾性高、可靠性高、安全性高的特點,使得它在一些接觸式IC卡不適用或者無法使用的場所,具有無可比擬的優勢,被廣泛應用于公交、收費、門禁系統、考勤系統等領域[2]。 目前非接觸式IC卡有很多不同的標準,如IS014443A和IS014443B等,符合不同標準的卡片在不同的領域內相互滲透和競爭。卡片類型的多樣性決定了讀卡器的多樣性,而市場的多樣性則決定了即使是同類型的應用,也可能使用不同類型的卡片,若讀卡器只能讀取某一種類型的卡片,那么在處理這個應用時,必將需要多臺讀卡器,造成資源的重復浪費,這樣的讀卡器必將不能適應市場的需求,這就對讀卡器的讀卡能力提出了更高的要求。設計出一種能讀取多種類型卡片的讀卡器,既是市場應用的需求,也是未來的發展趨勢。目前,讀卡器已經開始大量應用于各種“一卡通”系統中,這些應用對讀卡器的功能要求越來越高,除了傳統的對卡號的讀取之外,需要能夠對卡片進行更高層的數據操作,與PC設備之間能進行信息交流。為了適應這種發展趨勢,非接觸式IC卡的讀卡器的開發與設計也迅速發展起來[3]。 1.2 目前國內外研究現狀 智能卡的發展歷史并不久遠,而且全球各地發展不均衡,其中歐洲發展得最早、最好。智能IC卡源于七十年代的歐洲和日本,后來由法國人提出的將處理器置入IC卡卡片中的思想得到了廣泛接受,由于其具有完善的密碼功能從而有效的解決了智能卡的舞弊行為。隨后智能卡在1977-1998年間得到了迅速發展。九十年代初期,智能卡開始應用于GSM數字移動通訊、有線電視的收費等領域。在美國,智能卡發展相對遲緩,但隨著智能卡在歐洲的成功使用,其在美國產生巨大影響,盡管如此,美國在智能卡技術等領域仍處于世界領先地位。 據Innovation國際發明組織統計,2005年10月到2006年9月全世界IC卡硬件產業中,IC卡及其讀寫設備數量分別為42000萬張和877000臺,其中法國分別占98%和71%,處于世界領先地位。目前,法國生產制造的IC卡不僅在數量上領先各國,其應用領域也靈活多樣,如在金融、電信、醫療和交通運輸等各個領域都有IC卡的應用 我國對IC卡行業的發展始于1994年,
1.3 本課題設計的主要工作和任務 非接觸式IC卡代表了IC卡發展的方向,同接觸式IC卡相比其獨有的優點使其能夠在絕大多數場合代替接觸式IC卡的使用,而在非接觸式IC卡應用系統中非接觸式IC卡讀卡器是關鍵設備。根據課題設計要求,本課題將開發一種基于飛利浦公司MF-RC500讀卡芯片的非接觸式IC卡讀卡器,其具有以下特點:能識別TYPEA型卡片,讀取卡號,并有防沖突功能;能對TYPEA 的卡片進行高層操作;可以使用RS232通信接口輸出來與上位機之間通信;可根據實際需求將其作為門禁系統中的讀卡器,或者一卡通系統中的讀卡器。本設計完成后所要達到的主要指標有: (1) 顯示系統:液晶屏顯示,能顯示系統時鐘和卡片信息等; (2) 按鍵操作:能實現對系統的設置和卡上數據的操作; (3) 機器讀卡速度:0.5秒可完成一次打卡過程,讀卡距離為5至10厘米; (4) 保密性和防偽性:能辨認卡的密碼,非授權范圍內的卡作報警處理; (5) 存儲容量:每臺讀寫器最多可存儲2000條記錄。 本設計中需要解決的若干關鍵技術有: (1) 射頻識別技術; (2) 軟件的安全機制; (3) 由于射頻的特殊性給系統調試帶來的困難。 該讀寫器完成以后,既可獨立使用,完成基本功能,外擴簡單接口后,就能構成IC卡考勤、門禁、售飯一卡通等系統,在公交、校園、娛樂場所等方面有廣泛的應用前景。
2.1IC卡介紹 目前經常接觸到的IC卡有兩種:接觸式和非接觸式的IC卡。接觸式的IC卡通過機械觸點從讀寫器獲取能量和交換數據;非接觸式IC卡通過線圈射頻感應從讀寫器獲取能量和交換數據,所以又稱射頻卡。日前在社會上常見的是接觸式IC卡,它具有存儲量大,可實現一卡多用等功能。但是,這類卡的讀寫操作速度較慢,操作也不方便,每次讀寫時必須把卡插入到讀寫器中才能完成數據交換,這樣在讀寫卡片頻繁的場合就很不方便,而且讀寫器的觸點和卡片上IC卡的觸腳暴露在外,容易損壞和搞臟而造成接觸不良。 非接觸式智能卡又稱射頻卡,是近幾年發展起來的新技術。它是根據射頻電磁感應原理產生的,它的操作只需將卡放在讀寫器一定距離內就能實現數據交換。它成功地將射頻識別技術和IC卡技術結合起來,將具有微處理器的集成電路芯片和天線封裝于塑料基片之中。讀寫器采用兆頻段及磁感應技術,通過無線方式對卡片中的信息進行讀寫并采用高速率的半雙工通信協議。其優點是應用范圍廣、操作方便。因此,在公交、門禁、娛樂場所等方面有廣泛的應用前景。目前我國引進的射頻卡主要以PHILIPS公司的MIFARE卡為主[6]。 本系統在調試過程中使用的是PHILIPS公司的MFI IC S50,其屬于TYPEA型卡,下面對其做一些簡述:Mifare1 IC 卡的核心是PHILIPS公司MF1 IC S50系列微模塊,它確定了卡片的特性以及卡片讀寫器的諸多性能。Mifare1 IC智能卡內建有高速的MCU,卡片上除了IC微晶片及一副高效率天線外,無任何其他元件;卡片上無源,工作時的電源能量由讀寫器天線發送無線電載波信號耦合到卡片上天線而產生電能;它與讀寫器通信使用握手式半雙工通信協議。 2.2 讀卡器基本原理 非接觸式IC卡讀寫器以射頻識別技術為核心,讀寫器內主要使用專用的讀寫處理芯片,它是讀/寫操作的核心器件,其功能包括調制、解調、產生射頻信號、安全管理和防碰撞機制。其內部結構分為射頻區和接口區:射頻區內含調制解調器和電源供電電路,直接與天線連接;接口區有與單片機相連的端口,還具有與射頻區相連的收/發器、數據緩沖器、防碰撞模塊和控制單元。這是與智能IC卡實現無線通信的核心模塊,也是讀寫器讀寫智能IC卡的關鍵接口芯片。讀寫器工作時,不斷地向外發出一組固定頻率的電磁波,當有卡靠近時,卡片內有一個LG串聯諧振電路,其頻率與讀寫器的發射頻率相同,這樣在電磁波的激勵下,LG諧振電路產生共振,從而使電容充電有了電荷。在這個電容另一端,接有一個單向導電的電子泵,將電容內的電荷送到另一個電容內存儲。當電容器充電達到一定電壓值時,此電容就作為電源為卡片上的其他電路提供工作電壓,將卡內數據發射出去或接收讀寫器發出的數據與保存[7]。讀卡器的工作過程如下: (1) 讀卡器將載波信號經天線向外發送; (2) 卡進入讀卡器的工作區域后,卡內天線和電容組成的諧振回路接收讀卡器發射的載波信號,射頻接口模塊將其轉換成電源電壓、復位信號,使卡片激活; (3) 存取控制模塊將存儲器中信息調制到載波上,經卡上天線送給讀卡器; (4) 讀卡器對接收到的信號進行解調、解碼后送至后臺計算機; (5) 后臺計算機根據卡號的合法性,針對不同應用做出相應的處理和控制。 2.3 總體方案論證 2.3.1 各模塊方案選擇與論證 (1)控制器的選擇 方案一:采用ATMEL公司的AT89S52作為系統的控制器。AT89S52單片機算術運算功能強、軟件編程靈活、自由度大,可用軟件編程實現各種算法和邏輯控制,并且由于其功耗低、體積小、技術成熟和成本低等特點,使其在各個領域應用廣泛。AT89S52是我們熟悉的控制器,編程比較熟悉,易于掌握。 方案二:采用FPGA(現場可編程門陣列)作為系統的控制器。由于本設計對數據處理的速度要求不高,FPGA的高速處理優勢得不到充分的體現,并且由于集成度高,使其成本偏高,同時由于芯片的引腳較多,實物硬件電路板布線復雜,加重了電路設計和實際焊接的工作。由于AT89S52控制器能夠很好的實現該系統的各項功能,成本低,技術成熟,故采用方案一。 (2)RFID讀卡芯片的選擇 隨著RFID市場的迅猛增長,各大傳統IC芯片制造商都加入到RFID讀卡芯片的開發當中,可供選擇的芯片很多,下面介紹幾款主流的RFID讀寫芯片: 1) TI公司的TRF7960芯片。TRF7960是一個整合的13.56MHz RFID讀卡器系統的模擬前端和數據幀系統,可以用于較寬范圍的近耦合RFID系統。它的特點是完全整合協議處理,內部獨立的模擬與數字電源,AM和PM雙信號輸入接收解調,讀卡器與讀卡器之間反沖突算法,輸出功率可調,內建帶通濾波器并且用戶可選擇邊界頻率,低功耗設計,掉電模式下電流小于lμA,激活狀態10mA;與微處理器接口為8位并行接口或者4線SPI接口[8]。 2) NXP公司(原飛利浦半導體公司)是較早進入RFID芯片行業的國際半導體公司,在射頻讀寫芯片上產品較全。MF-RC500芯片就是NXP公司生產的。MF-RC500是高整合的13.56MHz非接觸IC卡讀寫芯片,整合了所有主動非接觸通信方式和協議,MF-RC500支持ISO 14443A&B的所有層的通信方案;內部收發器部分能夠驅動近耦合設計的天線而不需要另外的電路;數字部分能處理完整的ISO14443幀數據還有錯誤檢測;具有合適的并行接口,可以直接與8位的微處理器相連,并且支持SPI兼容接口。 由于MF-RC500能夠滿足設計需求,而且應用范圍比其他的芯片更廣,資料齊備,于是選擇MF-RC500作為本設計的射頻接口芯片。 (3)顯示模塊的選擇 方案一:使用LED顯示。數碼管顯示,對外界環境要求低,操作簡單,但需要采用動態掃描,占用資源比較多,而且其不能很好的顯示字符,由于本系統要顯示的信息量較多,所以雖然該方案在程序上容易實現,但并不能滿足要求。 方案二:使用液晶顯示屏顯示各種信息。液晶顯示屏具有輕薄短小、低耗電量、平面直角顯示以及影像穩定不閃爍等優勢,并且符合本系統顯示信息量多的需求,利用LCD自帶的字符庫,進行編程就可以實現所需信息的顯示,其不必利用控制芯片創建字符庫,既節省了資源,又省去了該部分的大量編程任務。為了使人機界面更加友好,操作更加方便,采用LCD液晶顯示。 (4)鍵盤模塊的選擇 方案一:采用獨立式按鍵。獨立式按鍵接口設計優點是電路的配置靈活,軟件實現簡單。但缺點也很明顯,每個按鍵需要占用一跟口線,若按鍵較多,資源浪費將比較嚴重。因此本方法主要用于按鍵較少或對操作速度要求較高的場合。 方案二:采用矩陣式按鍵。矩陣式按鍵接口適用于按鍵數量較多,又不想使用專用鍵盤芯片的場合。這種方式的按鍵接口由行線和列線組成,按鍵位于行、列的交叉點上。這種方的優點是可以節省很多I/O資源,相對于專用鍵盤可以節省成本,且更為靈活。缺點是需要用軟件處理消抖、重鍵等。由于該系統要求具有對卡片進行讀/寫操作,系統時鐘的設置等,用到的按鍵較多,故采用方案二。 (5)系統時鐘和存儲芯片的選擇 刷卡時要記錄刷卡的時間,用外接硬件時鐘芯片的辦法,為系統提供一個準確可靠的時鐘,用3V備用電池保證在系統掉電時也能正常走時。在此選用體積小、接口簡單的實時時鐘芯片DS1302。它是美國Dallas公司推出的低功耗串行通信接口專用芯片,采用3線串行方式與單片機進行數據通信[9]。 采用AT24C64作數據存儲器。AT24C64是串行E2PROM存儲器,支持I2C總線數據傳輸協議,8K存儲器容量,用兩根線與CPU構成串行接口。由于本設計采用的AT89S52單片機不具備I2C總線接口,因此采用軟件法加以解決。 2.3.2 總體方案確定 根據上述分析,系統設計方案如下:本IC卡讀寫器擬以ATMEL公司的AT89S52單片機作為微控制器,采用MF-RC500芯片作為射頻卡讀/寫模塊,采用DS1302作為系統時鐘,以AT24C64作為不掉電存儲器,采用LCD顯示,并以RS232接口和計算機通信,組成一套功能齊全的非接觸IC卡讀寫系統。當IC卡在天線區域經過時,單片機自動需求對IC卡進行讀寫,再把讀/寫卡的時間一起存到存儲器中,計算機可以通過串口把相關讀/寫卡信息讀到計算機上,再進行統計、報表和打印輸出等。系統框圖如圖2.1所示。 
圖2.1 IC卡讀寫器系統結構框圖 3.1 電源模塊 該電源按常規設計,為系統工作提供所需電源,其輸入為220V、50Hz交流電,輸出電壓等級為±5V,電路原理圖如圖3.1所示。該部分主要采用78系列穩壓器,結構簡單,調整方便,輸出電壓紋波小。當所需電流超過穩壓器標定值時,可采用外接功率管的方法來擴大輸出電流。市電交流220V經變壓器降壓為交流6V,經過全橋整流輸出直流電流,再經過1000μF的電解電容濾波,除去整流后的交流成分,送至各三端穩壓器,輸出需要的電壓。經過各三端穩壓器穩壓后,在LM7805輸出端輸出+5V直流電壓,LM7905輸出的端輸出-5V直流電壓[10]。 圖3.1 ±5V直流穩壓電源 3.2 人機接口模塊 本系統的人機接口部分采用LCD顯示、3×2矩陣式鍵盤,用來實現對IC 卡的操作和系統設置等功能。LCD型號為ACM1602A,該字符型液晶顯示模塊由字符型液晶顯示屏,具有字符發生器ROM可顯示192種字符,有64個字節的自定義字符RAM,可自定義8個5?8點陣字符或四個5?11點陣字符。 在此系統中采用LCD分屏顯示,每一屏第一行的首地址是80H,第二行的首地址是0C0H;每行寫入16個字節,每屏寫入二行(第一行為系統的時間,第二行為卡片的信息)。ACM1602A集成度高,其內部已經帶有驅動電路,所以不用再為其設計驅動電路,由于1602是一個并口器件所以占用單片機的接口資源較多,為節省單片機接口資源使用了一個74HC595進行串口轉并口,使1602與單片機進行間接連接,LCD與單片機的連結圖如圖3.2所示。 
圖3.2 LCD顯示電路 3.3 系統時鐘模塊 刷卡時要記錄刷卡的時間,用外接硬件實時時鐘芯片的辦法,為系統提供一個準確可靠的時鐘,用3V備用電池保證在系統掉電時也能正常走時,在此選用體積小、接口簡單的實時時鐘芯片DS1302。 (1)時鐘芯片介紹 DS1302是美國DALLAS公司開發的具備功耗低、接口容易串行實時時鐘芯片。在本設計中使用的DS1302為8腳DIP封裝形式,其中1腳和8腳為電源電壓引腳,單電源供電時接8腳,雙電源供電時,主工作電源接1腳,備份電源接8腳。2腳和3腳為32.768KHz晶振引腳;5腳RST為復位端,若其被置為低電平,則中止所有數據傳送,I/O腳變為高阻態,系統復位;6腳I/O為數據輸人/輸出端;7腳SCLK為串行時鐘輸入端,所有地址/命令字節和數據字節都是在時鐘的同步控制下從I/O腳串行輸入輸出的。DS1302通過SCLK、I/O、RST三根線與外部進行同步串行通信。 (2)DS1302與單片機的連接 在本設計中采用單片機的P1.0-P1.2與DS1302進行數據通信,以提供系統所需的時鐘,其連接方法如圖3.3所示。 
圖3.3 DS1302與單片機接口電路 3.4 存儲模塊 在本設計中采用串行E2PROM芯片AT24C64作數據存儲器。AT24C64 是ATMEL公司生產的采用I2C 總線標準常用的串行E2PROM 存儲芯片,其支持I2C總線數據傳輸協議,64K(bit)存儲器容量,用兩根線與CPU構成串行接口。AT24C64一般具有兩種寫入方式,一種是字節寫入方式,還有一種是頁寫入方式。AT24C64的讀操作有當前地址讀、隨機讀、多字節讀三種方式。AT24C64其主要管腳功能描述如下:SCL,串行時鐘。這是一個輸入管腳,用于產生器件所有數據發送或接收的時鐘;SDA,串行數據/地址。這是一個雙向傳輸端,用于傳送地址和所有數據的發送或接收;A0、A1、A2,器件地址輸入端,這些輸入端用于多個器件并聯時設置器件地址[11]。 在系統中采用單片機的P3.3、P3.4口與AT24C64進行連接,其與單片機的接口接法電路如圖3.4所示,由于本系統中采用到的AT89S52單片機不具備I2C總線接口,因此采用軟件法加以解決。
圖3.4 AT24C64與單片機接口電路 3.5 MF-RC500讀寫模塊 3.5.1 MF-RC500介紹 PHILIPS公司的MF-RC500是應用于13.56MHz非接觸式通信中高集成讀卡IC系列中的一員。該讀卡IC系列利用先進的調制和解調概念,完全集成了在13.56MHz下所有類型的被動非接觸式通信方式和協議。MF-RC500支持IS014443A所有的層,其功能框圖如下: 圖3.5 MF-RC500的功能框圖 MF-RC500內部包括并行微控制器接口、雙向FIFO緩沖區、中斷、數據處理單元、狀態控制單元、安全和密碼控制單元、模擬電路接口及天線接口。MF-RC500外部接口包括數據總線、地址總線、控制總線、電源等。MF-RC500的并行微控制器接口自動檢測連接的8位并行接口的類型。它包含了一個雙向FIFO緩沖區和一個可配置的中斷輸出,這樣就為連接各種MCU提供了很大的靈活性,即使使用非常低成本的器件也能滿足高速非接觸式通信的要求。數據處理部分執行數據的并行-串行轉換[12]。狀態和控制部分允許對器件進行配置以使性能調節到最佳狀態。模擬電路包含一個具有非常低阻抗橋驅動器輸出的發送部分,這使得最大操作距離可達100mm,接收器可以檢測到非常弱的應答信號。MF-RC500管腳如圖3.6所示。 
圖3.6 MF-RC500管腳圖 該器件為32腳SO封裝,器件使用了3個獨立的電源以實現在EMC特性和信號解耦方面達到最佳性能。MF-RC500具有出色的RF性能并且模擬和數字部分可適應不同的操作電壓,其驅動、模擬、數字部分分別使用單獨電源供電。 表3.1 天線連接管腳
為了驅動天線,MF-RC500通過TXl和TX2提供13.56MHz的能量載波。根據寄存器的設定對發送數據進行調制得到發送的信號。智能卡采用RF場的負載調制進行響應。天線拾取的信號經過天線匹配電路送到RX腳,RC500內部接收器對信號進行檢測、處理,然后將數據發送到并行接口由微控制器進行讀取。 表3.2 MF-RC500并行口控制管腳
3.5.2 天線模塊的設計 為了同非接觸式智能卡通信,讀卡器內必須有能發射和接收射頻信號的天線。天線用于產生磁通量?,而磁通量用于向應答器提供電源并在閱讀器和應答器之間傳送信息。因此,對讀卡器天線的構造有了三個基本的要求: ? 使天線線圈的電流i1最大,用于產生最大的磁通量?; ? 功率匹配,以最大程度地利用產生磁通量的可用能量; ? 足夠的帶寬,以無失真地傳送數據調制的載波信號[13]。 (1)天線尺寸和讀寫距離 由于MF-RC500是低功耗設計,因此卡和天線之間的耦合系數必須符合一定的值,卡和天線之間的耦合系數不能低于0.3。天線一般設計為三圈,可以設計為圓形或者方形天線。天線的直徑必須介于0.5-1.5mm之間。表3.3 給出了卡和天線的耦合系數為0.3 時的天線大小和讀寫距離關系表。 表3.3 天線大小和讀寫距離關系表
根據技術指標以及尺寸等方面的要求,要本設計中讀寫器天線參數如下: 天線形狀:方形天線 天線圈數:三圈 幾何尺寸:65mm×54mm 天線導體直徑:1mm (2)天線電感的計算 天線的電感必須介于800nH和4.2μH之間。天線的電感通過下列公式計算:  (3.1) 其中: L—讀卡器天線電感,μH; I—天線導體長度,cm; D—天線導體寬度,cm; N—天線導體圈數; P—由天線線圈的技術而定的N的指數因子。 上述天線線圈的電感公式只能作為首次估測之用,實際的天線線圈的電感必須通過儀器測量而定,但偏差不會很大。根據以上公式以及本設計中的參數,P值取1.6,計算出的天線的電感L得1895μH。 (3)EMC電路及接收電路 EMC電路:射頻識別系統的工作頻率為13.56MHz,是由一個石英晶振產生的,同時它還產生更高頻率的諧波,為了確保能夠有效抑制三次,五次和更高次的諧波對信號的干擾作用,需要有一個低通濾波器來濾除這些高次諧波。 接收電路:MF-RC500內部的信號接收部分使用由子載波的雙邊帶調制出的信號,為了減少干擾,在地和VMID間接了一個電容,接收部分需要在Rx和VMID腳之間接一個電阻分壓結構。另外,在天線線圈和分壓器之間串一個電容會獲得質量更高的信號[14]。濾波器與接收電路的電路原理圖如圖3.6所示。 圖3.7 EMC及接收電路 (4)天線電路圖 天線電路圖如圖3.8所示。 圖3.8 天線電路 圖中電容C2A_a、C2A_b、C2A_a、C2A_b、(通稱C2)的值是由天線的電感值決定的,且需要根據天線的形狀進行調整。C2電容的大小嚴格影響讀卡器的性能,這就需要在確定了卡的類型之后在實際的使用環境中進行試驗,確定不同的C2值,使讀卡器具有最好的性能表現。 RC500有一個內部信號驅動管腳AUX,當讀卡器發出某一指令時,可以使用示波器觀察該引腳的輸出信號,不斷改變卡與讀卡器之間的距離和C2值,示波器輸出不同的波形,根據不同的波形即可確定讀卡器最好性能的C2值[15]。在本課題設計中,根據天線的參數進行試驗,得到的最終C2值如表3.4所示。 表3.4 C2電容值表
(5)天線的品質因數和匹配電阻 用于電感耦合式射頻識別系統的天線,其特征值是諧振頻率f0和品質因數Q。較高的品質因數Q值會使天線線圈中的電流強度大,由此改善對應答器的功率改善情況。與之相反,天線的傳輸帶寬剛好與品質因數成反比例變化,選擇的品質因數過高會導致帶寬縮小從而明顯地減弱應答器接收到的調制邊帶。 電感讀卡器天線的品質因數可以通過線圈電阻與線圈電阻的歐姆損耗和/或串聯電阻的比值計算出來,公式如下:  (3.2) 其中fR=13.56MHz,由前面的分析可以知道天線的感抗LANT和阻抗RANT,也可以用儀器測出來。一般情況下Q值在10到50之間,作為數據傳輸過程這個值還會減小,數據從讀卡器到射頻卡使用米勒編碼,脈沖寬度為T=3μs,帶寬B定義如下:  (3.3) 所以Q值:  (3.4) 考慮到溫度漂移等其他因素的影響,實際上可以把Q值定在35是一個比較合理的值。考慮到在估算中減小了Q值,所以這里需要外加一個電阻來調節天線的品質因素,可以用下面的公式來計算REXT:  (3.5) 3.5.3 MF-RC500與AT89S52連接圖 MF-RC500與AT89S52連接圖如圖3.9所示,圖中單片機AT89S52作為控制核心,主要完成數據采集、處理、存儲及控制電路工作;MF-RC500 支持不同的微控制器接口,一個智能的自動檢測邏輯可以自動適應系統總線的并行接口。圖中使用信號NCS選擇芯片。對于MF-RC500,若要使用獨立的地址和數據總線與微控制器相連,必須將ALE腳連接到DVDD,若使用復用的地址和數據總線與控制器接口,必須將ALE腳連到微控制器的ALE信號。在本設計中,該讀寫器采用地址數據總線復用方式與微控制器相連。在對MF-RC500進行讀寫操作時,若要使用NWR和NRD與微控制器相連,則這兩個引腳應該連接到微控制器的讀寫管腳上。圖中使AT89S52的WR和RD管腳分別與MF-RC500的NWR管腳和NRD管腳相連來控制讀寫使能;MF-RC500工作頻率由石英晶體而產生,同時與OSCIN管腳相連可作為外部時鐘;P3.2管腳與MF-RC500的IRQ管腳相連用以接收中斷請求;由圖可以看出,本系統采用中斷(INT0)工作模式,即MCU利用MF-RC500提供中斷信息對其進行控制。另外,根據系統的需要,可以采用查詢方式對MF-RC500進行操作。 圖3.9 MF-RC500與AT89S52連接圖 3.6 通信模塊 本智能卡讀寫器采用RS232標準來實現讀卡器和上位機之間的通信,能實現RS232通信協議的芯片很多,其中MAXIM公司生產的MAX232是一款比較優良的RS232通信芯片。選取它的主要依據在于:單5V電源供電,與讀卡器里其它芯片的工作電壓相同;符合所有EIA/232E標準;多路輸入輸出。MAX232其引腳功能說明如表3.5所示。
表3.5 MAX232引腳說明
在硬件電路連接上采用三線制(RXD、TXD、GND)軟握手的零MODEM方式,即將PC機和單片機的發送數據線(TXD)與接收數據(RXD)交叉連接,二者的地線(GND)直接相連,而其它信號線、如握手信號均不用,而采用軟件握手,這樣既可以實現預定的任務又可以簡化電路設計、節約成本。MAX232與AT89S52的電路連接如圖3.10所示。 圖3.10 MAX232與AT89S52的連接圖
非接觸智能卡系統的軟件設計可分為四部分,分別為主程序設計、RC500的讀/寫程序的設計、讀卡器外圍基本電路的應用程序設計和通信部分程序的設計。主程序主要包括:IC卡讀/寫/密碼驗證/擦除操作程序,RC500通信中斷處理程序,鍵盤中斷處理程序,PC機通信中斷處理程序,顯示程序及存儲器讀寫程序等,對MF-RC500的應用程序的設計也即是對MF-RC500操作指令的程序設計,對讀卡器外圍基本電路程序的設計包括LCD顯示程序設計、鍵盤掃描程序設計、數據存儲程序設計和RS232通信程序設計。 4.1 軟件設計環境 一個好的程序設計思想,加上適當的編譯軟件、仿真器和編程器,是單片機軟件開發的基本要求。本系統程序的設計以模塊化和結構化的設計思想為指導。單片機開發所使用的語言一般為匯編語言。匯編語言的優點是代碼生成效率高,程序運行速度快,其缺點是程序的可讀性和可移植性都較差,而且用匯編語言編寫單片機應用系統程序的周期長,調試和排錯比較困難。C語言是一種通用的計算機程序設計語言,在國際上十分流行,它既可用來編寫計算機的系統程序,也可用來編寫一般的應用程序。用它編寫的程序,具有較好的可讀性和可移植性。有經驗表明,用C語言編寫的程序生成代碼的效率僅比用匯編語言編寫的程序10~20%。德國Keil軟件公司的C51編譯器可以直接對8051單片機的內部特殊功能寄存器和I/O口進行操作,直接訪問片內或片外存儲器,還可以進行各種位操作,能產生簡潔、高效率的程序代碼,在代碼質量上可以與匯編語言相媲美。因此系統在設計中多數的程序使用了C語言進行設計,少數的一些程序用匯編語言編寫,用C語言進行調用。 4.2 主程序的設計 讀卡器工作的過程是一個復雜的程序執行過程,要執行一系列的操作指令,調用多個函數。其主要包括鍵盤掃描、LCD顯示、讀寫E2PROM、讀/寫卡及與上位機通信等。這一系列的操作必須按固定的順序進行。在沒MF1卡進入射頻天線有效范圍內時,在LCD液晶上顯示當前時鐘,當有MF1卡進入到射頻天線的有效范圍內時,讀卡程序驗證卡及密碼成功后,將卡號和讀卡時間作為一條記錄存入E2PROM存儲器中,并在LCD顯示器上顯示該卡的卡號等信息。 讀卡器的主程序主要由下位機來完成,單片機中的程序主要包括:IC卡讀/寫/密碼驗證/擦除操作程序,與RC500通信中斷處理程序,鍵盤中斷處理程序,與PC機通信中斷處理程序,顯示程序及存儲器讀寫程序等等[16]。讀卡器的主程序流程圖如圖4.1所示。 圖4.1 讀卡器主程序流程圖 4.3 讀/寫卡程序設計 4.3.1 MF-RC500指令說明 MCU對MIFARE非接觸式智能卡的控制是通過MF-RC500來實現的,MF-RC500是MCU和MIFARE非接觸式智能卡之間的通信載體。MCU對MF-RC500的控制是以MCU發出MF-RC500的指令來達到的,MF-RC500收到指令之后執行這些指令。MF-RC500的指令主要有:Request std,Request all,Anticollision,Select,Authentication,Read,Write,它們可以完成MCU對MIFARE非接觸式智能卡的很多應用場合的控制。 MCU對MF-RC500的某一指令操作不是簡單的一條指令所能完成的,必須有一個程序的序列來完成,其中有對MF-RC500硬件內核寄存器的讀/寫以及根據讀出的硬件內核寄存器的內容進行語言軟件上的判斷和設置。不同的指令將設置不同的MF-RC500內部寄存器以及應有不同的編程語言程序序列。MF-RC500具體指令說明及程序設計如下: (1)“Answer to Request”(應答或復位應答) 表4.1 復位應答指令
Request指令將通知MF-RC500在天線有效的工作范圍內尋找WARE卡片。如果有MIFARE卡片存在,這一指令將分別與MIFARE卡片進行通信,讀取WARE卡片上的卡片類型號TAGTYPE,由MF-RC500傳遞給MCU,進行識別處理。Request指令分為Request std和Request all兩個指令。 Request all指令是非連續性的讀卡指令,只讀一次,它可以防止MF-RC500選擇同一卡片好幾次。當某一張卡片在MF-RC500天線的有效工作范圍內,Request all指令在成功地讀取這一張卡片之后,將一直等待卡片的使用者拿走這張卡片,直到有新一張的卡片進入M- RC500天線的有效工作范圍內。 Request std指令的使用和Request all指令相反,Request std指令是連續性的讀卡指令。當卡片在MF-RC500天線的有效工作范圍內,Request std指令在成功地讀取這一張卡片之后,對卡進行其他操作。如果其他操作完成之后,程序員又將MF-RC500進入Request std指令操作,則Request std指令將連續性地再次進行讀卡操作,而不管這張卡片是否被拿走。只要有一張卡片進入MF-RC500之天線的有效的工作范圍內,Request std指令將始終連續性地再次進行讀卡操作。 (2)“Select Tag”(選擇卡片操作) 表4.2 選擇卡片指令
在一個成功的AntiCollision指令之后,或在任何時候當程序員想與已知序列號的卡片進行通信時,必須使用Select指令,以建立與所選卡的通信。Select指令成功地完成后,MCU將得到MF-RC500的DATA寄存器傳送來的一個字節長的卡片容量信息—Size。 (3)“Authentication”(認證操作) 表4.3 認證指令
在MCU希望讀取MIFARE卡上的數據之前,此操作必須是被允許的。這可以通過選擇存儲在MF-RC500之RAM中的密碼集中的一組密碼來進行認證而實現。如果這一組密碼與MIFARE卡片上的密碼匹配,這一次操作被允許進行。卡片上的存儲器的每一個塊都分別地指定了該塊的存取條件。這些存取條件是根據密碼而定。用戶必須在KEYSTACON寄存器中指定一套密碼,即設置KSO,KS1。KEYADDR寄存器中的AB位用于選擇KEYA和KEYB。KEYADDR寄存器中的AB設置必須匹配“Authentication”命令。 (4)“Read”(讀指令) 表4.4 讀指令
Read(讀)指令允許MCU通過MF RC500來讀取MIFARE卡片上完整的16個Bytes的數據塊(Data blocks)。 (5)“Write”(寫指令) 表4.5 寫指令
“Write” 寫指令允許用戶寫數據到MIFARE卡片上(完整的16個Byte的數據塊)。 4.3.2 讀/寫卡程序流程圖 讀/寫卡過程主要由以下幾步組成: (1) 復位應答:當一張MIFARE卡片處在讀寫器的天線的工作范圍之內時,程序員控制讀寫器向卡片發出REQUEST all 命令。卡片的ATR將啟動,將卡片Block0中的卡片類型共2個字節傳送給讀寫器, 建立卡片與讀寫器的第一步通信聯絡。如果不進行位選擇操作,讀卡器對卡片的其他操作將不會進行; (2) 防重疊操作:有多張卡處在天線的工作范圍之內時,RC500將取得每一張卡片的系列號,由于每一張MIFARE卡片都具有其唯一的序列號,決不會相同,因此MF-RC500根據卡片的序列號來保證一次只對一張卡操作。該操作MF-RC500得到MIFARE卡片的返回值和卡片的系列號; (3) 選擇卡片操作:選擇被選中卡的系列號,并同時返回卡的容量代碼; (4) 認證操作:經過上述3個步驟, 在確認已經選擇了一張卡片時,MF-RC500 在對卡進行讀寫操作之前,必須對卡片上已經設置的密碼進行認證,如果匹配,才允許進一步的讀寫操作; (5) 讀寫操作:在經過上述幾個步驟之后就可以具體地對卡片進行相應的讀、寫、增值、減值、存儲和傳送等操作。讀/寫卡程序流程圖如下圖4.2所示。 圖4.2 讀/寫卡程序流程圖 4.4 讀卡器外圍基本電路程序的設計 4.4.1 顯示程序設計 本設計中的顯示模塊主要由系統時鐘和LCD顯示組成,系統時鐘用來提供時間、日期等信息;LCD用來向用戶顯示卡片、存儲數據等信息;LCD的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的,通過寄存器的設置和指令編程就可完成,這部分的程序設計比較簡單,其流程圖如圖4.3所示。 圖4.3 顯示部分程序流程圖 顯示模塊的部分程序如下: MAIN: MOV SP,#60H MAIN1: LCALL START ;調用初始化 MOV A, #80H ;第一行顯示第一個字符的位置 ACALL ENABLE ;調用寫指令 MOV DPTR, #TABLE1 ;第一行表頭位置 CALL WRITE1 ;調用第一行寫子程序 MOV A, #0C0H ;第二行位置 CALL ENABLE ;調用寫指令 MOV DPTR, #TABLE2 ;第二行表頭位置 CALL WRITE LCALL DELAY1 JMP MAIN1 ENABLE: ;寫命令時序 MOV SS, A CLR RS CLR RW CLR E ACALL DELAY SETB E RET WRITE1: ;寫字符串 MOV R1, #00H A1: MOV A, R1 MOVC A, @A+DRTR ;取將顯示的數據 CALL WRITE2 ;調用寫程序寫入單個字節 INC R1 CJNE R1,#10H,AL RET WRITE2: ;寫單個字符 MOV SS A SETB RS CLR RW CLR E CALL DELAY SETB E RET 4.4.2 鍵盤程序設計 鍵盤程序包括按鍵識別及識別按鍵后系統的相應動作。按鍵識別分兩步進行:第一步,識別鍵盤有無鍵被按下;第二步如果有鍵被按下,識別出具體的按鍵。分述如下:第一步,識別鍵盤有無鍵被按下的方法是:讓所有列均置為0電平,檢查各行線電平是否有變化,如果有變化,則說明有鍵被按下。第二步,識別具體的按鍵的方法有掃描法和線反轉法,這里采用掃描法:逐列置0電平,其余各列置為高電平,檢查各行線電平的變化,如果某行電平由高電平變為0電平,則可確定此行此列交叉點處的按鍵被按下。本方案中用延時l0ms進行軟件消抖,通過設置處理標志位來區分閉合鍵是否己處理過,用計算方法得到鍵碼。鍵盤掃描子程序中完成如下幾個功能: (1) 斷鍵盤上有無鍵按下。其方法為P1口低3位輸出全0,讀P1口狀態,若P1.3、P1.4為全1,則說明鍵盤無鍵按下;若不全為1,則說明鍵盤有鍵按下; (2) 除按鍵抖動的影響。其方法為,在判斷有鍵按下后,用軟件延時的方法延時10ms,再判斷鍵盤狀態,如果仍為有鍵按下狀態,則認為有一個確定的鍵按下,否則當作按鍵抖動處理; (3) 按鍵位置。根據前面的掃描法,進行逐位置0掃描,最后定位按鍵位置; (4) 閉合一次僅進行一次按鍵的處理。方法是等待按鍵釋放之后,再進行按鍵功能的處理操作。編程掃描程序流程圖如圖4.4所示。 圖4.4 掃描程序流程圖 4.4.3 E2PROM程序的編寫 AT24C64存儲器可以解決單片機片內E2PROM不足的問題,用以保存諸如用戶設置參數、卡片信息等資料。由于本系統中采用到的AT89S52單片機不具備I2C總線接口,因此采用軟件法加以解決。在軟件編寫時遵循I2C總線規則:初始狀態時,SCL、SDA兩線都為高,當SCL為高電平時,如果SDA線跌落,認為是“起始位”;當SCL為高電平時,如果SDA線上升,認為是“停止位”;除此之外,在發送數據的過程中當SCL為高電平時,SDA應保持穩定。ACK應答位指在此時鐘周期內由從器件(E2PROM)把SDA拉低,表示回應。這時主器件(AT89S52)的SDA口屬性應該變為輸入以便檢測。E2PROM主要讀寫程序如下: void 12c_Send_Byte (unsigned char Send_Data) /*寫一個字節到E2PROM中*/ { unsigned char i; for(i=8;i!=0;i--) { SCL_DIR=0; if(Send_Data&0x80){SDA_DIR=1;} //接收到數據 else{SDA_DIR=0;} delay_μs(2); SCL_DIR=1; Send_Data = (Send_Data<<1); // 數據左移一位 } do //接收應答信號,防止死循環 { SCL_DIR=0; SDA_DIR=1; delay_μs(2); SCL_DIR=1; } while(SDA!=0); //停止位 SCL_DIR=0; SDA_DIR=0; } 4.5 通信部分程序設計 (1)通信協議概述 RS232串口通信協議是我們熟悉和常用的通信協議,其通信協議的設計思想是基于幀傳輸方式,即在向串口發送命令信號、應答信號及數據信號時是按照幀的格式發送的。為了使數據快速可靠地傳輸,將每一幀數據對應一個命令幀,傳輸數據即執行命令,具體如下: 1) 在讀數據時,遵循“讀命令--等數據--文檔”,即PC下達一個命令,等待接收數據,再據所接收數據正誤向應用程序文檔此命令的執行情況; 2) 在PC寫數據時,遵循“寫命令--等回應--文檔”,即PC下達一寫命令(此時所要寫的數據含于此命令中),等待MCU發來的己經正確接收的回應信號,并 向應用程序文檔此命令執行完畢; 3) 如果在傳輸過程中PC或MCU所接收的任何一幀信號出現錯誤時,均會向對方發送重發此幀信號的請求,如果連續只次傳輸失敗,則退出通信,并向應用程序文檔。 (2)MCU串口通信程序流程圖 MCU串口通信程序流程圖如圖4.5所示。 圖4.5 MCU串口通信程序流程圖 (1)調試過程 系統調試是在實驗室進行的,它是從設計向應用轉化的關鍵一步,需要大量調試,才可能使系統運行正常,系統調試是在這樣的環境下進行的:仿真器采用的是偉福公司的G6W,軟件采用與其配套的e2000w編譯軟件;部分程序的編譯也使用了KeilC51;編程器使用的是Top系列編程器Top2000-a型。 主要測試的內容有: 1) 讀卡器的基本功能如:系統時鐘顯示、E2PROM的讀寫、非法卡報警等; 2) 系統軟件的功能模塊測試; 3) RC500讀/寫卡功能模塊測試。 (2)調試中發現的問題與解決方法 在測試上述三項內容過程中,曾經出現過一些問題: 1) 系統顯示模塊不能正常工作。顯示模塊由LCD和時鐘芯片1302組成,時鐘芯片與單片機的連接比較簡單,并且程序部分也都通過了調試,但系統卻不能正常工作,所以應該是LCD的硬件出了問題,經過查找,是由于調節LCD亮度的那個電位器值過大,造成雖然DS1302正常工作了,但信息并沒有得到正常的顯示,通過對電位器值的適當調整,LCD正常工作了,問題得到了解決。 2) 數據寫不到AT24C64中去。AT24C64通過二根線與單片機相連,理論上只要時序正確,對其進行數據的讀寫就應該能夠成功,但是實際中每次調用該子程序都不成功,可能是時序上的問題,但經過調試發現程序的編寫是正確的,所以應該是硬件連接上的問題。根據I2C協議傳輸數據的規定,SDA和SCL都是要求加上拉電阻的,但參閱的資料上說由于P2口內部已帶有上拉電阻,不用再加AT24C64就能正常工作,但經過調試發現事實并非如此,經過對電路的修正,在SDA和SCL引腳上加了兩個10K的電阻,最終解決了這個問題了。 3) 讀卡器與卡片不能進行正常的通信。在調試過程中,當有卡進入天線范圍內時,讀寫器卻不能正常的與之進行數據交換,讀不到卡片的信息。這個問題產生的原因有很多,可能是RC500軟件設計上的問題,也可能是天線設計的問題,最后在指導老師的幫助下,經過自己的努力找到了問題的所在,原來是天線匹配電路不合適,通過對匹配電路上電阻、電容的適當調整,使問題得到了解決。 結論 本文檔從整體的角度,對非接觸式智能卡系統進行分析和研究,同時做到重點的突出。文檔從智能卡整體系統入手,著重介紹了基于Philips公司MIFARE技術的非接觸式智能卡讀卡器的設計開發。該讀卡器能夠讀寫距離在0-100mm范圍內的符合IEC/IS014443 Type A標準的非接觸式智能卡。讀卡器采用外接電源供電,具有蜂鳴器報警、系統時鐘、LCD顯示、3×2小鍵盤輸入和采用RS232接口同上位機通信的功能,能夠很好地滿足實際應用的需要。 作為一個系統在設計時可能要考慮到諸多因素,每一個細節上,都可能出現意想不到的事情,有時一個小小的問題,要花好多的時間和精力,需要耐心和恒心,經過努力,該系統設計已經完成,實際測試證明系統已能達到設計要求。 然而本文檔論述的非接觸式智能卡系統還有很多方面需要進一步提高,針對文檔中所述,主要有以下幾個方面: (1) 本文檔沒有介紹上位機的軟件設計問題。在應用系統中,這也是非常重要的一部分,主要涉及數據庫的操作、與下位機的通信以及友好的用戶操作界面等問題。 (2) 讀寫裝置與上位機之間的通信接口宜采用USB接口。采用USB接口的外設與計算機之間的傳輸速率遠比RS232和標準并行接口高,而且支持熱插拔。 (3) 本文檔中給出的程序,還需進一步的優化,減少其大小,提高程序執行效率。 通過對系統的軟硬件設計和調試過程,積累了不少實際經驗,開拓了了思維,為今后在這方面的工作打下了較為堅實的基礎。本文還有很多不足之處,懇請各位專家和老師批評指正。
致謝 本文從課題的選定開始,系統方案的確定,以及對設計電路的調試指導,到最后文檔的編寫和完成較稿,XXXXXX老師都給予了悉心的指導。對其中設計思路的引導,電路的可靠性,文檔的嚴謹性等方面更傾注了她的精力和心血。在具體的設計問題中,能夠一針見血的指出問題所在,使我學到了新的知識,受益匪淺。她廣博的知識面,豐富的實踐經驗以及嚴謹的治學作風,將激勵我在今后的工作和學習中豐富自己、努力進取,在此,特別向郭廣靈老師表示由衷的感謝和誠摯的敬意。 其次,要感謝學校給我們提供這么好的設計環境,在設計完成的過程中得到了許多老師和學院領導的幫助,老師們嚴謹治學的教學使我受益匪淺。 在本文檔的寫作和相關研究工作中,我同一實驗室和同班同學都給予了我很多熱心的幫助和熱情的鼓勵,使我順利走過近三個月的課題研究生活。我要向他們中的每一個人表示由衷的感謝,我會永遠記住這段美好時光。 再次向所有幫助過我的人表示衷心的感謝!謝謝你們!
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便保存):
以上文檔.doc
(946.5 KB, 下載次數: 54)
2021-9-2 04:06 上傳
點擊文件名下載附件
|