技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > TFTP協(xié)議在嵌入式系統(tǒng)中的實現(xiàn)

TFTP協(xié)議在嵌入式系統(tǒng)中的實現(xiàn)

時間:2007-12-04 17:26:00來源:zhangting

導(dǎo)語:?本文基于ARM核處理器的多嵌入式應(yīng)用綜合開發(fā)平臺,對嵌入式設(shè)備聯(lián)網(wǎng)的TCP/IP協(xié)議進(jìn)行了討論研究。
摘要: 隨著Internet和PC時代的到來,嵌入式系統(tǒng)成為當(dāng)前IT產(chǎn)業(yè)的焦點(diǎn)之一。在這種形勢下,家用電器等嵌入式設(shè)備的Internet網(wǎng)絡(luò)化就成了目前網(wǎng)絡(luò)發(fā)展的一個重要方向和必然結(jié)果。本文基于ARM核處理器的多嵌入式應(yīng)用綜合開發(fā)平臺,對嵌入式設(shè)備聯(lián)網(wǎng)的TCP/IP協(xié)議進(jìn)行了討論研究。 關(guān)鍵字:嵌入式系統(tǒng) TFTP協(xié)議 ARM 1.引言 嵌入式系統(tǒng)是繼IT網(wǎng)絡(luò)技術(shù)之后,又一個新的技術(shù)發(fā)展方向。由于嵌入式系統(tǒng)具有體積小、性能強(qiáng)、功耗低、可靠性高以及面向行業(yè)應(yīng)用的突出特征,目前己經(jīng)廣泛地應(yīng)用于軍事國防、消費(fèi)電子、網(wǎng)絡(luò)通信、工業(yè)控制等各個領(lǐng)域。隨著計算機(jī)技術(shù)與通信技術(shù)的發(fā)展,嵌入式系統(tǒng)的研究與開發(fā)也有著越來越重要的實際意義。而ARM是業(yè)界領(lǐng)先的32位嵌入式RISC處理器技術(shù)提供商,占領(lǐng)了大約75%的市場。它可為一個完整系統(tǒng)的開發(fā)提供全面的技術(shù)支持,技術(shù)具有性能高、成本低和能耗省的特點(diǎn)。ARM的微處理器核心正迅速地成為便攜式通信設(shè)備、手持計算、多媒體數(shù)字消費(fèi)和嵌入式解決方案市場中MSC批量生產(chǎn)的標(biāo)準(zhǔn)。 在本項目中利用SAMSUNG公司的S3C44B0X與網(wǎng)絡(luò)控制芯片的結(jié)合實現(xiàn)了系統(tǒng)通過TFTP協(xié)議從PC機(jī)下載資源的功能。 2.TFTP協(xié)議介紹 a.TFTP與各種協(xié)議關(guān)系 TFTP(Trivial File Transfer Protocol,簡單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個用來在客戶機(jī)與服務(wù)器之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。TFTP承載在UDP上,提供不可靠的數(shù)據(jù)流傳輸服務(wù),不提供存取授權(quán)與認(rèn)證機(jī)制,使用超時重傳方式來保證數(shù)據(jù)的到達(dá)。與FTP相比,TFTP協(xié)議要簡單得多?,F(xiàn)在最普遍使用的是第二版TFTP(TFTP Version 2,RFC1350)使用UDP 的67端口。
圖1 TFTP協(xié)議包頭次序
因為TFTP使用UDP,而UDP又使用IP,IP可以還使用其它本地通信方法(一般為以太網(wǎng))。因此一個TFTP包中會有以下幾段:本地媒介頭,IP頭,數(shù)據(jù)報頭,TFTP頭,剩下的就是TFTP數(shù)據(jù)了,具體見圖(1)。TFTP在IP頭中不指定任何數(shù)據(jù),但是它使用UDP中的源和目標(biāo)端口以及包長度域。由TFTP使用的包標(biāo)記(TID)在這里被用做端口,因此TID必須介于0到65,535之間。TFTP頭中包括兩字節(jié)的操作碼,這個碼指出了包的類型下面我們看看大體上的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協(xié)議數(shù)據(jù)包格式
3.硬件實現(xiàn) 系統(tǒng)使用了RTL8019AS 10M ISA網(wǎng)卡芯片接入以太網(wǎng)。RTL8019AS是一款性價比很高的網(wǎng)卡芯片:NE2000兼容,軟件移植性好;接口簡單不用轉(zhuǎn)換芯片如PCI-ISA橋;價格便宜、帶寬充裕、較長一段時間內(nèi)不會停產(chǎn)。8019有3種配置模式:跳線方式、即插即用P&P方式、串行Flash配置方式。串行模式不與NE2000兼容,P&P模式用在PC機(jī)中,這里用不上。只剩下跳線配置模式可用。系統(tǒng)的MCU選擇的三星公司的S3C44B0X芯片,S3C44B0x是基于ARM7TDMI核的處理器,沒有MMU,可以源代碼級跟蹤調(diào)試。44B0與RTL8019的電路設(shè)計相對來說比較簡單,只需要連接數(shù)據(jù)線、地址選通、中斷等信號線。簡略電路圖如圖(3):
圖3 RTL8019與S3C440X的接口電路
4.軟件設(shè)計 a.RTL8019驅(qū)動程序 RTL8019驅(qū)動程序主要包括3個函數(shù) : i..RTL8019 初始化函數(shù)。要對網(wǎng)卡的工作參數(shù)進(jìn)行設(shè)置.以使網(wǎng)卡開始工作。 其主要工作包括:復(fù)位網(wǎng)絡(luò)芯片,設(shè)置MAC地址,設(shè)置組播地址,設(shè)置DMA傳輸參數(shù)等等。 ii.收包函數(shù):從網(wǎng)絡(luò)中接收數(shù)據(jù)到緩沖區(qū)。 iii.發(fā)包函數(shù):從緩沖區(qū)向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)。 b.協(xié)議棧的實現(xiàn) TFTP的實現(xiàn)其實就是根據(jù)各種協(xié)議,對數(shù)據(jù)打包(當(dāng)發(fā)送數(shù)據(jù)時)和解包(當(dāng)接收數(shù)據(jù)時)。主函數(shù)主要部分如下 … eth_init();//其主要是清空ARP緩沖區(qū).其中調(diào)用了一個功能函數(shù)[2] arp_init();//清零 Mac_init();//設(shè)置MAC地址 ip_init(ip); //主要功能:設(shè)置ip地址 udp_init(); //初始化UDP協(xié)議 while (1) net_handle();//處理函數(shù) 前5個函數(shù)主要是初始化工作接下來的int net_handle(void)就要開始進(jìn)入網(wǎng)絡(luò)傳輸了,這里就是協(xié)議棧的核心了: … 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); //是則進(jìn)行ARP包應(yīng)答 else if(ntohs(eth_hdr->h_proto) == ETH_P_IP) //是否為IP包 ip_rcv_packet(skb);//是則進(jìn)行IP包處理 如果從MAC層收到一個以太網(wǎng)幀,先把收到的以太網(wǎng)幀轉(zhuǎn)變?yōu)橄鄳?yīng)的幀結(jié)構(gòu)再去掉其以太網(wǎng)偵頭部, 其中skb_pop(skb, ETH_HLEN)把數(shù)據(jù)指針往后移動ETH_HLEN個字節(jié),而且真正的數(shù)據(jù)長度也做相應(yīng)的變化..然后根據(jù)幀中的協(xié)議字段判斷其上層為什么協(xié)議.這里幀格式采用的是RFC894,如果其上層為arp協(xié)議,將去掉以太網(wǎng)頭部的數(shù)據(jù)交由ARP處理,同樣如果其上層協(xié)議為IP,也做類似的處理. arp_rcv_packet(skb)只處理的ARP請求消息,如果發(fā)現(xiàn)其為ARP請求,則發(fā)送ARP應(yīng)答. 接下來就是把這個ARP應(yīng)答包發(fā)出去,發(fā)送了ARP應(yīng)答后把剛才請求的者的MAC地址和其IP保存在本機(jī)中,其實現(xiàn)采用了簡單循環(huán)區(qū),利用數(shù)組.首先檢查緩沖區(qū)中有無此項,如果有則直接用該項的索引,如果沒有則重新分配索引, 把傳進(jìn)來的MAC 和IP 賦給新分配的索引 i,。 如果MAC層發(fā)現(xiàn)收到的包上層協(xié)議為IP,則執(zhí)行[1]: if(ntohs(eth_hdr->h_proto) == ETH_P_IP) ip_rcv_packet(skb); 首先檢查接受者是不是本機(jī)IP,通過檢查后,去掉IP頭部,再檢查其上層協(xié)議類型,如果為UDP,則將包轉(zhuǎn)交給上層的UDP協(xié)議處理其中udp_rcv_packet(skb)先去掉UDP頭部,再檢查其對應(yīng)的上層協(xié)議,這里只實現(xiàn)了TFTP協(xié)議,對應(yīng)語句為skb_pop(skb, sizeof(struct udphdr)); if (ntohs(udp_hdr->dest) == TFTP) tftp_rcv_packet(skb); 其中tftp_rcv_packet(skb)根據(jù)TFTP頭部中操作類型而采取不同的動作.對應(yīng)代碼為: 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,再發(fā)送塊編號為0的ACK包.然后為數(shù)據(jù)傳輸做些初始化工作,具體為設(shè)置接受緩沖區(qū)和接受數(shù)據(jù)長度 。:因為TFTP是包裝在UDP里面的,所以首先欲留出UDP頭部的空間,這里要注意的是在UDP層除了為自己留空間外其又會欲留出IP頭的空間,而在IP層除了為自己留空間外其又會欲留出MAC頭的空間.如此便留出了整個協(xié)議棧所要求的頭部空間.調(diào)用關(guān)系為 udp_skb_reserve(skb)—ip_skb_reserve(skb)—eth_skb_reserve(skb); 然后該函數(shù)按照ACK包的格式(在160)賦相應(yīng)的值.最后將此包交由下層的UDP協(xié)議處理.那么此時UDP層是怎么處理的呢?udp_send(skb, client_ip, TFTP, client_port);和TFTP層處理有些類似,先加入自己的頭部信息并賦相應(yīng)的值.然后再交由下層處理, 在IP層其處理的思路也大致差不多,其中ip_send(skb, ip, UDP)定義在ip/_ip.c.其先查看ARP緩沖區(qū)中有無此項,如無則返回錯誤.對應(yīng)代碼為,然后先加入自己的頭部信息并賦相應(yīng)的值.然后再交由下層處理。 tftp_rcv_data(skb)首先判斷接受到的包的目的IP和PORT是不是本機(jī)的TFTP協(xié)議,通過判斷后,再看接受到的包的確認(rèn)序列號是不是和本機(jī)TFTP要求的一致,即看是不是發(fā)生了丟包.如果沒有則當(dāng)前接受到的包有效,存入緩沖區(qū),并發(fā)送確認(rèn)序號對應(yīng)代碼為: if (client_block == ntohs(tftp_hdr->th_block)) { /* 接受一個數(shù)據(jù)分組 */ len = skb->len - sizeof(struct tftphdr); memcpy(buf + data_len, tftp_hdr->th_data, len); data_len += len; tftp_send_ack(tftp_hdr, client_block); client_block++; … 如果當(dāng)前接受到的數(shù)據(jù)小于512字節(jié),則說明傳送完畢,但是當(dāng)發(fā)生丟包時,就要求對方重傳.采用的機(jī)制很簡單,就是要求重傳確認(rèn)序號小的分組。 5.結(jié)束語 本文對S3C44B0X+RTL8019開發(fā),實現(xiàn)了系統(tǒng)通過網(wǎng)絡(luò)與PC機(jī)通信,充分滿足嵌入式小系統(tǒng)網(wǎng)絡(luò)通信需要,改善了了一般嵌入式系統(tǒng)通過串口通信速度慢、可靠性低的弊端。并且適當(dāng)調(diào)整程序,可實現(xiàn)基于UDP的其它上層協(xié)議。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:優(yōu)利康矢量變頻器在抓斗提升...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號