学海荡舟手机网

主页 > 实用文摘 > 教育文摘_22 > > 详细内容

在TMS320VC5402上实现的嵌入式TCP/IP协议栈_DSP论文

摘要:实现一个运行在16位数字信号处理器tms320vc5402上的小型嵌入式tcp/ip协议栈。对tcp/ip协议中的ip协议、arp协议、udp协议进行分析,完成基于tcp/ip协议的嵌入式网络系统。

    关键词:dsp tms320vc5402 tcp/ip协议栈 嵌入式系统

引言

随着嵌入式系统应用范围的不断扩展及网络应用的日益普及,使得越来越多的嵌入式系统需要支持网络功能。tcp/ip是目前一种被广泛采用的网络协议。tcp/ip是一套把因特网上的各种系统互连起来的协议组,已成为事实上最常用的网络标准之一。本文对tcp/ip协议中的ip协议、arp协议和udp协议进行了分析,利用dsp的专用汇编语言实现了自己的通信协议。由此可使dsp直接对ethernet发来的数据包解分析,并能按照tcp/ip协议正确打包和发送,最终实现dsp与pc机的数据通信,成功地完成了语音数据的采集和发送,实现了dsp与pc机的语音数据传输。

1 tcp/ip协议分析

一般在嵌入式系统中实现的tcp/ip协议都是面向数据采集和传输的,所以大部分实现都是ip协议、arp协议、udp协议或者是tcp协议。本文完成的是ip协议、arp协议和udp协议。一般认为tcp/ip为四层协议,实现的协议栈结构如图1所示。

dsp程序自下而上实现以下协议:

①媒介访问控制mac(media access control),向以太网收发数据。传送的数据格式为ethernet数据帧格式。ethernet帧的长度是可变的,但都大于64字节,小于1518字节。它包括头部、数据和尾部三部分。8字节的前导用于帧同步,crc域用于帧校验。目的地址和源端地址是指网卡的地址(mac地址),具有唯一性。

②地址解析协议arp(address resolution protocol),使得物理地址和ip地址可以对应起来。在ethernet上,使用地址解析协议arp协议来实现ip地址到mac地址的动态转换。arp request(arp请求)和arp response(arp响应)类型都是0x0806。arp报文格式包括硬件类型、协议类型、硬件地址长度、协议地址长度、操作字段、源端物理地址、源端ip地址、目的地址和目的ip地址。

③internet网核心协议ip(internet protocol),实现ip网络上的数据传输的基础。ip协议提供了一种高效、不可靠和无连接的传输方式。ip报文是ip协议的基本处理单元,是由报头和数据两部分组成的。ip报头包括20字节的固定部分和变长的选项部分。20字节的固定部分包括ip协议的版本号、ip首部长度、服务类型、报文总长度、标识符、片偏移、报文生存时间、首部校验和以及源端ip地址和目的端ip地址。

    ④用户数据报协议udp(user datagram protocol),提供不可靠的数据传输功能。它不对要发送的数据进行缓冲,直接把从应用层收到的数据加上udp首部发送出去。udp不会把应用层多、次发送的数据合并成为一个包发送出去。这对于编写简单的请求/响应模式的应用是很方便的,而且利用udp协议对传输速率也没有太大的影响。udp协议的数据报格式包括源端口口、目的端口号、数据报长度、udp校验和以及udp数据。

⑤上层应用协议,对语音数据打包传输,实现dsp与pc机的语音数据传输。

2 硬件接口电路

硬件接口电路如图2所示。

微处理器采用的是ti公司生产的tms320vc5402数字信号处理器。它采用了改进的哈佛结构,操作速率达到了100mips。以太网控制芯片采用rtl8019as,是台湾realtek公司生产的一种高度集成的以太网控制器。它实现了以太网媒介访问层(mac)和层(phy)的全部功能。译码、电平变换及向功能由xc95144xl完成。它是xilinx公司生产的低功耗cpld器件。hr61001g是中山汉仁电子有限公司生产的10base-t接口器件,起低通滤波和隔离变压等作用。

3 软件设计

3.1 dsp上嵌入式tcp/ip协议的汇编程序设计

由于dsp的资源有限,所以网络协议根据嵌入式应用进行了裁减。本设计中完成了arp、ip、udp等部分协议,既能够保证dsp接入以太网,又使dsp资源能够满足嵌入式系统应用的要求。

首先介绍一下所设计的dsp接收和发送以太网数据包所使用的数据结构。作者选择了联合体结构作为dsp接收和发送以太网数据包的缓冲区。联合体允许大小和类型不同的定义临时存储在同一存储器空间。这样的好处是各层协议之间数据的传递,实质上是数据指针在传递,而不是数据拷贝传递。而且各层协议可以直接使用该缓冲区,因为缓冲区内的结构体完全是按照各个协议的帧格式设计的。在联合体databuf中有四个结构体成员—ethernetpkt、ippkt、udppkt、arppkt,分别对应着以太网数据帧、ip协议、udp协议、arp协议的帧格式。这4个结构体成员是按照它们各自协议的帧格式进行定义的。值得注意的是,因为databuf中存储的是rtl8019as发送的以太网数据帧,联合体的成员共用databuf缓冲区,所以在各个结构体中要预留低层协议报头存储空间。例如,ip协议的结构体ippkt就要在结构体定义中留下ethernetpkt报头的存储空间,即ippkt定义中前9个整型空间不能使用,从第10个整型空间开始才是ip数据报的内容。

