摘 要: 一種用TCP/IP" title="TCP/IP">TCP/IP通信的射頻一卡通系統(tǒng),重點(diǎn)闡述了嵌入式TCP/IP簡(jiǎn)化協(xié)議棧" title="協(xié)議棧">協(xié)議棧的設(shè)計(jì)和MF1卡的軟件設(shè)計(jì)" title="軟件設(shè)計(jì)">軟件設(shè)計(jì),。
關(guān)鍵詞: 射頻IC卡 TCP/IP 嵌入式協(xié)議棧
射頻IC卡使用及攜帶方便,、安全性高、成本低,,已得到越來越廣泛的應(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)行讀寫的系統(tǒng)。兩個(gè)子系統(tǒng)各使用一片AT89S52單片機(jī),,子系統(tǒng)間通過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,,作為讀寫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],。由于使用輪詢方式,所以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)闆]有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è)層次,,分別為鏈路層" title="鏈路層">鏈路層、網(wǎng)絡(luò)層,、運(yùn)輸層和應(yīng)用層,,如圖2所示。下面對(duì)簡(jiǎn)化協(xié)議棧逐層說明,。
(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)完成讀寫射頻卡,、保存刷卡資料、發(fā)出控制開關(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接開關(guān)量控制,,P2.4接蜂鳴器,。
2.2 讀卡子系統(tǒng)軟件設(shè)計(jì)
本子系統(tǒng)軟件設(shè)計(jì)包括:對(duì)MF1卡進(jìn)行讀寫操作;讀取和設(shè)定時(shí)間芯片的日期和時(shí)間,;保存刷卡資料和設(shè)定資料,;發(fā)送顯示信息和發(fā)出開關(guān)信號(hào)等。以下主要介紹MF1卡的讀寫操作部分,。
MF1卡的狀態(tài)機(jī)如圖4所示,。當(dāng)MF1卡進(jìn)入讀卡器天線的工作區(qū)時(shí),經(jīng)Reset后進(jìn)入IDLE狀態(tài),。此時(shí)可以接收從RC500發(fā)來的指令,。
詢卡指令REQA,當(dāng)MF1卡收到REQA后,,會(huì)用ATQA回答,,ATQA由兩個(gè)字節(jié)組成,其中b7和b8表示UID的大小,,b1~b5為防碰撞" title="防碰撞">防碰撞位,,其他位為0,。若RC500收到ATQA,,則表示在天線的工作區(qū)有卡存在。此后進(jìn)入防碰撞循環(huán),。
防碰撞循環(huán)開始時(shí),,并不知道UID,所以RC500發(fā)送cascade level 1 的select code,,并指定NVB= 20,。此時(shí)MF1卡要回復(fù)自己的UID。如果沒有碰撞,,則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)證通過,則可進(jìn)入讀寫階段,。
在讀寫階段,,RC500可以通過寫本扇區(qū)的Sector Trailer來修改此扇區(qū)的密碼和存取條件,也可以根據(jù)存取條件對(duì)本扇區(qū)的Data Block進(jìn)行讀,、寫,、增、減,、恢復(fù)和轉(zhuǎn)移,。
本設(shè)計(jì)在局域網(wǎng)和廣域網(wǎng)中使用方便。經(jīng)過反復(fù)測(cè)試,,系統(tǒng)性能穩(wěn)定,、可靠。
參考文獻(xiàn)
1 W Richard Steven.TCP/IP Illustrated Vol 1,、2,、3.AddisonWesley,1996
2 Andrew S.Tanenbaum.計(jì)算機(jī)網(wǎng)絡(luò)(第三版).北京:清華大學(xué)出版社,,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