當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式TCP/IP協(xié)議棧在單片機(jī)上的實(shí)現(xiàn)

隨著嵌入式設(shè)備與網(wǎng)絡(luò)的日益結(jié)合,在單片機(jī)系統(tǒng)中引入TCPIP協(xié)議棧,以支持單片機(jī)接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域的一個(gè)重要方向。在此對(duì)基于SST89E516RD單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)方法給予討論。選用SST89E516RD單片機(jī)實(shí)現(xiàn)了在線仿真和編程的功能,大大節(jié)約了開(kāi)發(fā)成本。采用VB 6.0語(yǔ)言與Window 98/2000/XP等為軟件開(kāi)發(fā)平臺(tái),對(duì)系統(tǒng)進(jìn)行了測(cè)試。經(jīng)過(guò)幾個(gè)月的軟硬件測(cè)試表明:系統(tǒng)設(shè)計(jì)合理、穩(wěn)定可靠,已基本實(shí)現(xiàn)了最初的設(shè)計(jì)目標(biāo)。對(duì)其他類似系統(tǒng)移植該項(xiàng)技術(shù)奠定了基礎(chǔ),有很好的參考價(jià)值。

1 系統(tǒng)硬件實(shí)現(xiàn)
    整個(gè)系統(tǒng)以SST89E516RD單片機(jī)為核心,通過(guò)RTL8019AS以太網(wǎng)控制芯片實(shí)現(xiàn)遠(yuǎn)程通信。串口完成網(wǎng)卡參數(shù)的修改、在線仿真,在系統(tǒng)中還使用X5045作為外部擴(kuò)展的E2PROM,用來(lái)存儲(chǔ)IP地址、物理地址以及網(wǎng)卡的其他配置信息,同時(shí)X5045還具有電壓監(jiān)控、看門狗定時(shí)器、上電復(fù)位三種功能,使用X5045監(jiān)控系統(tǒng)的運(yùn)行過(guò)程,當(dāng)系統(tǒng)不穩(wěn)定時(shí)可以進(jìn)行有效地復(fù)位。圖1為系統(tǒng)硬件結(jié)構(gòu)圖。



2 系統(tǒng)軟件實(shí)現(xiàn)
    系統(tǒng)軟件主要包括客戶端和服務(wù)器端軟件的設(shè)計(jì),主要有以下幾部分內(nèi)容:
    (1)RTL8019AS的初始化和驅(qū)動(dòng)程序的設(shè)計(jì);
    (2)數(shù)據(jù)幀的發(fā)送和接收子程序;
    (3)TCP/IP協(xié)議棧程序的設(shè)計(jì);
    (4)客戶端和服務(wù)器端程序的設(shè)計(jì);
    (5)X5045看門狗和E2PROM程序的設(shè)計(jì)。
    系統(tǒng)的主程序流程圖如圖2所示。


    由圖2可知,系統(tǒng)首先完成對(duì)單片機(jī)定時(shí)器、串口、網(wǎng)卡芯片和以太網(wǎng)等部分的初始化,然后進(jìn)入以太網(wǎng)處理部分的主程序,通過(guò)定時(shí)器中斷進(jìn)行網(wǎng)口數(shù)據(jù)的超時(shí)出錯(cuò)處理,并完成TCP定時(shí)器保活和ARP表生存時(shí)間的更新。
