Vol.24No.4安徽工业大学学报第24卷第4期October2007J.ofAnhuiUniversityofTechnology2007年10月
文章编号:1671-7872(2007)04-0412-04
基于DSP2812嵌入式开发平台的以太网通讯的实现
刘在祥,汪小平
(安徽工业大学电气信息学院,安徽马鞍山243002)
摘要:设计一个基于DSP2812的具有以太网接口的嵌入式开发平台,并成功移植实时操作系统μC/OS-II和以太网协议栈LwIP。采用IrisNetworkTrafficAnalyzer软件监视PC机网卡接收/发送网络数据包的情况,取得了满意的效果,实现了DSP与其它通信设备的以太网通信。
关键词:数字信号处理器;嵌入式系统;协议栈;移植
中图分类号:TP393文献标识码:B
ImplementationofEthernetCommunicationinEmbeddedSystemBasedonDSP2812
LIUZai-xiang,WANGXiao-ping
(SchoolofElectricalEngineering&Information,AnhuiUniversityofTechnology,Ma'anshan243002,China)
Abstract:DesignsanembeddedhardwareplatformwithethernetinterfacebasedonDSP,andtransplantsareal-timeoperatingsystem-μC/OS-IIandTCP/IPprotocolstack-LwIPtoDSP2812sucessfully.WiththesoftwareofIrisNetworkTrafficAnalyzerwatchingthereceived/sentdatapacketsinthenetworkcard,getsasaticfactoryresultandimplementstheethernetcommunicationbetweenDSP,andothernetworkdevices.
Keywords:DSP;embeddedsystem;protocolstack;tra
nsplanting
随着以太网技术在工业控制领域的迅速发展,不断提高的性能和迅速降低的成本使新一代工业自动化网络都涉及到以太网通讯。利用TI公司的DSP芯片TMS320F2812来控制以太网芯片RTL8019AS,实现了以太网通讯的DSP硬件平台设计,及实时操作系统μC/OS-II和以太网协议栈LwIP在DSP上的移植。进而实现了DSP与其它通信设备的以太网通讯。
1硬件系统的设计
TMS320F2812(简称2812)是目前工业控制应用领域最先进的32位定点DSP芯片。它采用高性能静态CMOS技术;低功耗设计,核心电压1.8V,I/O电压3.3V;高达150MHz的主频;哈佛总线结构;支持JTAG边界扫描;片内有高达128K×16位Flash存储器,18K×16位的数据/程序RAM;可扩展的外部存储器接口,可寻址高达4MB的程序/数据空间;片内包含可扩展的外部中断模块,支持96个外部中断[1]。
2812片内有18kB的RAM空间,在2812上运行操作系统和以太网协议栈要求有足够大的RAM空间,考虑外扩一片SRAM。文中采用3.3V供电,12ns的CY7C1041CV33芯片作为RAM空间。映射到2812的ZONE6(起始地址为0x100000)处[2]。
选择REALTEK公司的RTL8019AS作为以太网控制器。RTL8019AS是高度集成的10M全双工以太网芯片,支持JUMPER和JUMPERLESS模式的即插即用,8位或16位的DMA方式。RTL8019AS共有32个输入地址,地址偏移量为0x00~0x1F。其中0x00~0x0F共16个地址,为寄存器地址。0x10~0x17共8个地址,可用作远程DMA端口,用其中一个地址即可。地址0x18~0x1F可用作软件复位,使用其中一个地址即可。
RTL8019AS内部包含16kB的RAM。地址为0x4000~0x7fff;RAM按页存储,每256字节为1页。一般收稿日期:2007-05-28
作者简介:刘在祥(1981-),男,江苏扬州人,硕士生,研究方向:电力电子与电力传动。
第4期将RAM的前6页(即0x4000~0x45ff)存储区作为发送缓冲区;后58页(即0x4600~0x7fff)存储区作为接收缓冲区。RTL8019AS和2812的硬件连接如图1。
TMS320F2812
XD0-XD15XA0-XA17/XZCS6AND7
/XRD/XWE
/XZCS0AND1
PWM1XNMI
CS
RESETIRQ
CY7C1041CV33D0-D15A0-A17CE/OE/WE
15K
10K
GND74HC04
12
13
74LVTH16245
93C46
CS
SKDODI
RTL8019AS
EESKSD0-SD15
EECSEEDOEEDISA0-SA4IORBIOWBAEN
RSTDRVINT0
T1
T2JP
SMEMWBSMEMRBIOCS16B
SA8SA9TPIN+TPOUT-
TPIN-TPOUT+LED0LED1LED2SA5-SA7SA10-SA19
22pF
VCC
2
22pFtcpip协议中基于tcp协议的应用程序
20MHz
300
RJ45LPF
RXTX-RX+RX-1KTX
1K
VCC
GND
图12812与RTL8019AS的硬件连接图
图1中:RTL8019AS是5V供电芯片,2812是3.3V供电芯片,两者之间不能直接相连,使用电平转换芯片SN74LVC16245A来实现电平匹配;RTL8019AS产生的中断信号为高电平,2812的中断有效输入电平是低电平,故两者之间采用反相器74HC04连接,同时输出连接电阻分压电路接到2812的外部中断引脚XNMI,和2812电平匹配;TPIN±
为接收线,TPOUT±为发送线,经隔离后分别与RJ-45接口的RX±,TX±端相连;LED1,LED2各接一发光二极管以反映通讯接收和发送状态;93C46是采用4线SPI串行接口的
EEPROM,容量为1kB(64×16bit),主要用来保存RTL8019AS的配置信息;2812使用引脚XZCS0AND1作为
RTL8019AS的片选信号,引脚PWM1作为RTL8019AS的复位信号,IOCS16B串300Ω电阻接电源,使用16位DMA方式;RTL8019AS选择的端口I/O基地址为300H,用到的地址空间为0x0300H~0x031FH,故其20根地址线SA0~SA19采用如图1连接,其中SA8,SA9接VCC。
2嵌入式操作系统μC/OS-II在2812上的移植
嵌入式操作系统μC/OS-II是一个公开源代码的、占先式多任务的微内核实时操作系统。它适合小型控制系统,具有执行效率高,占用空间小,实时性能优良和扩展性强等特点,最小内核可编译至2kB。μC/OS-II是一个经实践证明稳定,可靠,好用的内核[3]。
将μC/OS-II移植到2812上的主要工作为:
(1)用#define设置1个常量和声明3个宏,声明10个数据类型
(OS_CPU.H);(2)用C语言编写6个简单的函数
(OS_CPU_C.C);(3)编写4个汇编函数
(OS_CPU_A.ASM)。2.1OS_CPU.H
此头文件主要包含与处理器,编译器有关的数据类型,常量和宏定义。2812为32位定点处理器,使用
CCS2.20编译器。在2812上,Char类型长度为16位,Int类型长度为16位,Lo
ng类型长度为32位。堆栈数据类型OS_STK声明为16位。另外,2812的堆栈增长方向是从低地址向高地址,故定义OS_STK_GROWTH为0。宏OS_ENTER_CRITICAL和OS_EXIT_CRITICAL定义为asm(“SETCINTM”)和asm(“CLRCINTM”),用
GND
TX+刘在祥等:基于DSP2812嵌入式开发平台的以太网通讯的实现413
安徽工业大学学报2007414
于2812关中断和开中断。将任务级切换函数OS_TASK_SW()定义为asm(“TRAP#31”),使用2812中用户定义的软中断来触发此任务级切换函数。
2.2OS_CPU_C.C
这个文件主要包含任务堆栈初始化函数OSTaskStkInit()。μC/OS-II为每个任务建立堆栈,用于保存处理器的寄存器。OSTaskCreate()通过调用OSTaskStkInit()来初始化任务的堆栈结构,任务堆栈空间由低至高依次保存2812CPU的寄存器:T:ST0,AH:AL,PH:PL,AR1:AR0,DP:ST1,DBGSTAT,PC,R
PC,AR1H:AR0H,XAR2,XAR3,XAR4,XAR5,XAR6,XAR7,XT。出栈顺序与上述相反,这样就能保证CPU各寄存器正确的保存和恢复。
2.3OS_CPU_A.ASM
此文件包含4个汇编函数:运行最高优先级任务的函数OSStartHighRdy(),任务级上下文切换函数OSCtxsw(),中断级任务切换函数OSIntCtxSW(),时钟中断处理函数OSTickISR()(利用2812中CpuTimer2实现时钟节拍)。
3以太网协议栈LwIP在μC/OS-II上的移植
LwIP是瑞士计算机科学院的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP实现的重点是在保持TCP协议主要功能的基础上,减少对RAM的占用[4]。一般它只需要几十kB的RAM和40kB左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。
LwIP协议栈在设计时就考虑了将来的移植问题,它提供了一个操作系统封装层,此操作系统封装层在底层操作系统内核和LwIP协议之间提供了一个通用的接口[5]。在这个接口中把所有与硬件、
操作系统、编译器相关的部分独立出来,放在/src/arch目录下。LwIP在μC/OS-II上的实现就是修改这个目录下的文件,其它文件一般不修改。
3.1修改与CPU或编译器相关的include文件
arch/include/arch目录下cc.h,cpu.h和perf.h中,有一些与CPU或编译器相关的定义,如数据类型定义,大小端设置,取消结构体对齐等,这些参数应该与实现μC/OS-II时定义的数据长度等参数是一致的。3.2改写操作系统相关的函数
sys_arch.c中具有与操作系统相关的一些结构和函数,主要分为3个部分。
(1)进程间通信的函数
函数sys_sem_new(),sys_sem_free(),sys_sem_signal(),sys_arch_sem_wait(),sys_mbox_new(),sys_mbox_free(),sys_mbox_post(),sys_arch_mbox_fetch()的功能在μC/OS-II中基本都有,只要把μC/OS-II对应的函数重新包装成上面的函数就可以。mbox要用μC/OS-II中的消息队列来实现。另外函数sys_sem_free()和sys_mbox_free()不易实现,但可以采用从空闲队列中动态分配和回收的方法实现。
(2)函数sys_arch_timeout()
定时的实现也是TCP/IP协议中一个很重要的部分。LwIP中每个与外界网络连接的线程都有自己的timeout属性,即等待超时时间。这个函数需要用户编写。
(3)函数sys_thread_new()
LwIP可以单线程运行,即只有一个tcpip线程(tcpip_thread),负责处理所有的tcp/ucp连接,各种网络程序都通过tcpip线程与网络交互。LwIP也可以多线程运行,以提高效率,降低编程复杂度。在μC/OS-II中,没有线程(thread)的概念,只有任务(task)。但它提供创建新任务的系统API调用OSTaskCreate()。因此,只要封装OSTaskCreate()就可以实现sys_thread_new()。需要注意的是,LwIP中的thread并没有μC/OS-II中优先级的概念,实现时要用户事先为LwIP中创建的线程分配好优先级。
3.3编写NE2K网络设备驱动程序
在LwIP协议栈中,网络接口层负责接收上层的IP数据报,打包后复制到控制器片内RAM中,并通过控制器发送到传输介质上,发送时由控制器打包成完整的物理帧;或者将控制器中缓存的接收到的物理帧先
第4期
刘在祥等:基于DSP2812嵌入式开发平台的以太网通讯的实现415
复制到系统内存,然后抽出IP数据报,交给IP层进行处理。修改LwIP协议栈提供的驱动模板ethernetif.c文件,用户可以为自己的网络设备编写驱动程序。基于RTL8019AS网络芯片驱动的编写主要是进行相关寄存器的设置,实现网络接口的收、发、初始化和中断处理函数。
(1)网卡初始化函数
用于初始化网卡,在程序启动时被调用。主要完成网卡的复位操作以及通过对各寄存器赋值确定网卡的工作方式等。复位信号为高电平有效,给RESDRV引脚施加一个1μs以上的高电平就可以复位。复位过程RTL8019AS将执行一些操作,需约2ms,推荐等待更久如100ms之后再操作,确保完全复位。
(2)网卡发送函数
将待发送的数据按帧格式封装,通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令,完成帧的发送。需要设置以太网目的地址、以太网源地址、协议类型,再按所设置的协议类型设置数据段。之后启动远程DMA,数据写入RTL8019AS的RAM,再启动本地DMA,
将数据发送网上。
(3)网卡接收函数
实现从网络接口接收以太网数据包并把其中的IP报文向IP层发送。网卡对于以太网上目的地为该网卡的包,会自动启动本地DMA接收数据,并存放在RTL8019AS芯片内部RAM的接收缓冲环中,然后以外部中断的方式通知2812。此时该函数使用远端DMA接收数据到系统的RAM中。
(4)网卡中断处理函数
处理网卡相关的中断,RTL8019AS接收到数据后,通过中断入口把接收数据的工作交给函数ethernetif_input()处理。在实时多任务环境中,一般采用中断方式处理RTL8019AS的收发。当主程序响应RTL8019AS的中断时,ISR的入口将根据读取的中断状态寄存器(ISR)的值确定程序的走向。
4应用实例的建立和测试
做完移植修改后,可以在μC/OS-II中初始化LwIP,并可创建TCP或UDP任务进行测试。本系统使用自主设计的DSP开发板,结合TI公司的CCS集成开发环境和网络数据分析软件进行应用程序的调试。利用BerkleyAPI编程实现一个TCPecho服务器,监听7号端口。
测试时,把网卡的IP地址设置为PC机同一个网段。编译运行后,在PC机上运行pingIP地址命令,得到ICMP协议的reply响应。运行telnetIP地址7命令,显示创建的TCPecho服务器的回显效果,说明ARP,ICMP,IP,TCP协议都已正确运行。
5结束语
利用RTL8019AS设计了一种以DSP2812为主控芯片的具有以太网接口的嵌入式系统。实验表明,本系统能够正确快速地接入以太网。使用RTL8019AS作为嵌入式系统以太网接口芯片具有高可靠性,高性价比和接口简单等特点。采用实时操作系统μC/OS-II可大幅加快软件的开发和调试进度。通过移植,还可获得一套免费研究和学习的嵌入式网络软件平台。
参考文献:
[1]TexasInstruments.TMS320F281xDataSheet[EB/OL].[2007-04-10].http://www.ti.com.
[2]张卫宁.TMS320C28X系列DSP的CPU与外设(上)[M].北京:清华大学出版社,2004.
[3]LABROSSEJeanJ(美).μC/OS-II-源码公开的实时嵌入式操作系统[M
].北京:中国电力出版社,2001.
[4]AdamDunkels.DesignandImplementationofthelwIPTCP/IPStack[M].SwedishInstituteofComputerScience,2001.
[5]AdamDunkels.sys_arch.txtinLwIPsourcecode[CP/OL].[2007-04-10].http://www.sics.se/ ̄adam/lwip.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论