基于DSP的嵌入式Ethernet接入方案设计

更新时间:2023-07-28 14:38:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第日届京、津、沪、渝反套国城市有线电视技术研讨套论文集

一35一

基于DSP的嵌入式Ethernet接入方案设计

中国传媒大学信.电工程学院曹岱鸿王金涛

摘要:介绍了以DSP为核心具有以太网接El的嵌入式系统的硬件电路组成和软件设计方j矗。对系统的硬件设计进行了介绍.详细地介绍了网络控制器LAN9118的工作原理及散宇信号处理器TMS320C6713。介绍了嵌入式TCP/IP协议栈LwJP和实时操作系统1JC/OS—II在DSP上的移植方法。

关键词:嵌入式Ethemet

IJC/OS一¨LwIP

DSP

引言

在Intemet技术应用日益广泛的今天,嵌入式的产品需要支持网络的功能,而网络是最方便和最有效的传

输方式。TCP/IP是目前一种广泛采用的网络协议,是一套把因特网上的各种系统连接起来的协议组,已经成为事实上的最常用的网络协议。本文利用Ⅱ公司的TMS320C6713芯片和v,C/OS-II嵌入式操作系统和加载LwlP

的TCP/IP协议栈来实现以太网的接人。

2系统总体结构

系统层次结构

本课题研究的以太网通信系统大致分为上图所示的5个层次,由下向上分别为:硬件层、设备驱动层、操作

系统、网络模块和用户代码。

系统硬件电路,包括DSP系统和以太网控制芯片LAN9118的接口电路,是系统的物理基础。

快速以太网驱动程序处于硬件抽象层,本身虽为软件,但与硬件结合紧密,为操作系统提供了访问快速以

太网控制芯片LAN9118或改变其工作行为的系统调用。

斗c/os—II操作系统处于系统内核,为用户代码统一管理系统软硬件资源,提供用户所需的底层服务。

TCP/IP协议栈软件为p,C/OS一Ⅱ操作系统扩展了网络通信能力。

用户代码处理特定的应用程序细节,可以直接使用TCP/IP协议模块提供的API函数,开发基于以太网

的通信项目。

3系统硬件框图

一36一

第口届京、津、沪、渝及全国城市有线电视技术研讨会论文集

在系统中我们选择了DSP上CE0、CEl接SDILAM,CEl接FLASH,CE3接LAN9118。系统的整体框架图如

下:

TMS320C6713和LAN9118的接口如下图

TMs320C6713

L~N9118