2.1 系統(tǒng)初始化
    所謂初始化和驅(qū)動(dòng)程序是指實(shí)模式下一組硬件芯片的驅(qū)動(dòng)子程序,它們屏蔽了底層硬件處理細(xì)節(jié),同時(shí)向上層軟件提供與硬件無(wú)關(guān)的接口。主要包括定時(shí)器初始化,初始化PING表、ARP表,初始化TCP,RTL8019AS的初始化等。RTL8019AS的初始化主要包括網(wǎng)卡的復(fù)位和網(wǎng)卡寄存器的初始化。RTL8019AS的初始化主要包括網(wǎng)卡的復(fù)位和網(wǎng)卡寄存器的初始化。RTL8019AS內(nèi)部寄存器有4頁(yè),與NE2000兼容的有3頁(yè),第4頁(yè)不用。頁(yè)選擇由CR寄存器的PSl,PS0位確定。在零頁(yè)寄存器中可以設(shè)置接收、發(fā)送狀態(tài)配置以及發(fā)送緩存區(qū)的起始頁(yè)與接收緩存區(qū)起止頁(yè)地址等;在1頁(yè)寄存器中可以設(shè)置以太網(wǎng)接口的MAC地址和組播地址。對(duì)網(wǎng)卡的初始化就是對(duì)相關(guān)寄存器初始化,這些寄存器包括CR,RCR,TC-R,PSTART,PSTOP,BNRY,TPSR,ISR,DCR,IMR,CURR,PAGO~PAG5,MAR0~MAR5等。初始化過(guò)程如下:[!--empirenews.page--]
    (1)CR=0x21,選擇頁(yè)零的寄存器同時(shí)使芯片處于停止模式,不會(huì)發(fā)送和接收數(shù)據(jù)包;
    (2)RCR=OxE0,設(shè)置接收結(jié)構(gòu)寄存器,monitor方式,所有數(shù)據(jù)包都被拒絕;
    (3)TCR=OxE2,設(shè)置發(fā)送配置寄存器,工作在內(nèi)部lookback模式;
    (4)PSTART=0x4C,接收緩沖區(qū)開(kāi)始頁(yè)面地址;
    (5)PSTOP=0x80,接收緩沖區(qū)中止頁(yè)面地址;
    (6)BNRY=0x4C,接收緩沖區(qū)最后頁(yè)面指針;
    (7)TPSR=0x40,發(fā)送頁(yè)的起始頁(yè)地址,初始化為指向第一個(gè)發(fā)送緩沖區(qū)的頁(yè)即0x40;
    (8)ISR=0xFF,清除所有中斷標(biāo)志;
    (9)DCR=OxC8,設(shè)置數(shù)據(jù)配置寄存器,使用FIFO緩存,普通模式,8位數(shù)據(jù)DMA;
    (10)IMR=Ox00,設(shè)置中斷屏蔽寄存器;屏蔽所有中斷;
    (11)CR=Ox61,選擇頁(yè)一的寄存器;
    (12)CURR=Ox4D,網(wǎng)卡寫(xiě)內(nèi)存的指針,指向當(dāng)前正在寫(xiě)的頁(yè)的下一頁(yè),初始化時(shí)指和0x4C+1=0x4D;
    (13)設(shè)置多址寄存器MAR0~MAR5,均設(shè)置為Ox00;
    (14)CR=0x22,使網(wǎng)卡芯片開(kāi)始工作;
    (15)設(shè)置網(wǎng)卡地址寄存器PAR0~PAR5;
    (16)CR=Ox21,選擇頁(yè)零的寄存器;
    (17)RCR=OxCC,設(shè)置接收結(jié)構(gòu)寄存器,設(shè)置為使用接收緩沖區(qū),跟外部網(wǎng)絡(luò)連接;
    (18)TCR=0xE0,設(shè)置發(fā)送配置寄存器,啟用CRC自動(dòng)生成和自動(dòng)校驗(yàn),工作在正常模式;
    (19)CR=0x22,使網(wǎng)卡芯片開(kāi)始工作;
    (20)ISR=0xFF,清除所有中斷標(biāo)志;
