關鍵詞 CP2200 以太網C805lF040 TCP/IP
引 言
當前,嵌入式設計人員在為遠程控制或監(jiān)控設備提供以太網接入時,使用的以太網控制器(如RTL8019、DM9008、CS8900A等)都是專為個人計算機系統設計的。這些器件不僅接口電路復雜,體積較大,而且比較昂貴。CP2200是Silabs公司于近期推出的一款48引腳獨立以太網控制器。它符合IEEE 802.3協議,支持10M以太網接入,而且僅需很少的外部電路連線就可滿足絕大多數嵌入式以太嗣接口的設計要求,簡化了嵌入式以太網接口的設計,減小了占板空間,降低了系統開發(fā)成本。
另外,該以太網控制器具有8位并行主機接口,可以為絕大多數微控制器或主處理器提供以太網通信功能。8位并行總線接口支持Intel和Motorola總線方式,可以使用復用或非復用方式尋址。這些功能加上相關處理器的TCP/IP協議棧,使得嵌入式應用系統的以太網接口實現變得十分簡易。
1 CP2200的主要功能
◆符合IEEE 802.3協議:內置lOMbps以太網物理層器件PHY及媒介接入控制器MAC,可按業(yè)界標準的以太網協議可靠地收發(fā)信息包數據;具有可編程填充和CRC自動生成功能。
◆可編程過濾功能:特殊的過濾器,可自動評價、接收或拒收Magic Packet、單播(Unicast)、多播(Multicast)或廣播(Broadcast)信息包,以減輕主控單片機的處理負荷。
◆30 Mbp5速率的并行主機接口:支持Intel和M0torola兩種總線方式。
◆8 KB Flash存儲器:8192字節(jié)非易失性數據存儲空間,可對其進行靈活編程;工廠預編程的唯一48位MAC地址。
2 硬件電路設計
系統的硬件電路原理可參考圖1。其中,要特別注意CP2200控制器與RJ-45的連接電路,因為這些參數對通信的可靠性影響很大。
CP2200的外圍電路比較簡單,主要考慮其復位引腳、晶振輸入、并行接口和與以太網變壓器的連接。
2.1 復位電路
CP2200具有上電復位功能。一旦VDD上升到某個門限值后,就會在片內產生上電復位脈沖。當VDD上升到足夠器件上作時,器件會以初始化狀態(tài)啟動。CP2200支持軟件復位,可以通過并口將復位寄存器置位來實現軟件復位。
2.2 晶振電路
CP2200的工作頻率為20MHz,晶振連接在XTAL1和XTAL2之間。CP2200也可由連接到XTAL1引腳的外部時鐘源驅動。
2.3 I/O并行接口
CP2200的并行主機接口,支持Motorola和Intel兩種總線方式,且支持地址數據復用和非復用方式??梢酝ㄟ^將MUXEN和MOTEN引腳接地或拉高電平來實現對主機接口總線方式的配置。
2.4 以太網變壓器
要實現以太網接口,以太網變壓器是不可缺少的。在差分接收引腳(RX+/RX-)上,需要1個專用于10BASE-T操作的l:1脈沖變壓器;在差分發(fā)送引腳(TX+/TX-)上,需要外接1個帶有中心抽頭的l:2.5脈沖變壓器。變壓器應具有2 kV以上的電壓隔離性能,以防止靜電干擾。發(fā)送端需要2個8Ω(精度為1%)的電阻和1個560pF的電容與特定端相連,接收端需要1個100Ω電阻與特定端相連(具體連接方式見圖1)。
按照CP2200的要求,筆者采用的是PRJ系列的PRJ-010型變壓器。該變壓器集成了RJ-45接頭,在省去了不少連線的同時也提高了高頻信號傳輸的可靠性。
2.5 其他電路
LINK和ACT引腳輸出電平用于驅動LED,以指示網絡的連接和活動狀態(tài)。
所有電源引腳都必須與同一個外部3.3V電源相連。類似地,所有參考地都應在外部連接到相同的接地點。每個VDD和地之間都應連接一個0.1μF的陶瓷旁路電容,且盡可能靠近引腳。
需要特別說明的是,驅動雙絞線接口需要相對高的電流,因此以太網的收發(fā)數據線應盡可能短,并且線徑適當加大以減少電阻損耗(為了保證數據的可靠傳輸,筆者的PCB電路板選擇了20mil的線徑)。(注:100mil=2.54 mm。)
3 軟件設計
TCP/IP協議種類繁多,相互之間交互作用復雜,在單片機上不可能實現所有協議,所以必須對協議棧進行裁剪。結合系統的具體通信要求,本系統最后只保留了TCP、UDP、IP、ICMP、ARP協議模塊。在協議棧程序的整體設計上,考慮到單片機的單任務執(zhí)行方式很難發(fā)揮TCP/IP協議的特點,采用了基于事件驅動機制的TCP/IP協議棧的實現方法。該機制的引入,使得系統在保證具有高效的匯編語言代碼效率的同時,實時響應性也得到了大幅提高。下而將具體闡述事件驅動機制的原理、特點以及基于該機制的TCP/IP協議棧的實現。
3.1 事件驅動機制的原理
系統初始化完成后,進入事件循環(huán)體,不斷查詢C8051F040的事件隊列是否有事什,一些事件隊列非空,則讀取事件標志字,判斷事件類型,而后調用對應事件處理子程序。處理子程序執(zhí)行完畢后,仍然返回到事件循環(huán)體中。事件標志字由中斷直接或者間接驅動,當某個事件發(fā)生后,只需在中斷服務程序中將狀態(tài)字的對應位置位。中斷不斷向事件隊列中添加事件,而C8051F040處理程序則不停地從事件隊列中讀取事件標志字,處理事件。
3.2 事件驅動機制的特點
①由于在中斷處理程序中,僅執(zhí)行了改變事件標志字這樣的簡單程序語句,把事件添加到C8051F040的事件隊列中后就立即返回,所以系統關閉中斷的時間很短,從而增強了系統對中斷處理的實時性。
②C805lF040根據當前讀取的事件,進行相應事件處理或者向事件隊列中添加進一步處理所需的事件。這實際上是對任務都進行了分步處理,在執(zhí)行一步某一任務的同時,也可以執(zhí)行一步其他任務。這樣,在不影響主程序流程的情況下,提高了系統的實時性。
3.3 事件循環(huán)體的簡要流程
事件循環(huán)體的簡要流程如圖2所示,下面具體介紹各事件的含義。
◆EVENT_ETH_ARRIVED:有待處理的以太網幀事件。檢測到此事件,C8051F040會調用讀CP2200接收緩沖區(qū)程序,然后對幀進行解包處理。
◆EVENT_TCP_RETRAN:TCP重傳事件。若TCP定時器超時,則觸發(fā)該事件。
◆EVENT_TCP_INACTIVITY:關斷不話動連接事件。若某連接超過0.5s沒有收發(fā)數據,則觸發(fā)此事件。
◆EVENT_ARP_RETRAN:ARP請求數據包重傳事件。若某一ARP請求在發(fā)出O.5s后沒有相應,則觸發(fā)該事件。若經兩次重發(fā)都沒回應,則將以該IP為目的地址的數據包丟棄。
◆EVENT-AGE_ARP_CACHE:更新ARP緩存事件。每60s觸發(fā)該事件一次。
◆EVENT_COME_NEWDATA:有新數據事件。當有新數據待發(fā)送時,觸發(fā)該事件。
4 結論
CP2200的多種集成功能(如CRC校驗、數據濾波等)有效地減輕了單片機的載荷,它內部的收發(fā)接口單元操作起來靈活方便,為以太網數據包提供了有效的緩沖;另外,該芯片具有穩(wěn)定的工作性能和抗干擾抗震性能。筆者利用CP2200、C8051F040和文中提到的TCP/IP協議棧開發(fā)出了用于鐵路機車的以太網通信接口板卡。此板卡已在測試機車上運行,工作性能良好,能夠進行穩(wěn)定的數據傳遞。