未知 2015-05-28
射頻IC卡使用及攜帶方便、安全性高、成本低,已得到越來(lái)越廣泛的應(yīng)用。本文介紹一種用TCP/IP通信的射頻一卡通系統(tǒng)。
系統(tǒng)分為兩個(gè)子系統(tǒng),即嵌入式TCP/IP子系統(tǒng)和射頻IC卡讀卡子系統(tǒng)。嵌入式TCP/IP子系統(tǒng)使用一個(gè)簡(jiǎn)化的TCP/IP協(xié)議棧,易于在單片機(jī)中實(shí)現(xiàn)。射頻IC卡讀卡子系統(tǒng)是對(duì)射頻卡進(jìn)行讀寫(xiě)的系統(tǒng)。兩個(gè)子系統(tǒng)各使用一片AT89S52單片機(jī),子系統(tǒng)間通過(guò)UART通信。
1 嵌入式TCP/IP子系統(tǒng)
本子系統(tǒng)主要負(fù)責(zé)與上位機(jī)的通信。下面介紹其結(jié)構(gòu)設(shè)計(jì)和簡(jiǎn)化的TCP/IP協(xié)議棧。
1.1 嵌入式TCP/IP子系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
本子系統(tǒng)的結(jié)構(gòu)如圖1所示。系統(tǒng)主控芯片為AT89S52單片機(jī),選用IS61C256AH芯片外部擴(kuò)展32KB SRAM。單片機(jī)與片外RAM的接口:P0[0..7]經(jīng)74HC373鎖存低8位地址,再接到SRAM的[A0..A7];P2[0..6]接SRAM 的[A8..A14];P2.7接SRAM的CE,當(dāng)P2.7為低電平時(shí),SRAM使能;P3.6和P3.7分別接SRAM的WE和OE,作為讀寫(xiě) SRAM的信號(hào),同時(shí)P0復(fù)用到SRAM的[IO0..IO7]。局域網(wǎng)的以太網(wǎng)控制器使用RTL8019AS。單片機(jī)與8019AS的接口:P3.6和 P3.7分別接IORB和IOWB,作為網(wǎng)絡(luò)芯片的I/O信號(hào);P3.5接RSTDRV,用于網(wǎng)絡(luò)Reset;P3.3接IOCHRDY,用于網(wǎng)絡(luò)芯片忙時(shí)插入等待時(shí)間;P1[0..7]接[SD0..SD7]。由于使用輪詢(xún)方式,所以IRQ可以不設(shè)定,因?yàn)镮/O Base選擇300H,所以IOS0~I(xiàn)OS3懸空。P2[0..4]接[SA0..SA4],SA5..SA7接低電平,P2.7接SA8和SA9, SA10..SA19接低電平,這樣就使得P2.7為高電平時(shí),選擇網(wǎng)絡(luò)芯片,同時(shí)P2[0..4]為片內(nèi)寄存器地址。因?yàn)闆](méi)有Memory Read和Write的動(dòng)作,將SMEMRB和SMEMWB接高電平。因?yàn)樵诎l(fā)出I/O命令時(shí),地址都會(huì)先準(zhǔn)備就緒,所以將AEN接低電平。為了使用 jumper進(jìn)行初始化設(shè)定,將JP接高電平。P3.0和P3.1是單片機(jī)UART的RX和TX,連接到讀卡器子系統(tǒng)。
1.2 嵌入式TCP/IP子系統(tǒng)的簡(jiǎn)化協(xié)議棧設(shè)計(jì)
由于單片機(jī)的資源有限,本子系統(tǒng)針對(duì)一卡通系統(tǒng)的要求簡(jiǎn)化了TCP/IP協(xié)議棧,只需實(shí)現(xiàn)系統(tǒng)必需的功能即可。TCP/IP協(xié)議棧有四個(gè)層次,分別為鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層和應(yīng)用層,如圖2所示。下面對(duì)簡(jiǎn)化協(xié)議棧逐層說(shuō)明。
(1)鏈路層協(xié)議。10Mbps以太網(wǎng)的幀有以太網(wǎng)幀和IEEE 802幀兩種封裝格式。根據(jù)RFC 1122(即主機(jī)需求RFC)的要求,所有主機(jī)必須能夠發(fā)送和接收以太網(wǎng)幀,應(yīng)該能夠接收IEEE 802幀,也許能夠發(fā)送IEEE 802幀。根據(jù)這一要求,本系統(tǒng)設(shè)定為能夠接收以太網(wǎng)幀和IEEE 802幀,只能發(fā)送以太網(wǎng)幀,不能發(fā)送IEEE 802幀。由于系統(tǒng)不會(huì)在同一主機(jī)的不同進(jìn)程間交換IP分組,所以不支持環(huán)回接口(Loopback Interface)。顯然SLIP和PPP鏈路協(xié)議也不必支持。在鏈路層中,每接收到一個(gè)幀,都檢查其Type field的值,只交付0x0800和0x0806二種Type,丟棄其他的Type。RARP幀的Type為0x8035,因?yàn)橄到y(tǒng)不必支持RARP協(xié)議,所以這種幀也不交付。Type為0x0800表示幀中封裝了IP分組,Type為0x0806表示幀中封裝了ARP分組,這兩種幀的分組會(huì)被取出,并交付給相應(yīng)的子程序。
(2)網(wǎng)絡(luò)層協(xié)議。本系統(tǒng)只交付Protocol=1和Protocol=17的分組,其他的Protocol都丟棄,即只支持ICMP和UDP協(xié)議;不支持IGMP協(xié)議(Protocol=2),相應(yīng)地也不支持組播(multicast),但支持廣播;不支持TCP協(xié)議 (Protocol=6)。對(duì)于ICMP協(xié)議,只支持回顯請(qǐng)求和回顯應(yīng)答,即只處理Type=0,Code=0和Type=8,Code=0,其他的 Type和Code丟棄,所以Ping讀卡器的IP地址會(huì)收到應(yīng)答。對(duì)于Protocol=17的分組,先檢查目的地址,如果為廣播地址或是本機(jī)地址,則取出其中的UDP數(shù)據(jù)報(bào),交付給運(yùn)輸層,丟棄其他分組。
(3)運(yùn)輸層協(xié)議。本系統(tǒng)只支持UDP協(xié)議,而且只接收一個(gè)指定端口的UDP數(shù)據(jù)報(bào),丟棄其他端口的數(shù)據(jù)報(bào)。收到要交付的數(shù)據(jù)報(bào)后,取出其中的數(shù)據(jù)內(nèi)容,交給應(yīng)用層子程序。
(4)應(yīng)用層。根據(jù)收到的不同上位機(jī)指令,分別進(jìn)行處理。指令包括:掃描在線的讀卡器、設(shè)定讀卡器地址、同步讀卡器時(shí)間、讀取讀卡器容量狀態(tài)、上載刷卡記錄等。
2 射頻IC卡讀卡子系統(tǒng)
本子系統(tǒng)完成讀寫(xiě)射頻卡、保存刷卡資料、發(fā)出控制開(kāi)關(guān)量等功能。
2.1 讀卡子系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
本子系統(tǒng)選用PHILIPS公司的MF1 IC S50芯片的非接觸式IC卡。這種卡的RF接口為ISO/IEC 14443A,工作頻率為13.56MHz,內(nèi)含1KB EEPROM。EEPROM的組成包括16個(gè)扇區(qū),每扇區(qū)有4個(gè)區(qū),每區(qū)有16字節(jié)。讀卡芯片選用PHILIPS公司的MF RC500,這種芯片與單片機(jī)接口簡(jiǎn)單,有自動(dòng)檢測(cè)與單片機(jī)接口方式的功能。單片機(jī)使用AT89S52,選用ATMEL的DataFlash AT45DB161B保存刷卡資料,系統(tǒng)設(shè)定資料保存在Serial EEPROM 24C02中,時(shí)間芯片選用DS1302。系統(tǒng)結(jié)構(gòu)如圖3所示。單片機(jī)是主控芯片。與讀卡芯片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。單片機(jī)的P3.3、P3.4、P3.5接顯示驅(qū)動(dòng)。P2.3接開(kāi)關(guān)量控制,P2.4接蜂鳴器。
2.2 讀卡子系統(tǒng)軟件設(shè)計(jì)
本子系統(tǒng)軟件設(shè)計(jì)包括:對(duì)MF1卡進(jìn)行讀寫(xiě)操作;讀取和設(shè)定時(shí)間芯片的日期和時(shí)間;保存刷卡資料和設(shè)定資料;發(fā)送顯示信息和發(fā)出開(kāi)關(guān)信號(hào)等。以下主要介紹MF1卡的讀寫(xiě)操作部分。
MF1卡的狀態(tài)機(jī)如圖4所示。當(dāng)MF1卡進(jìn)入讀卡器天線的工作區(qū)時(shí),經(jīng)Reset后進(jìn)入IDLE狀態(tài)。此時(shí)可以接收從RC500發(fā)來(lái)的指令。
詢(xún)卡指令REQA,當(dāng)MF1卡收到REQA后,會(huì)用ATQA回答,ATQA由兩個(gè)字節(jié)組成,其中b7和b8表示UID的大小,b1~b5為防碰撞位,其他位為0。若RC500收到ATQA,則表示在天線的工作區(qū)有卡存在。此后進(jìn)入防碰撞循環(huán)。
防碰撞循環(huán)開(kāi)始時(shí),并不知道UID,所以RC500發(fā)送cascade level 1 的select code,并指定NVB= 20。此時(shí)MF1卡要回復(fù)自己的UID。如果沒(méi)有碰撞,則RC500會(huì)收到完整的4字節(jié)UID,否則,用碰撞發(fā)生位置更新NVB的值,重發(fā)指令,直到收到完整的4字節(jié)UID。然后RC500再用這個(gè)select code,并設(shè)NVB=70,加上4字節(jié)UID,發(fā)給MF1卡。MF1卡將收到的UID與自己的UID比較,如果相同,則回復(fù)SAK。此時(shí)RC500檢查 SAK。如果b3為1,則表示UID不完整,RC500將cascade level加1,重新循環(huán),直到收到的SAK b3為0,才表示Select完成。此后進(jìn)入認(rèn)證階段。
進(jìn)行認(rèn)證之前,必須先用RC500的LoadKeyE2或LoadKey指令將密碼裝載到RC500的Key Buffer中,然后對(duì)指定的扇區(qū)發(fā)出Authent1指令和Authent2指令。如果認(rèn)證通過(guò),則可進(jìn)入讀寫(xiě)階段。
在讀寫(xiě)階段,RC500可以通過(guò)寫(xiě)本扇區(qū)的Sector Trailer來(lái)修改此扇區(qū)的密碼和存取條件,也可以根據(jù)存取條件對(duì)本扇區(qū)的Data Block進(jìn)行讀、寫(xiě)、增、減、恢復(fù)和轉(zhuǎn)移。
上一篇:沒(méi)有了