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