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