用uIP堆棧實(shí)現(xiàn)MAXQ微控制器聯(lián)網(wǎng)
摘要:本應(yīng)用筆記描述了如何用uIP TCP/IP網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)MAXQ®微控制器聯(lián)網(wǎng)。本設(shè)計(jì)中采用通用的SPI™至以太網(wǎng)轉(zhuǎn)換IC作為MAC/PHY。MAXQ2000作為微控制器示例。
引言
系統(tǒng)遠(yuǎn)程監(jiān)測(cè)和控制或許是微控制器應(yīng)用最重要的功能之一。想象一下:一個(gè)巨大的高爾夫球場(chǎng)的草坪灑水系統(tǒng),最好能夠向主機(jī)自動(dòng)報(bào)告故障狀況。這樣的系統(tǒng)幾乎無需人工監(jiān)測(cè)其是否正常工作。
RS-232串口或紅外等多種通信方式可用來實(shí)現(xiàn)系統(tǒng)遠(yuǎn)程器件的控制和監(jiān)測(cè)。然而,所有這些方法都受限于具體的接口標(biāo)準(zhǔn),其中包括:是否與傳輸媒介和協(xié)議兼容、距離限制等。
以太網(wǎng)網(wǎng)絡(luò)協(xié)議(IP)
網(wǎng)絡(luò)協(xié)議提供了一個(gè)應(yīng)對(duì)上述挑戰(zhàn)的解決方案,所有現(xiàn)代操作系統(tǒng)都帶有IP棧。而IP可在各種傳輸媒介上運(yùn)行,到目前為止,以太網(wǎng)的應(yīng)用最普遍。此外,以太網(wǎng)得益于交換和路由網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),因此不受距離限制。
借助于先進(jìn)的MAC/PHY集成電路與板載緩沖器,可以用微控制器和以太網(wǎng)IP實(shí)現(xiàn)控制,并且?guī)缀蹩梢詮乃羞h(yuǎn)程系統(tǒng)采集數(shù)據(jù)。本文演示了如何利用免費(fèi)的uIP堆棧和SPI至以太網(wǎng)轉(zhuǎn)換IC實(shí)現(xiàn)MAXQ2000微控制器聯(lián)網(wǎng)。
uIP介紹
uIP (讀作"micro IP")提供了一個(gè)最小規(guī)模的IP堆棧,其中包括TCP、UDP和ICMP協(xié)議。uIP由Adam Dunkels開發(fā),采用BSD方式授權(quán)。完整的源代碼可從http://www.sics.se/~adam/uip/index.php/Main_Page下載。
當(dāng)然,對(duì)于大多數(shù)應(yīng)用,沒有必要完全運(yùn)行TCP/IP,過于浪費(fèi)。uIP具有一整套功能,符合全功能主機(jī)的最低需求,并且可以避免其它簡(jiǎn)單IP堆棧存在的"特殊情況"。
編譯環(huán)境
Rowley CrossWorks 1.1 build 1 C編譯器用于編譯、匯編和鏈接項(xiàng)目。為方便調(diào)試,所有代碼優(yōu)化功能均被禁用。最終代碼僅占用MAXQ2000程序閃存存儲(chǔ)器的一小部分。
MAXQ2000有2kB的數(shù)據(jù)存儲(chǔ)器。使用這種數(shù)據(jù)存儲(chǔ)器時(shí)必須謹(jǐn)慎,因?yàn)榫彌_器必須用來處理IP數(shù)據(jù)包的內(nèi)容。為了最大限度地利用數(shù)據(jù)存儲(chǔ)器,所有常數(shù)都存儲(chǔ)在代碼空間內(nèi),并根據(jù)需要復(fù)制到一個(gè)固定大小的RMA緩存區(qū)。
uIP堆棧的使用
uIP堆棧可以看成一個(gè)事件循環(huán),超時(shí)基于結(jié)構(gòu)時(shí)鐘設(shè)定。在主循環(huán)中,MAC/PHY接收到的數(shù)據(jù)包由uip_arp_ipin()和uip_input()處理。這些調(diào)用會(huì)產(chǎn)生一個(gè)輸出數(shù)據(jù)包,必須由MAC/PHY驅(qū)動(dòng)程序傳輸。
然后檢查計(jì)時(shí)器,清理已關(guān)閉連接及一段時(shí)間未出現(xiàn)的ARP表項(xiàng),并調(diào)用應(yīng)用程序回調(diào)函數(shù)以進(jìn)行重發(fā)。主要事件循環(huán)為樣板代碼,大多數(shù)應(yīng)用中無需改變。
注意:uIP實(shí)現(xiàn)了非常小的TCP窗口尺寸,這一點(diǎn)非常重要,只能有一個(gè)重要的
實(shí)際應(yīng)用處理由函數(shù)UIP_APPCALL完成。調(diào)用時(shí),應(yīng)用程序回調(diào)功能會(huì)檢查幾個(gè)功能并返回uIP當(dāng)前狀態(tài)。其中最重要的狀態(tài)是:uip_connected()、uip_closed()、uip_aborted()、uip_timedout()、uip_newdata()和and uip_rexmit()。前四個(gè)函數(shù)管理輸入連接的打開和關(guān)閉;后兩個(gè)函數(shù)管理數(shù)據(jù)的輸入和輸出。
當(dāng)新數(shù)據(jù)到達(dá)套接字等待應(yīng)用程序處理時(shí),uip_newdata()將返回一個(gè)非零的結(jié)果。然后應(yīng)用程序進(jìn)行數(shù)據(jù)處理,這些數(shù)據(jù)保存在uip_appdata指向的緩沖區(qū)中,也可以返回響應(yīng)。所有數(shù)據(jù),包括以太網(wǎng)鏈路層和IP頭儲(chǔ)存在uip_appdata。
如果網(wǎng)絡(luò)丟掉返回至peer的數(shù)據(jù)的任何部分,應(yīng)用將通過計(jì)時(shí)器超時(shí)調(diào)用應(yīng)用程序回調(diào)功能并且uip_rexmit()返回一個(gè)非零的結(jié)果。
在這個(gè)點(diǎn)上uIP與其他IP堆棧不同。通常情況下,TCP數(shù)據(jù)包的轉(zhuǎn)發(fā)由IP協(xié)議棧處理。當(dāng)uip_rexmit()標(biāo)記出現(xiàn)時(shí)uIP需要應(yīng)用程序轉(zhuǎn)發(fā)丟失的數(shù)據(jù),可以節(jié)省存儲(chǔ)空間。轉(zhuǎn)發(fā)可以通過重新生成數(shù)據(jù)來實(shí)現(xiàn),或?qū)⑾惹爱a(chǎn)生的數(shù)據(jù)保存在緩沖區(qū)以供轉(zhuǎn)發(fā)。
MAC/PHY驅(qū)動(dòng)器
發(fā)送和接收以太網(wǎng)IP數(shù)據(jù)包時(shí),必須向uIP提供MAC/PHY驅(qū)動(dòng)程序代碼。API相當(dāng)簡(jiǎn)單:驅(qū)動(dòng)器必須發(fā)出信號(hào)表明輸入以太網(wǎng)的幀準(zhǔn)備就緒等待處理; 在線接收和傳送數(shù)據(jù)包時(shí)必須調(diào)用函數(shù)。這些調(diào)用由macphy.c實(shí)現(xiàn),從主事件循環(huán)調(diào)用。
本文中我們選擇了Microchip ENC28J60 SPI-Ethernet芯片。該集成MAC/PHY通過SPI和8kB的數(shù)據(jù)緩沖存儲(chǔ)器訪問。圖1為MAXQ2000和ENC28J60的連接電路。
圖1. MAXQ2000微控制器和SPI至以太網(wǎng)轉(zhuǎn)換之間的電路連接原理圖
實(shí)施uIP堆棧時(shí),假設(shè)整個(gè)IP數(shù)據(jù)報(bào)駐留在存儲(chǔ)器中。MAXQ2000有2kB的數(shù)據(jù)RAM,可能會(huì)用于其他任務(wù),所以從以太網(wǎng)復(fù)制多達(dá)1500字節(jié)MTU數(shù)據(jù)包是不明智的。相反,可以用最大段長(zhǎng)度的TCP特性來規(guī)定不接受超過500字節(jié)的字段,包括以太網(wǎng)鏈路層和IP頭。段的大小對(duì)于大多數(shù)應(yīng)用來說可以滿足大吞吐量的要求。此外,規(guī)定MAC/PHY放棄超過500字節(jié)的數(shù)據(jù)包。
項(xiàng)目示例源代碼包括位于文件macphy.c中的MAC/PHY驅(qū)動(dòng)程序代碼,相關(guān)文件包括macphy.h和macphy_priv.h。
示例應(yīng)用
本文的示例應(yīng)用程序在TCP端口23實(shí)現(xiàn)了改進(jìn)的回波服務(wù)器偵聽。首先,啟動(dòng)MAXQ2000的實(shí)時(shí)時(shí)鐘(RTC)作為事件定時(shí)。然后,初始化SPI硬件并加載MAC/PHY默認(rèn)設(shè)置。
然后應(yīng)用程序從PCB上的1-Wire® DS2502-E48檢索一個(gè)唯一的以太網(wǎng)硬件地址。必須將該硬件地址告知MAC/PHY驅(qū)動(dòng)器和uIP堆棧。執(zhí)行兩次調(diào)用即macphy_init()和uip_setethaddr()來設(shè)置這方面的信息。
調(diào)用uip_init()進(jìn)行uIP堆棧初始化,同時(shí)設(shè)置在編譯默認(rèn)IP地址、網(wǎng)絡(luò)掩碼、網(wǎng)關(guān)設(shè)置。
當(dāng)輸入連接完成后,向peer打印問候語(yǔ)。客戶端發(fā)送的文字以"回聲"的形式被送回,除了那些已經(jīng)逐字母轉(zhuǎn)換過的字。
單片機(jī)系統(tǒng)具有充足的資源執(zhí)行系統(tǒng)的主要功能。例如,在高爾夫球場(chǎng)灑水系統(tǒng)中,可以用中斷系統(tǒng)提供的實(shí)時(shí)時(shí)鐘在適當(dāng)?shù)臅r(shí)間打開和關(guān)閉噴灑閥門。
由于TCP/IP可以無縫處理超時(shí)和轉(zhuǎn)發(fā),因此網(wǎng)絡(luò)接口無實(shí)時(shí)限制。因超時(shí)而導(dǎo)致連接被刪除之前,TCP連接通常會(huì)花費(fèi)數(shù)分鐘至數(shù)小時(shí),因此,微控制器代碼可以管理網(wǎng)絡(luò)連接將其作為后臺(tái)任務(wù)。
結(jié)論
用免費(fèi)uIP堆棧很容易實(shí)現(xiàn)MAXQ2000聯(lián)網(wǎng)。uIP本身的事件驅(qū)動(dòng)性質(zhì)使其適合單片機(jī)系統(tǒng)的遠(yuǎn)程監(jiān)控和控制。
本應(yīng)用筆記描述了一個(gè)簡(jiǎn)單的應(yīng)用程序執(zhí)行過程,該程序可以擴(kuò)展以創(chuàng)建更復(fù)雜的系統(tǒng)。示例應(yīng)用程序的源代碼包括MAC/PHY驅(qū)動(dòng)程序,可點(diǎn)擊下載(ZIP, 112 kB)。
1-Wire是Maxim Integrated Products, Inc.的注冊(cè)商標(biāo)。
MAXQ是Maxim Integrated Products, Inc.的注冊(cè)商標(biāo)。
SPI是Motorola, Inc.的商標(biāo)。
評(píng)論
查看更多