2.2 TCP/IP協(xié)議棧的移植
    以太網(wǎng)幀的發(fā)送與接收屬于協(xié)議層中的最底層。發(fā)送前的協(xié)議封裝和接收時(shí)的協(xié)議分解都非常簡(jiǎn)單。封裝時(shí),只需在上層封裝數(shù)據(jù)前面添加14 B的以太網(wǎng)首部就可以了;接收到數(shù)據(jù)幀之后,根據(jù)頭信息中的幀類型字段判斷是否屬于IP包或ARP包,若是就繼續(xù)相應(yīng)的協(xié)議分解,否則將被丟棄,不予處理。幀的接收工作由網(wǎng)卡自動(dòng)完成,只需對(duì)相關(guān)的寄存器如PSTART,P8TOP,CURR和BNRY進(jìn)行適當(dāng)?shù)某跏蓟纯?。以太網(wǎng)幀的發(fā)送過(guò)程如下:
    (1)初始化命令寄存器CR,啟動(dòng)RTL8019AS;
    (2)設(shè)置數(shù)據(jù)配置寄存器DCR,以字節(jié)方式通信;
    (3)設(shè)置發(fā)送配置寄存器TCR,選擇RTL8019AS數(shù)據(jù)發(fā)送的工作方式;
    (4)設(shè)置遠(yuǎn)程開(kāi)始地址寄存器RSAR0(低位),RSARl(高位),指明遠(yuǎn)程DMA操作時(shí)所傳送數(shù)據(jù)的起始地址;
    (5)設(shè)置遠(yuǎn)程字節(jié)計(jì)數(shù)寄存器RBCR0(低位),RBCRl(高位),指明遠(yuǎn)程DMA操作時(shí)所傳送的數(shù)據(jù)的字節(jié)數(shù);
    (6)設(shè)置命令寄存器CR,開(kāi)始遠(yuǎn)程DMA寫(xiě)操作。RTL8019AS自動(dòng)將數(shù)據(jù)I/O端口的數(shù)據(jù)寫(xiě)入其緩沖區(qū)中;
    (7)開(kāi)始向數(shù)據(jù)I/O端口傳送需要發(fā)送的數(shù)據(jù);
    (8)數(shù)據(jù)傳送完畢后,設(shè)置發(fā)送頁(yè)起始地址寄存器TBCR,指明待發(fā)送數(shù)據(jù)的起始地址;
    (9)設(shè)置發(fā)送字節(jié)計(jì)數(shù)寄存器TBCR0(低位),TBCRl(高位),指明待發(fā)送數(shù)據(jù)的字節(jié)數(shù);
    (10)設(shè)置命令寄存器CR,啟動(dòng)本地DMA操作。把緩沖區(qū)中的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上;
    (11)結(jié)束。
    需要指出的是,數(shù)據(jù)在發(fā)送前必須先由上到下進(jìn)行層層封裝才能正確地發(fā)送出去,同時(shí),接收到的數(shù)據(jù)包還必須自下而上層層解包才能為用戶所識(shí)別,即協(xié)議分解。在協(xié)議編程實(shí)現(xiàn)中,數(shù)據(jù)封裝與協(xié)議分解互為逆過(guò)程。這就是說(shuō),必須在數(shù)據(jù)采集子系統(tǒng)中實(shí)現(xiàn)嵌入式TCP/IP協(xié)議才能完成數(shù)據(jù)的TCP/IP處理。
2.3 客戶端和服務(wù)器端程序的設(shè)計(jì)
    分別設(shè)計(jì)客戶端和服務(wù)器端程序。適應(yīng)于不同的工作場(chǎng)合。在面向連接的TCP協(xié)議中,服務(wù)器和客戶機(jī)開(kāi)始通信之前必須首先建立連接。在連接之前,服務(wù)器程序必須正在運(yùn)行并處于監(jiān)聽(tīng)模式,等待客戶端的連接。TCP的連接是通過(guò)3次握手協(xié)議來(lái)完成的。首先,客戶端發(fā)送1個(gè)SYN標(biāo)志位的TCP段給服務(wù)器,其帶有所選擇段的初始序號(hào)。服務(wù)器端收到該報(bào)文段后,以1個(gè)帶有SYN標(biāo)志的段作為應(yīng)答,其中也給出根據(jù)本身情況選擇的初始序號(hào),并包含對(duì)客戶端的確認(rèn)。
    而客戶端收到服務(wù)器端的應(yīng)答后,再次送回1個(gè)報(bào)文段,其中帶有對(duì)服務(wù)器端SYN的確認(rèn)。這樣雙方的連接就建立了,以后就能開(kāi)始傳送數(shù)據(jù)。同樣終止1條TCP連接實(shí)際上也需3次握手過(guò)程。

3 應(yīng)用系統(tǒng)實(shí)現(xiàn)
    為了驗(yàn)證系統(tǒng)的可行性,應(yīng)用VB開(kāi)發(fā)了接口程序,構(gòu)建了軟硬件測(cè)試平臺(tái),用來(lái)設(shè)置網(wǎng)卡的配置參數(shù)并實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收。所有配置參數(shù)包括(本地IP地址、服務(wù)器端IP地址、端口號(hào)、網(wǎng)卡物理地址、ping的IP地址、串口號(hào)等)都能通過(guò)串口動(dòng)態(tài)地更改。系統(tǒng)能實(shí)現(xiàn)Ping的功能,以方便檢查以太網(wǎng)的狀態(tài)。