下面分4层介绍所完成的嵌入式tcp/ip协议。

①层:主要完成以太网控制器rtl8019as的复位,寄存器的初始化,并设置rtl8019as的工作方式、中断响应、dma通道接收缓冲区的地址设置等。

初始化程序如下:

write 0x21,cr /*设置命令寄存器,选中第0页*/

write 0x4c,pstart/*页起始地址寄存器初始化,设定接收缓冲区起始页地址*/

write 0x80,pstop /*页停止地址寄存器初始化,设定接收缓冲区终止页地址*/

write 0x4c,bnry

/*页边界地址寄存器初始化,设定从接收缓冲区读取数据的位置,读指针*/

write 0x40,tpsr /*发送页地址寄存器初始化,设定发送缓冲区的起始页地址*/

write 0xcc,rcr

/*接收配置寄存器初始化,使用接收缓冲区,仅接收自己地址的数据包、广播地址数据包和多点播地址包,小于64字节的包丢弃,校验错的数据包不接收*/

write 0xe0,tcr

/*传输配置寄存器初始化,启用crc自动生成和自动校验,工作在正常模式*/

write 0xc9,dcr

/*数据配置寄存器初始化,使用fifo缓存,工作在正常模式,dma传输数据16位宽*/

write 0x01,imr /*中断屏蔽寄存器初始化,使能数据包正确接收中断*/

write 0xff,isr /*复位中断状态寄存器*/

write 0x61,cr /*设置命令寄存器,选中第1页*/

write 0x4d,curr

/*当前页地址寄存器初始化,指向当前正在写的页的下一页,写指针*/

其中write为宏指令,其定义如下:

write .macrodata,reg

st data,*(net_reg)

portw *(net_reg),reg

rpt #(20-1)

nop

.endm

②网络层:主要实现ip协议和arp协议。当dsp接收到正确的以太网数据包以后,调用check_packet函数处理。如果是arp请求,则发送一个arp应答;如果是arp应答,则把对方的ip地址和以太网地址放到arp缓存中;如果是ip包,则调用ip处理模块处理,接收数据。

    check_packe函数如下:

arp: cmpm *(databuf.ethernetpkt.protocol),#0x0608

;判断协议类型是否为arp协议

bc ip,ntc

call arp_process ;调用arp协议处理模块

st #taskfree,*(task);设置空闲任务指针

b taskfree ;跳转到空闲任务

ip: cmpm *(databuf.ethernet.protocol),#0x0008;判断协议类型是否为ip协议

cc ip_process,tc ;若为ip协议,调用ip协议处理模块

st #taskfree,*(task) ;设置空闲任务指针

b taskfree ;跳转到空闲任务

arp_process:接收arp请求后,封装好arp数据报,调用send_packet函数完成发送。在本设计中,dsp工作复位时,arp协议发送一个arp请求,发送自己的ip地址和地址给pc机。

ip_process:接收ip数据报后,判断协议 ,协议如果为17,即是udp协议,则调用函数udp_process,处理udp数据报,否则丢弃该数据报。在本设计中,正确接收一帧数据报后,会给pc机一个应答信息,通知pc机已经正确接收了数据报,可以继续发送数据。应答信息的封装首先调用create_udp_packet完成对应答的udp协议的封装,然后调用create_ip_packet函数,这个函数完成了把封装好的udp数据报再封装成ip数据报。最后调用send_packet函数完成发送。

③传输层:如果ip数据报中的协议类型为17,则为udp数据报,需要调用udp_process函数处理数据报。正确接收了数据后,给发送一个应答,上面已经提到了具体过程,这里不再复述了。这里介绍一下udp协议的一个难点—udp数据的和校验。udp和校验要求加上udp伪首部以后再进行校验,伪首部格式包括32位源ip地址、32位目的ip地址、8位数据0、8位协议和16位udp数据长度。作者根据接收缓冲区的内存管理特点,即接收缓冲区的成员结构共用同一块数据存储区,所以将ip协议的帧头从生存时间开始到帧头结束封装成udp伪首部。其实这样做,只需将8位生存时间改为全0,16位首部和改为udp数据长度即可,8位的协议、32位源ip地址和32位的目的ip地址不用改动。作udp和校验的时候,从ip协议帧头的报文生存时间开始到ip数据报的数据部分结束作带进位的相加,最后比较对和校验就可以了。

④应用层:由于传输的是语音数据,将采集的数据经过a律压缩放到dsp数据缓冲区databuf中,应用tcp/iip协议将其发送给pc机。将pc机发送来的语音数据a律压缩通过dsp的多通道缓冲串行口发送给声卡。对于语音数据的处理,交给pc机完成,这里只实现数据的传输。

注:tcp/ip协议源码见网站 www.dpj.com.cn 。

3.2 pc机上的应用程序设计

使用的vb编程,利用winsock控件完成语音数据的接收。这方面有很多例子可以借鉴,所以就不作太多的介绍。

结语

目前,基于dsp的嵌入式以太网的多媒体应用越来越受到广泛的关注和应用,而且基于tcp/ip协议的嵌入式网络系统已经成功地应用到了语音传输、远程图像控制和数据传输中。其便于操作、传输速度快等优点,受到了有关专家的一致好评。本文利用数字信号处理器dsp和rtl8019as完成了嵌入式智能设备接入以大网,成功实现了应用嵌入式网络系统完成语音数据传输的功能。