EDN China > 设计实例 > 嵌入式系统 > 操作系统 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

TFTP协议在嵌入式系统中的实现

来源:传动网/作者:曹志明 张春雷 覃琴?? 2008年04月25日 ?? 收藏0

  随着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协议要简单得多。现在最普遍使用的是第二版TFTP(TFTP Version 2,RFC1350)使用UDP 的67端口。

TFTP协议包头次序

图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包中的位置:

TFTP协议数据包格式

图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):  

RTL8019与S3C440X的接口电路

图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();//处理函数


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

TFTP协议? 嵌入式系统? ARM?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