用TCP/IP通信的射頻一卡通系統設計
文章出處:http://5052h112.com 作者:中國科學技術大學 曾鵬程 陳恩紅 人氣: 發表時間:2011年12月05日
射頻IC卡使用及攜帶方便、安全性高、成本低,已得到越來越廣泛的應用。本文介紹一種用TCP/IP通信的射頻一卡通系統。
系統分為兩個子系統,即嵌入式TCP/IP子系統和射頻IC卡讀卡子系統。嵌入式TCP/IP子系統使用一個簡化的TCP/IP協議棧,易于在單片機中實現。射頻IC卡讀卡子系統是對射頻卡進行讀寫的系統。兩個子系統各使用一片AT89S52單片機,子系統間通過UART通信。
1 嵌入式TCP/IP子系統
本子系統主要負責與上位機的通信。下面介紹其結構設計和簡化的TCP/IP協議棧。
1.1 嵌入式TCP/IP子系統的結構設計
本子系統的結構如圖1所示。系統主控芯片為AT89S52單片機,選用IS61C256AH芯片外部擴展32KB SRAM。單片機與片外RAM的接口:P0[0..7]經74HC373鎖存低8位地址,再接到SRAM的[A0..A7];P2[0..6]接SRAM 的[A8..A14];P2.7接SRAM的CE,當P2.7為低電平時,SRAM使能;P3.6和P3.7分別接SRAM的WE和OE,作為讀寫 SRAM的信號,同時P0復用到SRAM的[IO0..IO7]。局域網的以太網控制器使用RTL8019AS。單片機與8019AS的接口:P3.6和 P3.7分別接IORB和IOWB,作為網絡芯片的I/O信號;P3.5接RSTDRV,用于網絡Reset;P3.3接IOCHRDY,用于網絡芯片忙時插入等待時間;P1[0..7]接[SD0..SD7]。由于使用輪詢方式,所以IRQ可以不設定,因為I/O Base選擇300H,所以IOS0~IOS3懸空。P2[0..4]接[SA0..SA4],SA5..SA7接低電平,P2.7接SA8和SA9, SA10..SA19接低電平,這樣就使得P2.7為高電平時,選擇網絡芯片,同時P2[0..4]為片內寄存器地址。因為沒有Memory Read和Write的動作,將SMEMRB和SMEMWB接高電平。因為在發出I/O命令時,地址都會先準備就緒,所以將AEN接低電平。為了使用 jumper進行初始化設定,將JP接高電平。P3.0和P3.1是單片機UART的RX和TX,連接到讀卡器子系統。
1.2 嵌入式TCP/IP子系統的簡化協議棧設計
由于單片機的資源有限,本子系統針對一卡通系統的要求簡化了TCP/IP協議棧,只需實現系統必需的功能即可。TCP/IP協議棧有四個層次,分別為鏈路層、網絡層、運輸層和應用層,如圖2所示。下面對簡化協議棧逐層說明。
(1)鏈路層協議。10Mbps以太網的幀有以太網幀和IEEE 802幀兩種封裝格式。根據RFC 1122(即主機需求RFC)的要求,所有主機必須能夠發送和接收以太網幀,應該能夠接收IEEE 802幀,也許能夠發送IEEE 802幀。根據這一要求,本系統設定為能夠接收以太網幀和IEEE 802幀,只能發送以太網幀,不能發送IEEE 802幀。由于系統不會在同一主機的不同進程間交換IP分組,所以不支持環回接口(Loopback Interface)。顯然SLIP和PPP鏈路協議也不必支持。在鏈路層中,每接收到一個幀,都檢查其Type field的值,只交付0x0800和0x0806二種Type,丟棄其他的Type。RARP幀的Type為0x8035,因為系統不必支持RARP協議,所以這種幀也不交付。Type為0x0800表示幀中封裝了IP分組,Type為0x0806表示幀中封裝了ARP分組,這兩種幀的分組會被取出,并交付給相應的子程序。
(2)網絡層協議。本系統只交付Protocol=1和Protocol=17的分組,其他的Protocol都丟棄,即只支持ICMP和UDP協議;不支持IGMP協議(Protocol=2),相應地也不支持組播(multicast),但支持廣播;不支持TCP協議 (Protocol=6)。對于ICMP協議,只支持回顯請求和回顯應答,即只處理Type=0,Code=0和Type=8,Code=0,其他的 Type和Code丟棄,所以Ping讀卡器的IP地址會收到應答。對于Protocol=17的分組,先檢查目的地址,如果為廣播地址或是本機地址,則取出其中的UDP數據報,交付給運輸層,丟棄其他分組。
(3)運輸層協議。本系統只支持UDP協議,而且只接收一個指定端口的UDP數據報,丟棄其他端口的數據報。收到要交付的數據報后,取出其中的數據內容,交給應用層子程序。
(4)應用層。根據收到的不同上位機指令,分別進行處理。指令包括:掃描在線的讀卡器、設定讀卡器地址、同步讀卡器時間、讀取讀卡器容量狀態、上載刷卡記錄等。
2 射頻IC卡讀卡子系統
本子系統完成讀寫射頻卡、保存刷卡資料、發出控制開關量等功能。
2.1 讀卡子系統結構設計
本子系統選用PHILIPS公司的MF1 IC S50芯片的非接觸式IC卡。這種卡的RF接口為ISO/IEC 14443A,工作頻率為13.56MHz,內含1KB EEPROM。EEPROM的組成包括16個扇區,每扇區有4個區,每區有16字節。讀卡芯片選用PHILIPS公司的MF RC500,這種芯片與單片機接口簡單,有自動檢測與單片機接口方式的功能。單片機使用AT89S52,選用ATMEL的DataFlash AT45DB161B保存刷卡資料,系統設定資料保存在Serial EEPROM 24C02中,時間芯片選用DS1302。系統結構如圖3所示。單片機是主控芯片。與讀卡芯片RC500的接口為:P0[0..7]接RC500的 D0..D7,P1.4接RSTPD,P1.5接NCS,P3.2接IRQ,P3.6和P3.7接NWR和NRD。與AT45DB161B的接口為: P1.0接SO,P1.1接SI,P1.2接SCK,P1.3接CS。與DS1302的接口為:P2.0接SCLK,P2.1接I/O,P2.2接CE。與24C02的接口為:P2.6接SCL,P2.7接SDA。單片機的P3.3、P3.4、P3.5接顯示驅動。P2.3接開關量控制,P2.4接蜂鳴器。
2.2 讀卡子系統軟件設計
本子系統軟件設計包括:對MF1卡進行讀寫操作;讀取和設定時間芯片的日期和時間;保存刷卡資料和設定資料;發送顯示信息和發出開關信號等。以下主要介紹MF1卡的讀寫操作部分。
MF1卡的狀態機如圖4所示。當MF1卡進入讀卡器天線的工作區時,經Reset后進入IDLE狀態。此時可以接收從RC500發來的指令。
詢卡指令REQA,當MF1卡收到REQA后,會用ATQA回答,ATQA由兩個字節組成,其中b7和b8表示UID的大小,b1~b5為防碰撞位,其他位為0。若RC500收到ATQA,則表示在天線的工作區有卡存在。此后進入防碰撞循環。
防碰撞循環開始時,并不知道UID,所以RC500發送cascade level 1 的select code,并指定NVB= 20。此時MF1卡要回復自己的UID。如果沒有碰撞,則RC500會收到完整的4字節UID,否則,用碰撞發生位置更新NVB的值,重發指令,直到收到完整的4字節UID。然后RC500再用這個select code,并設NVB=70,加上4字節UID,發給MF1卡。MF1卡將收到的UID與自己的UID比較,如果相同,則回復SAK。此時RC500檢查 SAK。如果b3為1,則表示UID不完整,RC500將cascade level加1,重新循環,直到收到的SAK b3為0,才表示Select完成。此后進入認證階段。
進行認證之前,必須先用RC500的LoadKeyE2或LoadKey指令將密碼裝載到RC500的Key Buffer中,然后對指定的扇區發出Authent1指令和Authent2指令。如果認證通過,則可進入讀寫階段。
在讀寫階段,RC500可以通過寫本扇區的Sector Trailer來修改此扇區的密碼和存取條件,也可以根據存取條件對本扇區的Data Block進行讀、寫、增、減、恢復和轉移。
本設計在局域網和廣域網中使用方便。經過反復測試,系統性能穩定、可靠。
參考文獻
1 W Richard Steven.TCP/IP Illustrated Vol 1、2、3.AddisonWesley,1996
2 Andrew S.Tanenbaum.計算機網絡(第三版).北京:清華大學出版社,2000
3 Philips Semiconductors.MF1 IC S50 Functional Specification.http://www.semiconductors.philips.com,2001
4 Philips Semiconductors.MF RC500 Product Specification.http://www.semiconductors.philips.com,2004