基于W7100的以太網(wǎng)讀卡器的設(shè)計與實現(xiàn)
摘要:為低成本地實現(xiàn)具有以太網(wǎng)接口的讀卡器,提出一種采用W7100新型網(wǎng)絡(luò)微處理器的方案。該讀卡器包括以太網(wǎng)傳輸、讀IC卡和USB傳輸功能。W7100芯片不同于以往采用的以太網(wǎng)控制器。該芯片內(nèi)置硬件TCP/IP協(xié)議棧且包含一個與8051微處理器二進制代碼兼容的8位微處理器內(nèi)核。只需要執(zhí)行簡單的網(wǎng)絡(luò)傳輸命令即可實現(xiàn)以太網(wǎng)通信,而不涉及以太網(wǎng)協(xié)議。另外該芯片內(nèi)置以太網(wǎng)物理層可直接連接內(nèi)置變壓器的RJ45插座,而不需要專用的物理層芯片。讀卡器采用MFRC500實現(xiàn)讀寫IC卡功能、采用CH341T實現(xiàn)USB接口。實際應(yīng)用結(jié)果表明該款讀卡器運行穩(wěn)定,沒有出現(xiàn)無法刷卡和無法傳輸?shù)那闆r。
關(guān)鍵詞:W7100;以太網(wǎng)微處理器;讀卡器;MFRC500;設(shè)備聯(lián)網(wǎng)
在實現(xiàn)微控制器設(shè)備聯(lián)入以太網(wǎng)的方案中,常見的是采用微處理器連接以太網(wǎng)控制器。目前大部分的以太網(wǎng)控制器都是為PC機設(shè)計的,如DM9000、CS8900A等。采用這些芯片不僅使用復(fù)雜,而且成本很高,不適合作為讀卡器聯(lián)網(wǎng)的方案。
W7100是WIZnet公司新型的以太網(wǎng)微處理器。該芯片包含一個8位微處理器內(nèi)核和硬件的TCP/IP內(nèi)核。其內(nèi)部集成了10/100 Mb/s以太網(wǎng)PHY層,芯片引腳不經(jīng)過物理層芯片直接連接網(wǎng)口插座。其TCP/IP硬核提供Socket套接字接口,因此只需要進行Socket編程就可以完成以太網(wǎng)的通信,就像訪問外部存儲器一樣簡單,而不涉及以太網(wǎng)底層的控制。
1 W7100的基本特性
W7100的CPU內(nèi)核是一款高性能、速率優(yōu)化的8位嵌入式微處理器。它使用片內(nèi)存儲器高速運行,與工業(yè)標(biāo)準(zhǔn)的8051微處理器二進制代碼兼容。其TCP/IP內(nèi)核是一個全硬件的、經(jīng)過多年市場驗證的TCP/IP協(xié)議棧,并集成了以太網(wǎng)的MAC和PHY層。芯片的主要特性如下:
1)64 kB的程序閃存(Flash);
2)64 kB的SRAM;
3)256 B數(shù)據(jù)Flash存儲器(可用于存儲需要掉電保護的數(shù)據(jù),如網(wǎng)絡(luò)配置信息);
4)內(nèi)置10/100 Mb/s以太網(wǎng)物理層;
5)硬件的TCP/IP協(xié)議棧支持TCP、UDP、IPv4、ICMP、ARP、IGMP和PPPoE;
6)支持8個獨立的Socket通信,內(nèi)部128B的發(fā)送緩沖區(qū)可快速進行數(shù)據(jù)交換;
7)支持ADSL連接。
該芯片可以簡單理解為由TCP/IP硬件協(xié)議棧、以太網(wǎng)MAC層、以太網(wǎng)PHY層和8051內(nèi)核4部分相加而成。W7100具有的以上特性不僅滿足以太網(wǎng)讀卡器的功能需求,而且開發(fā)難度更小。
2 讀卡器功能和接口芯片選擇
以太網(wǎng)讀卡器主要功能是讀卡器接受使用者的刷卡,然后通過以太網(wǎng)將卡號等信息發(fā)送給服務(wù)器,服務(wù)器查詢并修改數(shù)據(jù)庫表格。要完成該目標(biāo),讀卡器需要實現(xiàn)以下方面。
1)刷卡功能這里的卡是常見的IC卡,因此需要實現(xiàn)射頻發(fā)送與接收功能。方案選用NXP公司的MFRC500作為IC卡讀寫芯片。該芯片主要應(yīng)用于13.56 MHz非接觸式通信,其內(nèi)部的發(fā)送器不需要增加有源電路就能直接驅(qū)動近操作距離的天線。
2)以太網(wǎng)接口功能方案采用的W7100直接具有該接口,只需要在軟件中執(zhí)行命令即可。該芯片引出4根差分信號線連接到RJ45插座。方案選用內(nèi)置變壓器的接口整合型單口RJ45插座13F-60LDNL。該插座還具有數(shù)據(jù)傳輸指示燈和連接指示燈。
3)USB接口功能 考慮到在以太網(wǎng)故障或者沒有連接以太網(wǎng)的情況如何設(shè)置讀卡器和取出刷卡信息,方案為此添加一個USB接口作為應(yīng)急。同時由于W7100具有ISP(系統(tǒng)可編程)功能,即可以通過串行口下載程序,所以添加的USB口又作為下載程序的接口。方案選用南京沁恒電子有限公司的CH341T作為USB接口芯片。CH341T是一個USB總線的轉(zhuǎn)接芯片,通過USB總線仿真異步串口。芯片內(nèi)置了獨立的收發(fā)緩沖區(qū),支持單工、半雙工和全雙工異步串行通訊。在計算機端的Windows操作系統(tǒng)下,CH341T的驅(qū)動程序能夠仿真標(biāo)準(zhǔn)串口,因此上位機程序就可以完全以串口方式與讀卡器通信,同樣也能實現(xiàn)程序下載。
4)外部WatchDog在實際使用中發(fā)現(xiàn)該芯片2010年的一個版本有WatchDog不穩(wěn)定的現(xiàn)象(將喂狗代碼與寫dataflash代碼同時存在程序中時會有死機的現(xiàn)象),因此方案選用XCOR公司X5043(2.7 V)作為外部Watchdog。同時該芯片具有4 KB的SPI EEPROM作為數(shù)據(jù)存儲器,可用來擴展內(nèi)部dataflash存儲掉電不能丟失的數(shù)據(jù)。
5)唯一標(biāo)識 在IP地址不固定的情況下,在網(wǎng)絡(luò)上實現(xiàn)唯一標(biāo)識每一臺讀卡器就很困難。方案為讀卡器添加了一組8位的撥碼開關(guān),通過為每一臺讀卡器撥成不同的二進制編碼實現(xiàn)標(biāo)識。讀卡器在啟動的時候讀取撥碼開關(guān)的值來設(shè)定自己的序列號。撥碼開關(guān)的8根引腳可接至W71004組通用引腳中的任意8根。需要注意的是W7100的所有通用引腳在作為輸出時都要外部上拉。
6)設(shè)定工作狀態(tài)讀卡器在正常使用前時需要運行在配置狀態(tài),此時讀卡器接收上位機配置程序發(fā)來的配置參數(shù)配置其IP地址、MAC地址、子網(wǎng)掩碼等。這些數(shù)據(jù)存放在內(nèi)部dataflash或者外部watchdog中。方案采用將撥碼開關(guān)撥為“1000 0000”作為配置狀態(tài),其他為正常工作狀態(tài)。
7)指示燈和蜂鳴器 刷一次卡需要蜂鳴器蜂鳴一次和指示燈閃爍一次,用來指示刷卡成功。如果操作未成功,蜂鳴器要長響報警。如果進入配置狀態(tài),指示燈要改變顏色。方案選用紅藍雙色的LED燈作為指示燈,紅色代表配置狀態(tài),藍色代表工作狀態(tài)。
讀卡器的結(jié)構(gòu)如圖1所示。
3 硬件電路設(shè)計
1)射頻電路如圖2所示,MFRC500需要連接8根數(shù)據(jù)線和4個功能引腳,另外通過3根信號線連接到天線線圈。數(shù)據(jù)線和CS引腳接到W7100的通用口,ALE、WR和RD引腳分別接到W7100對應(yīng)功能引腳。如圖3和圖4所示,天線線圈的是由地線(GND)繞成的。為了加強信號,通常還需要添加一個屏蔽層??烧{(diào)電容的具體值還要根據(jù)實際的感應(yīng)距離調(diào)校而得。
2)RJ45電路圖5為RJ45的參考原理圖,RJ45插座的4根兩對差分信號線(TPTX+、TPTX-、TPRX+和TPRX-)分別連接到W7100的對應(yīng)引腳(TXO-P、TXON、RXIP和RXIN)。在布線時需要特別注意的是:每對差分信號線之間盡量平行、靠近且長度相等,這樣做是為了減少信號干擾。
3)CH341T電路 CH341T通過串行口RXD、TXD與W7100相連。在9和10腳需要連接12 MHz的晶振。8腳(UD-)接USB插座的2腳,7腳(UD+)接USB插座的3腳。USB插座的1腳接5 V電源,4腳接地。
4)X5043的連接 由于在W7100下載程序的時候不能受到X5043的影響,所以必須要在其與nRST引腳上添加一個跳線。在下載程序的時候要拔掉跳線帽,等下載完成之后再接上。要使X5043在上電之后開始工作必須在nCS引腳有一個從高電平到低電平的下拉。另外由于必須要與手動復(fù)位按鈕共用nRST信號線,所以在復(fù)位鍵旁邊不能并聯(lián)大電容,這樣會將復(fù)位信號過濾掉。
5)電源設(shè)計 由于W7100芯片集成了以太網(wǎng)物理層,因此在布線時存在數(shù)字電源與模擬電源、數(shù)字地與模擬地的混合設(shè)計??偣舶?.8 V、1.8 D、1.8 A、3.3 V、3.3 D、3.3 A、數(shù)字地GND和模擬地GNDA,它們分別連接到W7100和其它器件的對應(yīng)引腳。印刷板的鋪地是數(shù)字地,但是模擬地也要盡量的寬。1.8 V、1.8 D和1.8 A之間用1μH電感相連接,同樣3.3 V、3.3 D和3.3 A之間用1μH電感相連接,每種電源和地之間用一個10 μF的電容相連接。
6)W7100引腳連接 W7100的XTLN0和XTLP0為內(nèi)部PHY的晶體的輸入輸出。使用25 MHz平行共鳴晶體連接到這兩個端口,以穩(wěn)定內(nèi)部振蕩器。同樣XTLN1和XTLP1引腳為W7100內(nèi)核的晶體輸入輸出端,使用11.059 2 MHz平行共鳴晶體連接到這兩個端口。
TM3-0和PM2-0引腳懸空,采用默認(rèn)模式。BOOTEN引腳為啟動代碼控制,低電平運行應(yīng)用程序代碼,高電平運行下載程序,所以必須使用跳線方式將其分別連接到地和高電平,在開機時通過跳線進入不同運行狀態(tài)。
F64EN引腳要外接4.7 k下拉電阻。RESETBG為PHY片外電阻,需要連接一個12.3 k(誤差在1%以內(nèi))的電阻到地。RXLED和TXLED分別通過兩個二極管連接到網(wǎng)口的nACT引腳(nACT需要上拉4.7 k電阻),用來指示數(shù)據(jù)傳輸。
nINT3引腳和LINKLED引腳共同連接到網(wǎng)口的nLINK引腳,用來驅(qū)動連接指示燈。
7)實物參考圖 以上6點就是讀卡器的幾個重要部件的設(shè)計參考,在實際應(yīng)用中可根據(jù)性能需要采用更加成熟的模塊,這樣會獲得更好的效果。如在某工程中對刷卡可靠性要求很高,采用了周立功單片機公司的ZLG500AT模塊作為刷卡模塊。讀卡器主板如圖6所示。
4 軟件設(shè)計
4.1 讀卡器與服務(wù)器通信
讀卡器與服務(wù)器的通信主要是讀卡器向服務(wù)器發(fā)送卡號信息和服務(wù)器向讀卡器發(fā)送寫卡信息。服務(wù)器與讀卡器之間采用面向連接的TCP /IP協(xié)議作為通信的底層協(xié)議,讀卡器作為客戶端。服務(wù)器負責(zé)監(jiān)聽讀卡器的連接請求。服務(wù)器端采用Socket套接字接口編寫應(yīng)用程序。
讀卡器端將通過TCP/IP協(xié)議接收的數(shù)據(jù)保存到事先開辟的內(nèi)存接收緩沖區(qū),發(fā)送時將將要發(fā)送的數(shù)據(jù)存儲在數(shù)據(jù)發(fā)送緩沖區(qū),然后執(zhí)行發(fā)送。由于W7100已經(jīng)有硬核的套接字,所以可以直接使用。讀卡器端的端口狀態(tài)轉(zhuǎn)化如圖7所示:
剛復(fù)位時讀卡器處于SOCK_CLOSED狀態(tài)。如果此時服務(wù)器端在監(jiān)聽,則經(jīng)過執(zhí)行OPEN和CONNECT操作后進入SOCK_ESTABLISHED狀態(tài)。這時候讀卡器就可以與服務(wù)器通過SEND和RECV操作傳輸信息。讀卡器主動執(zhí)行DICON操作或者接收到服務(wù)器端的CLOSE命令后就再次進入SOCK_CLO-SED狀態(tài),等待下次連接。為了實現(xiàn)讀卡器始終自動連接和斷線重連,方案采用了一個循環(huán)的switch語句,關(guān)鍵示例代碼如下:
讀卡器執(zhí)行設(shè)備監(jiān)控的流程就寫在示例的數(shù)據(jù)處理代碼部分。讀卡器內(nèi)部含有dataflash,用來保存IP地址、服務(wù)器地址和MAC地址等信息。在復(fù)位時讀取配置信息、調(diào)用初始化函數(shù)初始化以太網(wǎng)接口。
4.2 W7100讀寫IC卡
W7100在復(fù)位之后,首先要初始化微處理器和MFRC500,然后依次循環(huán)執(zhí)行配置命令、請求命令、防碰撞命令、選擇命令、證實命令、裝載密鑰命令、讀卡命令、卡號發(fā)送服務(wù)器、(等待接收反饋數(shù)據(jù))、(寫卡命令)、閃爍LED、蜂鳴器蜂鳴。這樣循環(huán)執(zhí)行就可以完成刷卡功能。各個命令和功能分別采用一個函數(shù)來實現(xiàn),具體的操作可以參考芯片使用手冊,在這里就不再贅述。下面把主函數(shù)主要結(jié)構(gòu)列舉如下:
5 結(jié)束語
本文詳細闡述了一種基于W7100的且支持以太網(wǎng)傳輸?shù)?strong>讀卡器方案,給出了硬件和軟件設(shè)計的參考。該方案已經(jīng)成功應(yīng)用在某大型事業(yè)單位實驗室管理系統(tǒng)中。經(jīng)過實際運行結(jié)果表明該方案能夠滿足刷卡管理的可靠性及實時性要求。較之以前的方案,該方案成本更低、更容易開發(fā)。