本應(yīng)用筆記介紹如何使用uIP TCP/IP網(wǎng)絡(luò)堆棧將MAXQ?微控制器聯(lián)網(wǎng)。常用的SPI?轉(zhuǎn)以太網(wǎng)IC用作此應(yīng)用的MAC/PHY。MAXQ2000作為微控制器示例。
介紹
系統(tǒng)的遠(yuǎn)程監(jiān)測和控制可能是任何微控制器應(yīng)用中最有價(jià)值的功能之一。想象一下,一個(gè)高爾夫球場的大型草坪噴水滅火系統(tǒng),其中系統(tǒng)應(yīng)向主計(jì)算機(jī)報(bào)告故障。這樣的系統(tǒng)幾乎消除了人工觀察系統(tǒng)正常運(yùn)行的需要。
許多通信方法,如RS-232串行或紅外,可用于實(shí)現(xiàn)該系統(tǒng)內(nèi)遠(yuǎn)程設(shè)備的控制和監(jiān)控。但是,所有這些方法都綁定到涉及不兼容傳輸介質(zhì)和協(xié)議的特定接口,并且距離有限。
以太網(wǎng)互聯(lián)網(wǎng)協(xié)議 (IP)
互聯(lián)網(wǎng)協(xié)議為上述挑戰(zhàn)提供了解決方案。所有現(xiàn)代操作系統(tǒng)都實(shí)現(xiàn)了 IP 堆棧。雖然IP可以在各種傳輸介質(zhì)上運(yùn)行,但以太網(wǎng)是迄今為止最普遍的。此外,由于采用交換和路由網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),以太網(wǎng)不受距離限制。
隨著帶有板載緩沖器的先進(jìn)MAC/PHY集成電路的出現(xiàn),我們可以使用微控制器和以太網(wǎng)IP來控制和收集來自幾乎任何遠(yuǎn)程系統(tǒng)的數(shù)據(jù)。在本應(yīng)用筆記中,我們將演示如何使用免費(fèi)的uIP堆棧和SPI轉(zhuǎn)以太網(wǎng)IC將MAXQ2000微控制器聯(lián)網(wǎng)。
uIP 簡介
uIP(發(fā)音為“micro IP”)提供了一個(gè)最小的IP堆棧,其中包括TCP,UDP和ICMP協(xié)議。uIP由Adam Dunkels開發(fā),并在BSD風(fēng)格的許可證下發(fā)布。
當(dāng)然,對(duì)于大多數(shù)應(yīng)用程序來說,完全實(shí)現(xiàn) TCP/IP 既沒有必要,也不是謹(jǐn)慎的。uIP 提供了一組功能,可滿足全功能主機(jī)的最低要求,并且不需要像其他一些輕量級(jí) IP 堆棧那樣的“特殊情況”例外。
編譯器環(huán)境
用于C的Rowley CrossWorks 1.1 build 1編譯器用于編譯,匯編和鏈接該項(xiàng)目。為了便于調(diào)試,禁用了所有代碼優(yōu)化功能。最終代碼大小僅為MAXQ2000可用程序閃存的一小部分。
MAXQ2000具有2kB的可用數(shù)據(jù)存儲(chǔ)器。我們必須明智地使用此數(shù)據(jù)存儲(chǔ)器,因?yàn)楸仨殲樘幚鞩P數(shù)據(jù)包內(nèi)容分配緩沖區(qū)。為了優(yōu)化數(shù)據(jù)存儲(chǔ)器的使用,所有常量字符串都存儲(chǔ)在代碼空間中,并根據(jù)需要復(fù)制到固定大小的RAM緩沖區(qū)。
使用 uIP 堆棧
uIP 堆棧可以看作是一個(gè)事件循環(huán),其超時(shí)基于特定于體系結(jié)構(gòu)的時(shí)鐘代碼。在主循環(huán)中,MAC/PHY 接收的任何數(shù)據(jù)包都將由 uip_arp_ipin() 和 uip_input() 處理。這些調(diào)用可能會(huì)生成輸出數(shù)據(jù)包,該數(shù)據(jù)包必須由 MAC/PHY 驅(qū)動(dòng)程序代碼傳輸。
然后檢查計(jì)時(shí)器以清理一段時(shí)間未看到的已關(guān)閉連接和 ARP 表?xiàng)l目,并調(diào)用應(yīng)用程序回調(diào)以進(jìn)行重新傳輸。主事件循環(huán)是樣板代碼,對(duì)于大多數(shù)應(yīng)用程序不需要更改。
請務(wù)必注意,uIP 實(shí)現(xiàn)的 TCP 窗口大小非常小,因此一次只有一個(gè)未完成(未確認(rèn))數(shù)據(jù)包可供處理,并可能重新傳輸。
真正的應(yīng)用程序處理發(fā)生在為UIP_APPCALL定義的函數(shù)中。調(diào)用時(shí),應(yīng)用程序回調(diào)可能會(huì)檢查返回 uIP 當(dāng)前狀態(tài)的多個(gè)函數(shù)。這些狀態(tài)中最重要的是:uip_connected()、uip_closed()、uip_aborted()、uip_timedout()、uip_newdata()和uip_rexmit()。前四個(gè)函數(shù)管理傳入連接的打開和關(guān)閉;后兩個(gè)函數(shù)處理傳入和傳出數(shù)據(jù)。
當(dāng)新數(shù)據(jù)到達(dá)套接字供應(yīng)用程序處理時(shí),uip_newdata() 將返回非零結(jié)果。然后,應(yīng)用程序應(yīng)處理數(shù)據(jù)(這些數(shù)據(jù)保存在 uip_appdata 指向的緩沖區(qū)中),并選擇性地返回響應(yīng)。所有數(shù)據(jù)(包括以太網(wǎng)鏈路層和 IP 報(bào)頭)都存儲(chǔ)在uip_appdata中。
如果網(wǎng)絡(luò)丟棄返回給對(duì)等方的任何部分?jǐn)?shù)據(jù),則應(yīng)用程序回調(diào)將通過計(jì)時(shí)器超時(shí)調(diào)用,uip_rexmit() 將返回非零結(jié)果。
正是在這一點(diǎn)上,uIP 與其他 IP 堆棧不同。通常,TCP 數(shù)據(jù)包重新傳輸由 IP 堆棧處理。uIP 通過要求應(yīng)用程序在顯示 uip_rexmit() 標(biāo)志時(shí)重新傳輸丟失的數(shù)據(jù)來節(jié)省內(nèi)存。這種重新傳輸可以通過重新生成數(shù)據(jù)來完成,或者通過將先前生成的數(shù)據(jù)保存在緩沖區(qū)中以進(jìn)行重新傳輸來實(shí)現(xiàn)。
MAC/PHY 驅(qū)動(dòng)程序
要通過以太網(wǎng)傳輸和接收 IP 數(shù)據(jù)報(bào),我們必須向 uIP 提供 MAC/PHY 驅(qū)動(dòng)程序代碼。API 相當(dāng)簡單:驅(qū)動(dòng)程序必須發(fā)出信號(hào),表明傳入的以太網(wǎng)幀已準(zhǔn)備好進(jìn)行處理;必須有調(diào)用才能接收數(shù)據(jù)包并在網(wǎng)絡(luò)上傳輸數(shù)據(jù)包。這些調(diào)用在 macphy.c 中實(shí)現(xiàn),并從主事件循環(huán)調(diào)用。
對(duì)于此應(yīng)用,我們選擇了Microchip ENC28J60 SPI轉(zhuǎn)以太網(wǎng)芯片。此集成 MAC/PHY 可通過 SPI 訪問,并具有 8kB 的數(shù)據(jù)包緩沖存儲(chǔ)器。圖1所示為MAXQ2000與ENC28J60之間的連接。
圖1.原理圖示出了MAXQ2000微控制器與SPI轉(zhuǎn)以太網(wǎng)IC之間的連接。
當(dāng)前實(shí)現(xiàn)的 uIP 堆棧假定整個(gè) IP 數(shù)據(jù)報(bào)駐留在內(nèi)存中。MAXQ2000具有2kB的數(shù)據(jù)RAM,可能需要用于其他任務(wù),因此將數(shù)據(jù)包從以太網(wǎng)復(fù)制到1500字節(jié)的MTU是不明智的。相反,我們使用最大段大小的 TCP 功能來指定我們不接受超過 500 字節(jié)的段,包括以太網(wǎng)鏈路層和 IP 標(biāo)頭。此段大小為大多數(shù)應(yīng)用程序提供了足夠的吞吐量。此外,我們指示 MAC/PHY 以靜默方式丟棄任何超過 500 字節(jié)的數(shù)據(jù)包。
此項(xiàng)目的示例源代碼包括文件 macphy.c 中的 MAC/PHY 驅(qū)動(dòng)程序代碼以及關(guān)聯(lián)的包含文件 macphy.h 和 macphy_priv.h。
示例應(yīng)用程序
我們的示例應(yīng)用程序?qū)崿F(xiàn)了在 TCP 端口 23 上偵聽的修改后的回顯服務(wù)器。首先,啟動(dòng)MAXQ2000的實(shí)時(shí)時(shí)鐘(RTC)進(jìn)行事件定時(shí)。然后,我們初始化 SPI 硬件并使用默認(rèn)設(shè)置加載 MAC/PHY。
然后,應(yīng)用從PCB上的1-Wire? DS2502-E48中檢索唯一的以太網(wǎng)硬件地址。必須將此硬件地址通知 MAC/PHY 驅(qū)動(dòng)程序和 uIP 堆棧。進(jìn)行兩次調(diào)用 macphy_init() 和 uip_setethaddr() 來設(shè)置此信息。
uIP 堆棧通過調(diào)用 uip_init() 進(jìn)行初始化,并設(shè)置編譯的默認(rèn) IP 地址、網(wǎng)絡(luò)掩碼和網(wǎng)關(guān)。
傳入連接完成后,將向?qū)Φ确酱蛴柡蛘Z??蛻舳税l(fā)送的任何文本都以“回顯”方式發(fā)回,除了所有單詞都是逐個(gè)字母顛倒的。
仍然有充足的計(jì)算資源來執(zhí)行微控制器系統(tǒng)的主要功能。在我們的高爾夫球場灑水器示例中,我們可以使用 RTC 上可用的中斷系統(tǒng)在適當(dāng)?shù)臅r(shí)間打開和關(guān)閉噴水滅火閥。
網(wǎng)絡(luò)接口沒有實(shí)時(shí)限制,因?yàn)?TCP/IP 可以無縫處理超時(shí)和重新傳輸。TCP 連接通常需要幾分鐘到幾小時(shí)才能因超時(shí)而斷開連接。因此,微控制器代碼可以將網(wǎng)絡(luò)連接作為后臺(tái)任務(wù)進(jìn)行管理。
結(jié)論
MAXQ2000的聯(lián)網(wǎng)使用免費(fèi)的uIP堆棧很容易實(shí)現(xiàn)。uIP的事件驅(qū)動(dòng)特性有助于遠(yuǎn)程監(jiān)視和控制微控制器系統(tǒng)。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151422 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5425瀏覽量
171715 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7494瀏覽量
87953
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論