3.1 參數(shù)設(shè)置界面
    用串口線將測(cè)試板(數(shù)據(jù)采集和控制系統(tǒng)模塊,下同)與計(jì)算機(jī)連接起來(lái),選擇好串口號(hào),然后按“連接單片機(jī)”按鈕,連接狀態(tài)工具欄里出現(xiàn)“已經(jīng)連接”,說(shuō)明測(cè)試板與計(jì)算機(jī)已經(jīng)連接上,然后就可以修改配置參數(shù)了。在參數(shù)設(shè)置欄中填寫(xiě)正確的參數(shù)值后,按“設(shè)定”按鈕,接收狀態(tài)欄中會(huì)提示參數(shù)設(shè)置成功,然后按測(cè)試板上的復(fù)位鍵,網(wǎng)卡的參數(shù)配置就被寫(xiě)到了X5045中。參數(shù)設(shè)置界面如圖3所示。[!--empirenews.page--]


3.2 數(shù)據(jù)收發(fā)測(cè)試界面
    分別測(cè)試客戶端和服務(wù)器端軟件通信是否正常。
    (1)服務(wù)器端程序的測(cè)試
    打開(kāi)客戶端測(cè)試界面,如圖4所示,設(shè)置連接IP地址為192.168.O.44(該地址必須與服務(wù)器端的IP地址一致),設(shè)置連接端口號(hào)為3330(該端口號(hào)必須與服務(wù)器端端口號(hào)一致)。將作為服務(wù)器端的程序燒入到測(cè)試板的微處理器中,通過(guò)圖3修改配置界面,將服務(wù)器端需要的參數(shù)寫(xiě)入X5045,參數(shù)配置包括;“單片機(jī)IP地址”(指的是測(cè)試板自身的IP地址)為192.168.O.44,“服務(wù)器端IP地址”可以不用設(shè)置(因?yàn)闇y(cè)試板本身就即服務(wù)器端);如果是新網(wǎng)卡芯片,還需要設(shè)置MAC地址,這里設(shè)為121314151617(一般選擇任意的12位數(shù)即可);“服務(wù)器端口號(hào)”設(shè)為3330(必須與客戶端一致);網(wǎng)關(guān)設(shè)為192.168.O.1(要與上位機(jī)保持在同一個(gè)網(wǎng)段內(nèi))。設(shè)置好所有參數(shù)后,可以進(jìn)行數(shù)據(jù)的收發(fā)了。
    (2)客戶端程序的測(cè)試
    打開(kāi)服務(wù)器端測(cè)試界面,如圖5所示。


    設(shè)置連接IP地址為192.168.0.44(該地址指的是上位機(jī)自身的IP,必須與客戶端設(shè)置的“服務(wù)器端IP地址”一致),設(shè)置連接端口號(hào)為3330(該端口號(hào)須與客戶端設(shè)置的“服務(wù)器端口號(hào)”一致)。將作為客戶端的程序燒人到系統(tǒng)的微處理器中,參數(shù)配置:“服務(wù)器IP地址”(指的是上位機(jī)的IP地址)為192.168.0.44,“單片機(jī)IP地址”可以不用設(shè)置(因?yàn)橄到y(tǒng)僅作為客戶端),“服務(wù)器端口號(hào)”設(shè)為3330(必須與客戶端一致),網(wǎng)關(guān)設(shè)為192.168.0.1(要與上位機(jī)保持在同一個(gè)網(wǎng)段內(nèi))。設(shè)置好所有參數(shù)之后,即可進(jìn)行數(shù)據(jù)收發(fā)。服務(wù)器端的數(shù)據(jù)可以被發(fā)送到串口,同樣,數(shù)據(jù)也可以從串口發(fā)送到服務(wù)器端。測(cè)試表明:上位機(jī)通過(guò)以太網(wǎng)與系統(tǒng)之間的通信正常。

4 結(jié)語(yǔ)
    在此實(shí)現(xiàn)了TCP/IP協(xié)議棧單片機(jī)上的移植,完成了系統(tǒng)的硬件電路和相關(guān)嵌入式軟件的設(shè)計(jì),應(yīng)用VB開(kāi)發(fā)了上位機(jī)修改參數(shù)界面,通過(guò)串口完成對(duì)網(wǎng)卡等參數(shù)的配置和修改,解決了數(shù)據(jù)包的超時(shí)重發(fā)、定時(shí)?;?、參數(shù)配置、硬件看門狗復(fù)位等一系列問(wèn)題。實(shí)驗(yàn)表明,整套程序比較穩(wěn)定,收發(fā)數(shù)據(jù)正常,TCP超時(shí)重傳效果很好。經(jīng)過(guò)近1個(gè)月的測(cè)試,沒(méi)有出現(xiàn)任何丟包和堵塞的現(xiàn)象。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