<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產品分類

      當前位置: 首頁 > 傳感測量產品 > 數據采集產品 > 工控機

      類型分類:
      科普知識
      數據分類:
      工控機

      TFTP協議在嵌入式系統中的實現

      發布日期:2022-04-18 點擊率:73

          隨著Internet和PC時代的到來,嵌入式系統成為當前IT產業的焦點之一。在這種形勢下,家用電器等嵌入式設備的Internet網絡化就成了目前網絡發展的一個重要方向和必然結果。
          本文基于ARM核處理器的多嵌入式應用綜合開發平臺,對嵌入式設備聯網的TCP/IP協議進行了討論研究。
          1.引言
        
          嵌入式系統是繼IT網絡技術之后,又一個新的技術發展方向。由于嵌入式系統具有體積小、性能強、功耗低、可靠性高以及面向行業應用的突出特征,目前己經廣泛地應用于軍事國防、消費電子、網絡通信、工業控制等各個領域。隨著計算機技術與通信技術的發展,嵌入式系統的研究與開發也有著越來越重要的實際意義。而ARM是業界領先的32位嵌入式RISC處理器技術提供商,占領了大約75%的市場。它可為一個完整系統的開發提供全面的技術支持,技術具有性能高、成本低和能耗省的特點。ARM的微處理器核心正迅速地成為便攜式通信設備、手持計算、多媒體數字消費和嵌入式解決方案市場中MSC批量生產的標準。
        
          在本項目中利用SAMSUNG公司的S3C44B0X與網絡控制芯片的結合實現了系統通過TFTP協議從PC機下載資源的功能。
          2.TFTP協議介紹

          a.TFTP與各種協議關系
        
          TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。TFTP承載在UDP上,提供不可靠的數據流傳輸服務,不提供存取授權與認證機制,使用超時重傳方式來保證數據的到達。與FTP相比,TFTP協議要簡單得多?,F在最普遍使用的是第二版TFTP(TFTP Version 2,RFC1350)使用UDP 的67端口。

      圖1 TFTP協議包頭次序
          因為TFTP使用UDP,而UDP又使用IP,IP可以還使用其它本地通信方法(一般為以太網)。因此一個TFTP包中會有以下幾段:本地媒介頭,IP頭,數據報頭,TFTP頭,剩下的就是TFTP數據了,具體見圖(1)。TFTP在IP頭中不指定任何數據,但是它使用UDP中的源和目標端口以及包長度域。由TFTP使用的包標記(TID)在這里被用做端口,因此TID必須介于0到65,535之間。TFTP頭中包括兩字節的操作碼,這個碼指出了包的類型下面我們看看大體上的TFTP包格式。
          b. TFTP包介紹

            TFTP支持五種類型的包,分別如下:
            1 .Read request (RRQ)
            2 .Write request (WRQ)
            3 .Data (DATA)
            4 .Acknowledgment (ACK)
            5 .Error (ERROR)
            圖(2)顯示了TFTP各種包在IP包中的位置:

      圖2 TFTP協議數據包格式
          3.硬件實現
        
          系統使用了RTL8019AS 10M ISA網卡芯片接入以太網。RTL8019AS是一款性價比很高的網卡芯片:NE2000兼容,軟件移植性好;接口簡單不用轉換芯片如PCI-ISA橋;價格便宜、帶寬充裕、較長一段時間內不會停產。8019有3種配置模式:跳線方式、即插即用P&P方式、串行Flash配置方式。串行模式不與NE2000兼容,P&P模式用在PC機中,這里用不上。只剩下跳線配置模式可用。系統的MCU選擇的三星公司的S3C44B0X芯片,S3C44B0x是基于ARM7TDMI核的處理器,沒有MMU,可以源代碼級跟蹤調試。44B0與RTL8019的電路設計相對來說比較簡單,只需要連接數據線、地址選通、中斷等信號線。簡略電路圖如圖(3):

                 

      圖3 RTL8019與S3C440X的接口電路
          4.軟件設計

            a.RTL8019驅動程序
        RTL8019驅動程序主要包括3個函數 :
        i..RTL8019 初始化函數。要對網卡的工作參數進行設置.以使網卡開始工作。
        其主要工作包括:復位網絡芯片,設置MAC地址,設置組播地址,設置DMA傳輸參數等等。
        ii.收包函數:從網絡中接收數據到緩沖區。
        iii.發包函數:從緩沖區向網絡中發送數據。
      b.協議棧的實現
        TFTP的實現其實就是根據各種協議,對數據打包(當發送數據時)和解包(當接收數據時)。主函數主要部分如下

      eth_init();//其主要是清空ARP緩沖區.其中調用了一個功能函數[2]
      arp_init();//清零
      Mac_init();//設置MAC地址
      ip_init(ip); //主要功能:設置ip地址
      udp_init(); //初始化UDP協議
      while (1) net_handle();//處理函數
        
          前5個函數主要是初始化工作接下來的int net_handle(void)就要開始進入網絡傳輸了,這里就是協議棧的核心了:

      skb = alloc_skb(ETH_frame_LEN);//選擇一個 SKB
      if (eth_rcv(skb) != -1) {
      eth_hdr = (struct ethhdr *)(skb->data);
      skb_pull(skb, ETH_HLEN);
      if (ntohs(eth_hdr->h_proto) == ETH_P_ARP)//是否為ARP包
      arp_rcv_packet(skb); //是則進行ARP包應答
      else if(ntohs(eth_hdr->h_proto) == ETH_P_IP) //是否為IP包
      ip_rcv_packet(skb);//是則進行IP包處理
        
          如果從MAC層收到一個以太網幀,先把收到的以太網幀轉變為相應的幀結構再去掉其以太網偵頭部, 其中skb_pop(skb, ETH_HLEN)把數據指針往后移動ETH_HLEN個字節,而且真正的數據長度也做相應的變化..然后根據幀中的協議字段判斷其上層為什么協議.這里幀格式采用的是RFC894,如果其上層為arp協議,將去掉以太網頭部的數據交由ARP處理,同樣如果其上層協議為IP,也做類似的處理. arp_rcv_packet(skb)只處理的ARP請求消息,如果發現其為ARP請求,則發送ARP應答. 接下來就是把這個ARP應答包發出去,發送了ARP應答后把剛才請求的者的MAC地址和其IP保存在本機中,其實現采用了簡單循環區,利用數組.首先檢查緩沖區中有無此項,如果有則直接用該項的索引,如果沒有則重新分配索引, 把傳進來的MAC 和IP 賦給新分配的索引 i,。
        
          如果MAC層發現收到的包上層協議為IP,則執行[1]:
      if(ntohs(eth_hdr->h_proto) == ETH_P_IP)
      ip_rcv_packet(skb);
        
          首先檢查接受者是不是本機IP,通過檢查后,去掉IP頭部,再檢查其上層協議類型,如果為UDP,則將包轉交給上層的UDP協議處理其中udp_rcv_packet(skb)先去掉UDP頭部,再檢查其對應的上層協議,這里只實現了TFTP協議,對應語句為skb_pop(skb, sizeof(struct udphdr));
      if (ntohs(udp_hdr->dest) == TFTP)
      tftp_rcv_packet(skb);

          其中tftp_rcv_packet(skb)根據TFTP頭部中操作類型而采取不同的動作.對應代碼為:
      switch (ntohs(tftp_hdr->th_opcode)) {
      /* 只處理寫請求和DATA */
      case WRQ:
      tftp_rcv_wrq(skb); break;
      case data:
      tftp_rcv_data(skb); break;
      …}
        
          其中tftp_rcv_wrq(skb)先得到請求者的IP和PORT,再發送塊編號為0的ACK包.然后為數據傳輸做些初始化工作,具體為設置接受緩沖區和接受數據長度。:因為TFTP是包裝在UDP里面的,所以首先欲留出UDP頭部的空間,這里要注意的是在UDP層除了為自己留空間外其又會欲留出IP頭的空間,而在IP層除了為自己留空間外其又會欲留出MAC頭的空間.如此便留出了整個協議棧所要求的頭部空間.調用關系為
        udp_skb_reserve(skb)—ip_skb_reserve(skb)—eth_skb_reserve(skb);
        
          然后該函數按照ACK包的格式(在

      下一篇: PLC、DCS、FCS三大控

      上一篇: 索爾維全系列Solef?PV

      主站蜘蛛池模板: 天天综合天天看夜夜添狠狠玩| 亚洲亚洲人成综合网络| 亚洲国产免费综合| 香蕉久久综合精品首页| 亚洲综合一区二区精品导航| 久久精品水蜜桃av综合天堂| 亚洲av无码兔费综合| 亚洲综合国产精品第一页| 色综合天天色综合| 色噜噜狠狠色综合日日| 天天躁日日躁狠狠躁综合| 国产尹人香蕉综合在线电影| 狠狠色噜噜狠狠狠狠色综合久AV| 国产91久久综合| 亚洲欧洲国产综合| 伊人不卡久久大香线蕉综合影院| 玖玖爱zh综合伊人久久| 亚洲色婷婷综合久久| 69国产成人综合久久精品91 | 亚洲综合无码一区二区| 国产成人综合色在线观看网站 | 精品国产国产综合精品| 一本色综合网久久| 久久婷婷国产综合精品| 亚洲国产美国国产综合一区二区| 色综合色综合色综合| 婷婷五月综合色中文字幕| 色偷偷尼玛图亚洲综合| 久久狠狠色狠狠色综合| 国产亚洲综合色就色| 综合三区后入内射国产馆| 色偷偷91久久综合噜噜噜噜| 综合五月激情五月开心婷婷| 日日AV色欲香天天综合网| 久久综合精品不卡一区二区| 国产天堂一区二区综合| 狠狠色丁香婷婷久久综合| 精品久久综合一区二区| 色综合久久综合中文小说| 人人狠狠综合久久亚洲| 国产精品综合一区二区三区|