积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> 网络协议
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
TFTP协议在嵌入式系统中的实现
 
作者:曹志明 张春雷 覃琴   来源:传动网    点击数:475   更新时间:2008-4-11
您可以添加到网摘 让更多人关注此文章:

    摘要:
    随着Internet和PC时代的到来,嵌入式系统成为当前IT产业的焦点之一。在这种形势下,家用电器等嵌入式设备的Internet网络化就成了目前网络发展的一个重要方向和必然结果。本文基于ARM核处理器的多嵌入式应用综合开发平台,对嵌入式设备联网的TCP/IP协议进行了讨论研究。


关键字:嵌入式系统  TFTP协议 ARM


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协议要简单得多。现在最普遍使用的是第二版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包的格式(在<TCP/IP祥解 I 协议>160)赋相应的值.最后将此包交由下层的UDP协议处理.那么此时UDP层是怎么处理的呢?udp_send(skb, client_ip, TFTP, client_port);和TFTP层处理有些类似,先加入自己的头部信息并赋相应的值.然后再交由下层处理, 在IP层其处理的思路也大致差不多,其中ip_send(skb, ip, UDP)定义在ip/_ip.c.其先查看ARP缓冲区中有无此项,如无则返回错误.对应代码为,然后先加入自己的头部信息并赋相应的值.然后再交由下层处理。
    tftp_rcv_data(skb)首先判断接受到的包的目的IP和PORT是不是本机的TFTP协议,通过判断后,再看接受到的包的确认序列号是不是和本机TFTP要求的一致,即看是不是发生了丢包.如果没有则当前接受到的包有效,存入缓冲区,并发送确认序号对应代码为:
if (client_block == ntohs(tftp_hdr->th_block)) {        
                /* 接受一个数据分组 */
                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++;
                …
    如果当前接受到的数据小于512字节,则说明传送完毕,但是当发生丢包时,就要求对方重传.采用的机制很简单,就是要求重传确认序号小的分组。


5.结束语
    本文对S3C44B0X+RTL8019开发,实现了系统通过网络与PC机通信,充分满足嵌入式小系统网络通信需要,改善了了一般嵌入式系统通过串口通信速度慢、可靠性低的弊端。并且适当调整程序,可实现基于UDP的其它上层协议。

[1]



相关文章
· 泰克新推出混合信号和数字荧光示波器,简便易用小巧便...[100]
· NEC推出9款用于车载多媒体系统的32位MCU[114]
· 基于ARM单片机的条码精密测量系统[400]
· 利用SPD实现嵌入式系统中内存的自动识别和配置[295]
· 高质量嵌入式系统开发的集成测试技术[247]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
节能环保备受关注 半导体照
半导体产业最终将存活并将再次蓬勃发展
电子元件业御寒过冬 静待行
台湾当局拨款60亿美元援助DRAM厂
Vishay Silico
严冬期如何发展半导体业 扩
2008年中国集成电路市场回顾与展望
分析师:亚洲芯片厂商库存远超预期
2008年基础电子业十大事件点评
Aptina并购智多微手机软件平台设
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
供应HY5PS561621AF...
优势供应SPP11N80C3...
优势供应ICE2A0565Z...
低价专业PCB打样 双面板20...
深圳市天漠科技超低价供应atm...
深圳市天漠科技超低价供应ARM...
[推荐]2.5米精度,高灵敏度...
830实验箱+电脑没有并口...
[原创]平望科技助力自服终端国...
低价专业PCB打样 双面板20...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网