ED[31:olEA{21:9】EA[8:21

ARE#

D口l:伽A[7:I】

RD#

AWE#CE坤

EXTINT4

ARDY

WR#CS#

mQ

PME

TMS320C6713数字信号处理器简介

Ⅱ公司推出的6000系列处理器TMS320C6713,运算功能强,片内存储空间大,完全支持浮点;相应的DSK

开发板功能强大,有丰富的外设接口,并有如下主要特性:

(1)超长指令字(vLiw)结构

装载/存储结构;指令包以减小代码长度;100%条件指令以提高执行速度;

(2)CPU主要特性

内部包含4KByte的1级程序缓存,4KByte的l级数据缓存,256KByte的内部存储器,可以动态分配其中的64KByte作为程序和数据共享的2级缓存;8个独立的功能单元(包括两个乘法器,6个算术逻辑单元ALU);8个定点运算单元,6个浮点运算单元;32个32位寄存器;主频高达225MHz,1800MIPS/1350MnDPs(1M

FLOPS------每秒约100万次浮点操作);3.3ns指令周期;32位寻址空间;可寻址32、16、8位数据,16通道ED.

MA:

(3)存储器及外围设备

32位的片外存储器接口(EMIF);2个32位定时器,4个开关量SW;16MByte片外存储器SDRAM;

512KByteFLASH:

第日届京、璋、沪、渝反全国城市有线电视技术研讨奋论文集

一37—

pC/OS-II操作系统概述及移植要点

嵌入式的操作系统肛C/OS—II是一个完整的,可移植、固化、剪裁的占先式实时多任务内核RTOS,其性能和

安全性可以与商业产品竞争。斗C/OS—II是用ANSIC语言编写的,包含一小部分汇编语言代码,使之可供不同架构的微处理器使用。p,C/OS—II的特点是源代码公开,你只需买一本书(文献3),附带的光盘就可得到V2.52

版本的源代码。而且对学校和教育的使用是完全免费的,商业应用的费用也相对较低。

要使¨C/OS-II正常运行于不同的处理器上,那么处理器必须满足以下的要求:①处理器的c编译器能产生可重人型代码

②处理器支持中断,并且能产生定时中断(通常为10-100Hz)③用c语言就可以开关中断

④处理器能支持一定数量的数据存储硬件堆栈(可能是几千字节)

⑤处理器有将堆栈指针以及其它CPU寄存器的内容读出,并存储到堆栈或内存中去的指令。

一般的移植步骤如下:

①深入了解所采用的系统的核心②分析所采用的c语言开发环境的特点③编写移植代码④进行移植的测试

⑤针对项目的开发平台,封装服务函数

下图说明了wC/OS-II的结构以及它与硬件的关系

v,C/OS-II

(与处理器无关的代码)

OS_CORECOSMBOXCOS_MEMCOS_SEM.C

IJ_C/OS-II.C

啦,OS一Ⅱ.C

Os-Qc

OS_TASK-C

0SⅧEC

当你拿到斗C/OS—II的源代码后,打开文件与平台相关的移植代码仅存在于0s_CPu』.ASM、0s_cPU_C.

C、Os_cPU.H这三个文件中。在OS-cPU.H中包括了用#define语句定义的、与处理器相关的常数、宏以及数据类型.这部分的修改相对比较容易,具体见文献3的第十三章,在OS_CPU_C.C文件中有lO个函数需要用户用

C语言来编写OSTaskStklnit();OSTaskCreateHook();OSTaskDeLHook();OSTaskSwHook();OSTaskMleHook();

OSTaskStatHook();OSTimeTickHook();OSInitHookBegln();OSlnitHookEnd();OSTCBInitHook()。其中第一个函

数的编写较其它的函数来说复杂一些。OS_CPu—A.ASM文件中是四个用汇编语言写成的函数是移植过程中最难写的部分OSStartHighRdy();OSCtxSwO;OSIntCtxSw();OSTieklSR()。这些代码的编写可以参考树种的移植例子,也可以登录tJJC/OS—II的官方的网站www.uCOS—II.corn找出相关的移植代码,笔者在移植过程中参看了清华大学曾鸣的代码和在TMS320C62x上移植的代码。可参考文献[8】。

一38一

第口届京、津、沪、渝及全国城市有线电视技术碍讨会论文集

LwIP协议栈概述及移植要点

InstituteofComputer

LwlP(LishtWeight

IP

Protoc01)是瑞士计算机科学院(SwedishScience)的Adam

Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/1P协议栈。1wIP既可以移植到操作系统上,又可以在无操作系统的情况下独立的运行。LwIP实现的重点是在保持TCP/IP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP适台在低端嵌入式系统中使用。LwIP的特性如下:

(1)支持多网络接口下的IP转发(2)支持ICMP协议

(3)包括实验性扩展的UDP(用户数据报协议)

(4)包括阻塞控制,RTr估算和快速恢复和转发的TCP(传输控制协议)(5)提供专门的内部回调接口(RawxPi)用于提高应用程序性能(6)可选择的Berkeley接121API(多线程情况下)(7)在最新的版本中支持PPP

(8)新版本中增加了IPfragment的支持(9)支持DHCP协议,动态分配IP地址

6,1

与操作系统相关部分

在include文件夹里有建立两个文件夹arch和netff,在netif文件夹里写一个与laa9118if.e文件对应的头

文件langll8if.h,进行函数的声明。在ayeh里有5个头文件,分别是ec.h作系统的头文件OS_CPU.H的定义是~样的。如下:

typedef

unsignedcharu8t;

init.hlib.h

perf.hsys_arch.h。

在cc.h中是一些与编译器有关的数据信息的定义,如数据的长度,字的高低位顺序等。这与在移植斗C/OS-II操

typedeftypedoftypedef

signedchar

sS_t;

t;

unsignedshortul6signed

shortint

sl6_t;

typedef

typedef

unsigned

signedint

u32j;

s32_t;

在lib_arch.c文件中IMP协议栈中用到了8个外部函数,这些函数通常与用户使用的系统或编译器有关。

因此留给用户自己实现。如下:

u16_thtons(u16_tn);u16._tntohs(u16_tn);u32__thtonl(u32_3n);u32jntohl(u32jn);

intint

//16位数据高低字节交换

//32位数据大小头对调

strlen(eonstchar}sIr);//返回字符串长度

stmcmp(coastchar*strl,constchar+str2,intlea);∥字符串比较bcopy(eonstvoid*sFe,void*dest,intlen);

void

∥内存数据块之间的互相拷贝

voidbzero(void*data,intn);//内存中指定长度的数据块清零

在sys_arch.e文件中的内容是与操作系统相关的一些结构和函数,主要分四个部分(1)sys_sem_t信号量

IMP中需要使用信号量通信,所以在sys_arch中应实现信号量结构体和处理函数:

算口届京、津、沪、瀹反全国城市有线电视技术研讨会论文集

struct

一39一

sys_sem_t

sys_sem_new((sys__senl_free()sys..8em—signal()

//创建一个信号量结构//释放一个信号量结构

//发送信号量

sys_arch_sere_wait()//请求信号量

由于v.C/OSII已经实现了信号量0S_EVENT的各种操作,并且功能和LwlP上面几个函数的目的功能是完全一样的,所以只要把trC/OSII的函数重新包装成上面的函数,就可以直接使用了。

(2)sys_mbox_t消息

1wlP使用消息队列来缓冲、传递数据撮文,因此要在sys_arch中实现消息队列结构sys_mbox_t,以及相应的

操作函数:

sys_mbox_new()sys_mbox_free()sys_nrbox_post()sys_arch_mbox_fetch()

∥创建一个消息队列

//释放一个消息队列

//向消息队列发送消息

//从消息队列中获取消息

tmC/OSII同样实现了消息队列结构OSQ及其操作,但是v..C/OSII没有对消息队列中的消息进行管理,因此不能直接使用,必须在IJJC/OSII的基础上重新实现。为了实现对消息的管理,我们定义了以下结构:

typedefstruct

OS_EVENT*pQ;

void*pvQEntries[MAX_QUEUE_ENTRIES];

lsys_mbox_t;

在以上结构中,包括OS__EVENT类型的队列指针(PQ)和队列内的消息(pvQEntries)igg部分,对队列本身的管理利用斗C/OSII自己的OSQ操作完成,然后使用I^C/OSII中的内存管理模块实现对消息的创建、使用、删除回收,两部分综合起来形成了LwlP的消息队列功能。

(3)sys_amh_timeout函数

LwIP中每个与外界网络连接的线程都有自己的timeout属性,即等待超时时问。这个属性表现为每个线程

都对应一个sys_timeout结构体队列,包括这个线程的timeout时间长度,以及超时后应调用的timeout函数,该函数会做一些释放连接,回收资源的工作。如果一个线程对应的sys_timeout为gl(NULL),说明该线程对连接做

永久的等待。

timeout结构体已经由LwIP自己在sys.h中定义好了,而且对结构体队列的数据操作也由LwIP负责,我们

所要实现的是如下函数:

struct

sys_fimeouts}sys_arch_timeouts(void)

这个函数的功能是返回目前正处于运行态的线程所对应的timeout队列指针。timeout队列属于线程的属

性,因此是Os相关的函数,只能由用户实现o

(4)sys_thread_new创建新线程

LwIP可以是单线程运行,即只有一个tcpip线程(tcpip_Ihread),负责处理所有的tcp/ucp连接,各种网络程

序都通过tcpip线程与网络交互。但LwIP也可以多线程运行,以提高效率,降低编程复杂度。这时就需要用户实

现创建新线程的函数:

voidsys_thread_new(void(+thread)(void+ars),void+arg);

在pC/OSII中.没有线程(thread)的概念,只有任务(Task)。它已经提供了创建新任务的系统API调用OSTaskCreate,因此只要把OSTaskCreate封装一下,就可以实现sys_thread_.new。需要注意的是LwIP中的thread并没有I^C/OSII中优先级的概念,实现时要由用户事先为LwIP中创建的线程分配好优先级。6.2网络设备驱动程序与LwlP的接口

在源代码的LwIP文件夹中有两个文件夹src和doe,在移植时,增加一个arch文件夹,在此文件夹里写人

一40一

第口届京、津、沪、渝反全国城市有线电视技术研讨会论文集

两个C语言的源文件lib_arch.c和sysarch.c,并建立两个文件夹include和netif,在netif文件夹里写一个C的

源文件lan9118if.e这个源文件是写与网络控制芯片有关的操作。在LwIP中可以有多个网络的接口,每个网络接口都对应了一个structnetif,这个netif定义如下:

struct

netif{

netif+next;

struct

char

name[21;

intIlum;

structstructstruet

ip_addrip_addr;ip_addrnetmask;

ip_addrgw;

pbuf+P,struet

void(8input)(structint(+output)(struct

strttet

netif+inp);

netif+netif,structpbuf

P,

ip_addr

ipdaddr);

void+state;

);

这个netif包含了相应网络接口的属性,收发函数。LwIP调用netif的方法netif->input()和netif->output()

进行以太网包的收、发等操作。在以太刚的的的芯片的驱动程序主要做的就是芯片的初始化,收、发和中断处理

函数。驱动程序是在IP协议模型的网络接口层,它提供给上一层(IP)的接口函数如下:

①网卡的初始化函数

void

ethemetif_init(structnetif*netif);

②网卡接收函数,从网络接口接收以太网数据包并把其中的IP报文向IP层发送,在中断方式下由网卡

ISR调用

void

ethemetif...input(stmetethemefif_output(stntctethernetif_isr(void);

netif+netif);

③网卡发送函数,给IP曾传过来的IP报文加上以太网包头并通过网络接El发送

err

nefif+netif,structpbuf+P.

struet

ip_addr*ipaddr);)④网卡中断处理函数ISR

void

LwlP的网络驱动有一定的模型,/sre/netif/ethemefiLc文件即为驱动的模板,用户为自己的网络设备实现驱动时应参照此模板。

6.3

LwlP的数据流程

LwlP的数据流程主要分为接收和发送两种情况。

接收数据时:数据包从一个网络接口被吸收,如果网络接口驱动通过low_teveljnput函数读到这个数据包,

简单的区分是ARP包还是IP包。如果是ARP包,将调用ARP的功能处理这个包。如果是一个IP包,将把数据

包发送给ipinput函数处理。ip_input函数将数据包进行简单的处理(如计算校验和)后,分析该包是发送到本

机的正常数据包,ip_input则根据包的分类,分别发送给udp_input、tcp_input、iemp_input函数处理。如果是发送

给UDP或TCP协议的数据包,UDP、TCP协议的处理函数将进行相应的处理,最后发送给应用程序。

发送数据时:当应用程序要发送一个数据包的时候,它将调用UDP或TCP协议处理udpsender或

top_wrlte函数发送一个数据包,UDP或TCP协议的处理函数接到数据后,将对数据进行打包、分段,然后发送给IP层的ip_output_if函数(需要的时候,将调用iproute函数进行路由选择),该函数把数据打包、封装,然后调用

网络接口驱动函数传给网络接口。

第m届京、津、沪、瀹反全国城市有线电视技术研讨会论文集

一41—

7以太网控制芯片LAN9118

LAN9118是SMSC公司生产的一款高性能的10/IOOM以太网控制芯片。内部集成了以太网MAC控制器和以太网PHY控制器,并且它带有类似于SRAM的存储器接13。一个高性能的主机总线接口提供了与大多数的16位或32位的微处理器或控制器的可靠连接。

LAN9118集成了一个支持IEEE802.3的物理层,为的是支持针对双绞线的以太网的应用。这个物理层可以配置成100Mbps或者是10Mbps,可以是全双工的或是半双工的模式。

在MAC里传输和接收数据的路径是独立的,所以,它可以工作在高速的全双工的模式下。数据路径通过独立的总线连接到PIO接口上,待传输的数据和发送接收的状态字也是通过这些总线来传送的。还有第三条内部总线是用来访问MAC控制寄存器的,它是主机通过PIO接口来进行的。MAC后面是介质独立接口MlI(Media

[ndependent

Interface)连接到内部的10/100PHY的,MAC的控制状态寄存器通过内部的串行管理接口总线

Management

SMI(SerialInterface)来访问PHY的内部寄存器的。MAC里的MAC接口层MIL(MAC

Interface

I丑yer)包括一个2K字节的传输FIFO和128字节的接收F;FO,它们和TX/RXFIFOs是独立的。MAC里的FIFO是不可以直接被主机接口来访问的。

TX/RX

FIFO是用来对MAC的数据进行缓存的,它是主机接口和MAC之间传输、接收数据和状态信息

的通道。这个FIFO的发送和接收数据的通道也是独立的,并且它的大小是可配置的。

LAN9118提供了一个可配置的中断,它允许用户根据应用来优化操作。中断的类型和缓存的类型可以根据外部的中断处理来配置。

主机总线接口提供了和FIFO的接1:3,它也是LAN9118控制状态寄存器的接口。这个总线接口是和嵌人式系统连接的主要的总线,支持16位或32位的总线传输,内部的数据宽是32位的,它即可以与大端模式处理器连接也可以与小端模式的处理器连接,而且不管外部的数据总线是16位的还是32位的。包括四个主要的功能模块,分别是:IO/IOOM接口HBI,框图如下。

ethernetPHY、10/100M

ethemetMAC、Rx/rxFIFOs、主机总线

一42一

第四届京、津、沪、渝反会国城市有线电视技术研讨会论文集

8结束语

基于DSP的嵌入式Internet的多媒体应用越来越来受到关注,也是未来发展的趋势。本文设计的方案实现

了一个嵌入式系统的以太网接人功能,可以应用到语音的传输和远程的图象的数据的传输中。

参考文献

l李方慧等著.1Ms320c6000系列DSPs原理与应用.北京:电子工业出版杜,20032江思敏.TMS320c6000DSP应用开发教程.北京:机械工业出版杜,2005

34

Jean

J.L矗b獬啦著,邵贝贝等译,嵌入式实时操作系统p正./os-Ⅱ,北京:北京航空航天大学出版社.2003

D.Reed.3com公司泽.TCP/Ip基础.北京:电子工业出版社

com

Kenneth

5橱晔.实时操作系统O上./OS_1I下TCPAP协议栈的实现,www.skyeye

6曾呜.清华大学,p,C/OS--H实时操作系统在嵌人式平台上进行移植的一般方莹和技巧

TLTMS320C6713BFloating-printⅨ画t8Islp越PI∞eB鲫(Rev.A)

8ⅡReset

9lO

CircuitfortheTMs320C6000DSP

TI.TMs320C6713HardwareTL

Desi帮eCsRe60m'oeGllide

ExtentdFlash

1MS320c6000EmF

EMIF

to

Me咖ry

Iatexfaee(Rev.A)

1l_11.TMS320C6000121314

to腑emal血m血岫0II辱SRAM

TI.TM¥320C6000DsPEstemalMemoryAdam

Interrace(EMIF)ReferenceGuide(Rev.E)

S蛆ck

Denkels,DesitcaandImplementationoftheLwIPTCp/IP

L^N9118Family

n嵋r哪蛐Refeaenee

htlp://savannah.枷印u-0rg恻ect“1wip/

Guidc,www.咖虬eom

基于DSP的嵌入式Ethernet接入方案设计

作者:作者单位:

曹岱鸿, 王金涛

中国传媒大学信息工程学院

本文链接:/Conference_6266138.aspx

本文来源:https://www.bwwdw.com/article/6jhm.html

Top