<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機實現(xiàn)串口協(xié)議的網(wǎng)絡化

          單片機實現(xiàn)串口協(xié)議的網(wǎng)絡化

          作者: 時間:2011-08-02 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/172586.htm

            網(wǎng)卡芯片接收到以太網(wǎng)數(shù)據(jù)包后,存在CURR指向的頁面中。一個數(shù)據(jù)包可以占據(jù)一頁,也可以占據(jù)多頁。在接收包的包頭里,保存有該包的信息。包頭格式如表1:

            讀完這個包頭,我們就能知道本包的接收狀態(tài),包長度,以及下一個包的位置。在接收循環(huán)中,檢查中斷狀態(tài)寄存器ISR狀態(tài),發(fā)現(xiàn)有新包來,先讀取包頭信息,接著按照包頭指示讀取全包,然后改寫B(tài)NRY,再接著讀下一個包,這樣循環(huán),直到達到CURR位置。注意,一個包有可能占據(jù)接收緩沖區(qū)的首、尾頁面,此時須小心讀取。

            發(fā)送數(shù)據(jù)包比較簡單,將準備好的數(shù)據(jù)用DMA傳到發(fā)送緩沖區(qū),然后設置發(fā)送長度到TBCR1和TBCR0中,再設置傳輸開始頁面,即令TPSR=0x40,最后,使CR=0x26,就開始傳送了。

            傳送完成后要清掉中斷狀態(tài)寄存器ISR的發(fā)送完成標志。值得注意的是,發(fā)送包的包長度不能小于以太網(wǎng)規(guī)定的60byte,否則網(wǎng)卡不會將其發(fā)出。

            3 TCP/IP上的軟件設計

            3.1 TCPIP棧和鏈路層格式

            Internet上使用的是TCP/IP簇,由下至上包含四層:數(shù)據(jù)鏈路層、網(wǎng)絡層(IP)、傳輸層(TCP)和應用層。我們在上能的是數(shù)據(jù)鏈路層的功能,上層協(xié)議鑒于有限的資源,只能部分功能。TCP/IP協(xié)議棧如表2:

            數(shù)據(jù)鏈路層處于協(xié)議棧的最低層,傳輸以太網(wǎng)的物理傳輸幀,其幀格式如表3:

            數(shù)據(jù)鏈路層是所有TCP/IP包的基礎,所有它上層的包都被封裝到鏈路層幀的數(shù)據(jù)段中。鏈路層就是MAC對MAC的通信。

            3.2 PING命令在單片機上的

            PING是網(wǎng)絡層(IP層)的命令,網(wǎng)絡層就是IP對IP之間的通信。主機對一個目標IP地址發(fā)出狀態(tài)請求,后者發(fā)出回應,這樣,就可以用來檢查兩者之間的線路是否暢通。這里涉及到兩個網(wǎng)絡層協(xié)議:

            ARP和ICMP。首先,網(wǎng)絡中要知道目標IP的MAC地址,才能發(fā)送數(shù)據(jù)。為了獲取該地址,我們向整個網(wǎng)絡發(fā)送一個ARP廣播包,詢問該IP對應的MAC地址,然后目標IP應答,我們就從應答信息中得到MAC地址。其次,發(fā)送一個ICMP包,請求目標IP狀態(tài),目標IP回應,就完成網(wǎng)絡連接測試。在我們的實驗中,發(fā)出PING命令的是網(wǎng)絡中的PC主機,接收信號并產(chǎn)生響應的是我們的單片機系統(tǒng)。我們假定單片機系統(tǒng)控制的網(wǎng)卡的IP為192.168.0.176。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();