<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 用CP2200實(shí)現(xiàn)MCU的簡(jiǎn)易型以太網(wǎng)接口

          用CP2200實(shí)現(xiàn)MCU的簡(jiǎn)易型以太網(wǎng)接口

          作者: 時(shí)間:2007-12-12 來(lái)源:網(wǎng)絡(luò) 收藏
          摘要 介紹基于新型獨(dú)立控制芯片的以太網(wǎng)通信接口的軟硬件設(shè)計(jì)方法;詳細(xì)介紹的結(jié)構(gòu)功能、外圍接口電路,以及基于與單片機(jī)C805lF040的TCP/IP協(xié)議棧的實(shí)現(xiàn)。
          關(guān)鍵詞 CP2200 以太網(wǎng)C805lF040 TCP/IP


          引 言
          當(dāng)前,嵌入式設(shè)計(jì)人員在為遠(yuǎn)程控制或監(jiān)控設(shè)備提供以太網(wǎng)接入時(shí),使用的以太網(wǎng)控制器(如RTL8019、DM9008、CS8900A等)都是專(zhuān)為個(gè)人計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的。這些器件不僅接口電路復(fù)雜,體積較大,而且比較昂貴。CP2200是Silabs公司于近期推出的一款48引腳獨(dú)立以太網(wǎng)控制器。它符合IEEE 802.3協(xié)議,支持10M以太網(wǎng)接入,而且僅需很少的外部電路連線就可滿足絕大多數(shù)嵌入式以太嗣接口的設(shè)計(jì)要求,簡(jiǎn)化了嵌入式的設(shè)計(jì),減小了占板空間,降低了系統(tǒng)開(kāi)發(fā)成本。
          另外,該以太網(wǎng)控制器具有8位并行主機(jī)接口,可以為絕大多數(shù)微控制器或主處理器提供以太網(wǎng)通信功能。8位并行總線接口支持Intel和Motorola總線方式,可以使用復(fù)用或非復(fù)用方式尋址。這些功能加上相關(guān)處理器的TCP/IP協(xié)議棧,使得嵌入式應(yīng)用系統(tǒng)的實(shí)現(xiàn)變得十分簡(jiǎn)易。

          1 CP2200的主要功能
          ◆符合IEEE 802.3協(xié)議:內(nèi)置lOMbps以太網(wǎng)物理層器件PHY及媒介接入控制器MAC,可按業(yè)界標(biāo)準(zhǔn)的以太網(wǎng)協(xié)議可靠地收發(fā)信息包數(shù)據(jù);具有可編程填充和CRC自動(dòng)生成功能。
          ◆可編程過(guò)濾功能:特殊的過(guò)濾器,可自動(dòng)評(píng)價(jià)、接收或拒收Magic Packet、單播(Unicast)、多播(Multicast)或廣播(Broadcast)信息包,以減輕主控單片機(jī)的處理負(fù)荷。
          ◆30 Mbp5速率的并行主機(jī)接口:支持Intel和M0torola兩種總線方式。
          ◆8 KB Flash存儲(chǔ)器:8192字節(jié)非易失性數(shù)據(jù)存儲(chǔ)空間,可對(duì)其進(jìn)行靈活編程;工廠預(yù)編程的唯一48位MAC地址。

          2 硬件電路設(shè)計(jì)
          系統(tǒng)的硬件電路原理可參考圖1。其中,要特別注意CP2200控制器與RJ-45的連接電路,因?yàn)檫@些參數(shù)對(duì)通信的可靠性影響很大。
          CP2200的外圍電路比較簡(jiǎn)單,主要考慮其復(fù)位引腳、晶振輸入、并行接口和與以太網(wǎng)變壓器的連接。
          2.1 復(fù)位電路
          CP2200具有上電復(fù)位功能。一旦VDD上升到某個(gè)門(mén)限值后,就會(huì)在片內(nèi)產(chǎn)生上電復(fù)位脈沖。當(dāng)VDD上升到足夠器件上作時(shí),器件會(huì)以初始化狀態(tài)啟動(dòng)。CP2200支持軟件復(fù)位,可以通過(guò)并口將復(fù)位寄存器置位來(lái)實(shí)現(xiàn)軟件復(fù)位。
          2.2 晶振電路
          CP2200的工作頻率為20MHz,晶振連接在XTAL1和XTAL2之間。CP2200也可由連接到XTAL1引腳的外部時(shí)鐘源驅(qū)動(dòng)。
          2.3 I/O并行接口
          CP2200的并行主機(jī)接口,支持Motorola和Intel兩種總線方式,且支持地址數(shù)據(jù)復(fù)用和非復(fù)用方式??梢酝ㄟ^(guò)將MUXEN和MOTEN引腳接地或拉高電平來(lái)實(shí)現(xiàn)對(duì)主機(jī)接口總線方式的配置。
          2.4 以太網(wǎng)變壓器
          要實(shí)現(xiàn),以太網(wǎng)變壓器是不可缺少的。在差分接收引腳(RX+/RX-)上,需要1個(gè)專(zhuān)用于10BASE-T操作的l:1脈沖變壓器;在差分發(fā)送引腳(TX+/TX-)上,需要外接1個(gè)帶有中心抽頭的l:2.5脈沖變壓器。變壓器應(yīng)具有2 kV以上的電壓隔離性能,以防止靜電干擾。發(fā)送端需要2個(gè)8Ω(精度為1%)的電阻和1個(gè)560pF的電容與特定端相連,接收端需要1個(gè)100Ω電阻與特定端相連(具體連接方式見(jiàn)圖1)。

          按照CP2200的要求,筆者采用的是PRJ系列的PRJ-010型變壓器。該變壓器集成了RJ-45接頭,在省去了不少連線的同時(shí)也提高了高頻信號(hào)傳輸?shù)目煽啃浴?BR>2.5 其他電路
          LINK和ACT引腳輸出電平用于驅(qū)動(dòng)LED,以指示網(wǎng)絡(luò)的連接和活動(dòng)狀態(tài)。
          所有電源引腳都必須與同一個(gè)外部3.3V電源相連。類(lèi)似地,所有參考地都應(yīng)在外部連接到相同的接地點(diǎn)。每個(gè)VDD和地之間都應(yīng)連接一個(gè)0.1μF的陶瓷旁路電容,且盡可能靠近引腳。
          需要特別說(shuō)明的是,驅(qū)動(dòng)雙絞線接口需要相對(duì)高的電流,因此以太網(wǎng)的收發(fā)數(shù)據(jù)線應(yīng)盡可能短,并且線徑適當(dāng)加大以減少電阻損耗(為了保證數(shù)據(jù)的可靠傳輸,筆者的PCB電路板選擇了20mil的線徑)。(注:100mil=2.54 mm。)


          3 軟件設(shè)計(jì)
          TCP/IP協(xié)議種類(lèi)繁多,相互之間交互作用復(fù)雜,在單片機(jī)上不可能實(shí)現(xiàn)所有協(xié)議,所以必須對(duì)協(xié)議棧進(jìn)行裁剪。結(jié)合系統(tǒng)的具體通信要求,本系統(tǒng)最后只保留了TCP、UDP、IP、ICMP、ARP協(xié)議模塊。在協(xié)議棧程序的整體設(shè)計(jì)上,考慮到單片機(jī)的單任務(wù)執(zhí)行方式很難發(fā)揮TCP/IP協(xié)議的特點(diǎn),采用了基于事件驅(qū)動(dòng)機(jī)制的TCP/IP協(xié)議棧的實(shí)現(xiàn)方法。該機(jī)制的引入,使得系統(tǒng)在保證具有高效的匯編語(yǔ)言代碼效率的同時(shí),實(shí)時(shí)響應(yīng)性也得到了大幅提高。下而將具體闡述事件驅(qū)動(dòng)機(jī)制的原理、特點(diǎn)以及基于該機(jī)制的TCP/IP協(xié)議棧的實(shí)現(xiàn)。
          3.1 事件驅(qū)動(dòng)機(jī)制的原理
          系統(tǒng)初始化完成后,進(jìn)入事件循環(huán)體,不斷查詢(xún)C8051F040的事件隊(duì)列是否有事什,一些事件隊(duì)列非空,則讀取事件標(biāo)志字,判斷事件類(lèi)型,而后調(diào)用對(duì)應(yīng)事件處理子程序。處理子程序執(zhí)行完畢后,仍然返回到事件循環(huán)體中。事件標(biāo)志字由中斷直接或者間接驅(qū)動(dòng),當(dāng)某個(gè)事件發(fā)生后,只需在中斷服務(wù)程序中將狀態(tài)字的對(duì)應(yīng)位置位。中斷不斷向事件隊(duì)列中添加事件,而C8051F040處理程序則不停地從事件隊(duì)列中讀取事件標(biāo)志字,處理事件。
          3.2 事件驅(qū)動(dòng)機(jī)制的特點(diǎn)
          ①由于在中斷處理程序中,僅執(zhí)行了改變事件標(biāo)志字這樣的簡(jiǎn)單程序語(yǔ)句,把事件添加到C8051F040的事件隊(duì)列中后就立即返回,所以系統(tǒng)關(guān)閉中斷的時(shí)間很短,從而增強(qiáng)了系統(tǒng)對(duì)中斷處理的實(shí)時(shí)性。
          ②C805lF040根據(jù)當(dāng)前讀取的事件,進(jìn)行相應(yīng)事件處理或者向事件隊(duì)列中添加進(jìn)一步處理所需的事件。這實(shí)際上是對(duì)任務(wù)都進(jìn)行了分步處理,在執(zhí)行一步某一任務(wù)的同時(shí),也可以執(zhí)行一步其他任務(wù)。這樣,在不影響主程序流程的情況下,提高了系統(tǒng)的實(shí)時(shí)性。
          3.3 事件循環(huán)體的簡(jiǎn)要流程
          事件循環(huán)體的簡(jiǎn)要流程如圖2所示,下面具體介紹各事件的含義。

          ◆EVENT_ETH_ARRIVED:有待處理的以太網(wǎng)幀事件。檢測(cè)到此事件,C8051F040會(huì)調(diào)用讀CP2200接收緩沖區(qū)程序,然后對(duì)幀進(jìn)行解包處理。
          ◆EVENT_TCP_RETRAN:TCP重傳事件。若TCP定時(shí)器超時(shí),則觸發(fā)該事件。
          ◆EVENT_TCP_INACTIVITY:關(guān)斷不話動(dòng)連接事件。若某連接超過(guò)0.5s沒(méi)有收發(fā)數(shù)據(jù),則觸發(fā)此事件。
          ◆EVENT_ARP_RETRAN:ARP請(qǐng)求數(shù)據(jù)包重傳事件。若某一ARP請(qǐng)求在發(fā)出O.5s后沒(méi)有相應(yīng),則觸發(fā)該事件。若經(jīng)兩次重發(fā)都沒(méi)回應(yīng),則將以該IP為目的地址的數(shù)據(jù)包丟棄。
          ◆EVENT-AGE_ARP_CACHE:更新ARP緩存事件。每60s觸發(fā)該事件一次。
          ◆EVENT_COME_NEWDATA:有新數(shù)據(jù)事件。當(dāng)有新數(shù)據(jù)待發(fā)送時(shí),觸發(fā)該事件。

          4 結(jié)論
          CP2200的多種集成功能(如CRC校驗(yàn)、數(shù)據(jù)濾波等)有效地減輕了單片機(jī)的載荷,它內(nèi)部的收發(fā)接口單元操作起來(lái)靈活方便,為以太網(wǎng)數(shù)據(jù)包提供了有效的緩沖;另外,該芯片具有穩(wěn)定的工作性能和抗干擾抗震性能。筆者利用CP2200、C8051F040和文中提到的TCP/IP協(xié)議棧開(kāi)發(fā)出了用于鐵路機(jī)車(chē)的以太網(wǎng)通信接口板卡。此板卡已在測(cè)試機(jī)車(chē)上運(yùn)行,工作性能良好,能夠進(jìn)行穩(wěn)定的數(shù)據(jù)傳遞。

          tcp/ip相關(guān)文章:tcp/ip是什么




          關(guān)鍵詞: 2200 MCU CP 以太網(wǎng)接口

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();