新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式TCP/IP協(xié)議棧在單片機(jī)上的實(shí)現(xiàn)

        嵌入式TCP/IP協(xié)議棧在單片機(jī)上的實(shí)現(xiàn)

        作者: 時(shí)間:2010-07-23 來(lái)源:網(wǎng)絡(luò) 收藏

        (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 棧的移植
        以太網(wǎng)幀的發(fā)送與接收屬于層中的最底層。發(fā)送前的封裝和接收時(shí)的協(xié)議分解都非常簡(jiǎn)單。封裝時(shí),只需在上層封裝數(shù)據(jù)前面添加14 B的以太網(wǎng)首部就可以了;接收到數(shù)據(jù)幀之后,根據(jù)頭信息中的幀類型字段判斷是否屬于包或ARP包,若是就繼續(xù)相應(yīng)的協(xié)議分解,否則將被丟棄,不予處理。幀的接收工作由網(wǎng)卡自動(dòng)完成,只需對(duì)相關(guān)的寄存器如PSTART,P8TOP,CURR和BNRY進(jìn)行適當(dāng)?shù)某跏蓟纯伞R蕴W(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ù)據(jù)封裝與協(xié)議分解互為逆過(guò)程。這就是說(shuō),必須在數(shù)據(jù)采集子系統(tǒng)中協(xié)議才能完成數(shù)據(jù)的/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)
        為了驗(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所示。
        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

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




        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 革吉县| 潮安县| 苗栗市| 乐亭县| 达尔| 德安县| 定兴县| 新安县| 伽师县| 闸北区| 安丘市| 英德市| 泽库县| 麻阳| 淮北市| 瑞昌市| 南漳县| 若尔盖县| 汉中市| 萨迦县| 西峡县| 贵港市| 高密市| 漳州市| 宁蒗| 蒙山县| 余干县| 多伦县| 金川县| 大洼县| 加查县| 木兰县| 永仁县| 多伦县| 临沭县| 册亨县| 乌鲁木齐市| 镇远县| 丰原市| 新竹市| 肥东县|