新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式TCP/IP協議棧在單片機上的實現

        嵌入式TCP/IP協議棧在單片機上的實現

        作者: 時間:2010-07-23 來源:網絡 收藏

        (1)CR=0x21,選擇頁零的寄存器同時使芯片處于停止模式,不會發送和接收數據包;
        (2)RCR=OxE0,設置接收結構寄存器,monitor方式,所有數據包都被拒絕;
        (3)TCR=OxE2,設置發送配置寄存器,工作在內部lookback模式;
        (4)PSTART=0x4C,接收緩沖區開始頁面地址;
        (5)PSTOP=0x80,接收緩沖區中止頁面地址;
        (6)BNRY=0x4C,接收緩沖區最后頁面指針;
        (7)TPSR=0x40,發送頁的起始頁地址,初始化為指向第一個發送緩沖區的頁即0x40;
        (8)ISR=0xFF,清除所有中斷標志;
        (9)DCR=OxC8,設置數據配置寄存器,使用FIFO緩存,普通模式,8位數據DMA;
        (10)IMR=Ox00,設置中斷屏蔽寄存器;屏蔽所有中斷;
        (11)CR=Ox61,選擇頁一的寄存器;
        (12)CURR=Ox4D,網卡寫內存的指針,指向當前正在寫的頁的下一頁,初始化時指和0x4C+1=0x4D;
        (13)設置多址寄存器MAR0~MAR5,均設置為Ox00;
        (14)CR=0x22,使網卡芯片開始工作;
        (15)設置網卡地址寄存器PAR0~PAR5;
        (16)CR=Ox21,選擇頁零的寄存器;
        (17)RCR=OxCC,設置接收結構寄存器,設置為使用接收緩沖區,跟外部網絡連接;
        (18)TCR=0xE0,設置發送配置寄存器,啟用CRC自動生成和自動校驗,工作在正常模式;
        (19)CR=0x22,使網卡芯片開始工作;
        (20)ISR=0xFF,清除所有中斷標志;
        2.2 棧的移植
        以太網幀的發送與接收屬于層中的最底層。發送前的封裝和接收時的協議分解都非常簡單。封裝時,只需在上層封裝數據前面添加14 B的以太網首部就可以了;接收到數據幀之后,根據頭信息中的幀類型字段判斷是否屬于包或ARP包,若是就繼續相應的協議分解,否則將被丟棄,不予處理。幀的接收工作由網卡自動完成,只需對相關的寄存器如PSTART,P8TOP,CURR和BNRY進行適當的初始化即可。以太網幀的發送過程如下:
        (1)初始化命令寄存器CR,啟動RTL8019AS;
        (2)設置數據配置寄存器DCR,以字節方式通信;
        (3)設置發送配置寄存器TCR,選擇RTL8019AS數據發送的工作方式;
        (4)設置遠程開始地址寄存器RSAR0(低位),RSARl(高位),指明遠程DMA操作時所傳送數據的起始地址;
        (5)設置遠程字節計數寄存器RBCR0(低位),RBCRl(高位),指明遠程DMA操作時所傳送的數據的字節數;
        (6)設置命令寄存器CR,開始遠程DMA寫操作。RTL8019AS自動將數據I/O端口的數據寫入其緩沖區中;
        (7)開始向數據I/O端口傳送需要發送的數據;
        (8)數據傳送完畢后,設置發送頁起始地址寄存器TBCR,指明待發送數據的起始地址;
        (9)設置發送字節計數寄存器TBCR0(低位),TBCRl(高位),指明待發送數據的字節數;
        (10)設置命令寄存器CR,啟動本地DMA操作。把緩沖區中的數據發送到網絡上;
        (11)結束。
        需要指出的是,數據在發送前必須先由上到下進行層層封裝才能正確地發送出去,同時,接收到的數據包還必須自下而上層層解包才能為用戶所識別,即協議分解。在協議編程中,數據封裝與協議分解互為逆過程。這就是說,必須在數據采集子系統中協議才能完成數據的/IP處理。
        2.3 客戶端和服務器端程序的設計
        分別設計客戶端和服務器端程序。適應于不同的工作場合。在面向連接的TCP協議中,服務器和客戶機開始通信之前必須首先建立連接。在連接之前,服務器程序必須正在運行并處于監聽模式,等待客戶端的連接。TCP的連接是通過3次握手協議來完成的。首先,客戶端發送1個SYN標志位的TCP段給服務器,其帶有所選擇段的初始序號。服務器端收到該報文段后,以1個帶有SYN標志的段作為應答,其中也給出根據本身情況選擇的初始序號,并包含對客戶端的確認。
        而客戶端收到服務器端的應答后,再次送回1個報文段,其中帶有對服務器端SYN的確認。這樣雙方的連接就建立了,以后就能開始傳送數據。同樣終止1條TCP連接實際上也需3次握手過程。

        3 應用系統
        為了驗證系統的可行性,應用VB開發了接口程序,構建了軟硬件測試平臺,用來設置網卡的配置參數并實現數據的發送與接收。所有配置參數包括(本地IP地址、服務器端IP地址、端口號、網卡物理地址、ping的IP地址、串口號等)都能通過串口動態地更改。系統能實現Ping的功能,以方便檢查以太網的狀態。
        3.1 參數設置界面
        用串口線將測試板(數據采集和控制系統模塊,下同)與計算機連接起來,選擇好串口號,然后按“連接機”按鈕,連接狀態工具欄里出現“已經連接”,說明測試板與計算機已經連接上,然后就可以修改配置參數了。在參數設置欄中填寫正確的參數值后,按“設定”按鈕,接收狀態欄中會提示參數設置成功,然后按測試板上的復位鍵,網卡的參數配置就被寫到了X5045中。參數設置界面如圖3所示。
        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        tcp/ip相關文章:tcp/ip是什么




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沙洋县| 乾安县| 忻城县| 柳林县| 阿尔山市| 蛟河市| 广州市| 内乡县| 温泉县| 邢台县| 临高县| 秭归县| 自治县| 西林县| 美姑县| 新宁县| 孙吴县| 滕州市| 海林市| 桃园市| 卓尼县| 临澧县| 托克托县| 南岸区| 济阳县| 峨山| 汶上县| 新闻| 东平县| 青神县| 高平市| 鲁甸县| 太原市| 安徽省| 宣威市| 巴塘县| 定西市| 乐清市| 德州市| 长垣县| 会昌县|