基于ARM和LwIP的嵌入式以太网接口设计

时间:2022-05-29 10:21:04

基于ARM和LwIP的嵌入式以太网接口设计

摘要:本文介绍了一种嵌入式以太网接口的设计与实现,采用基于ARM7TIMD内核的处理器S3C44B0X和以太网控制器RTL8019AS进行硬件设计,详细阐述了硬件接口电路、驱动程序的编写及LwIP协议栈在S3C44B0X上的移植,并给出了通信函数的流程图,通过软硬件的调试,实现嵌入式以太网的数据传输。它适用于中小型嵌入式系统的网络化,可满足数据采集和自动化控制等工业的需要。

关键词:嵌入式以太网;硬件接口电路;驱动程序;LwIP

中图分类号:TP393.11文献标识码:A文章编号:1007-9599 (2011) 15-0000-02

Design of Embedded EthernetInterface Based on ARM&LwIP

Xiang Yuanming1,Hu Jiansheng2

(1.PLA 94064 army,Xianyang713706,China;2.Armed Police Engineering College,Xi'an710077,China)

Abstract:This paper gives a design and principle of embedded Ethernet interface.Using the microprocessor S3C44B0X with ARM7TDMI kernel and the Ethernet controller RTL8019AS to design the hardware interface,it specifies the interface circuit diagram,the driver program and the transplant of LwIP to the S3C44B0X,and it also gives the the flow chart of the communication function.Through the debugging of software and hardware,it has realized the transmission of embedded Ethernet data.It can be applied in the medium or miniature embedded network.meeting the need of data collection and autocontrol.

Keywords:Embedded-Ethernet;Hardware-interface;Driver-program;LwIP

一、引言

以太网由于它的普遍性及低廉的接口价格,因而已经作为一种最通用的网络广泛地应用于生产生活中。嵌入式设备在价格、体积及实时性等许多方面,是通用计算机无法比拟的。实现嵌入式以太网接口,可适用于各种嵌入式应用场合。

二、接口电路设计

S3C44B0X通过RTL8019的I/O口,对其相关寄存器进行配置。在通信时,S3C44B0X与RTL8019AS的收发缓存器的数据交换由远程DMA控制,而RTL81019AS收发缓存器与以太网总线之间的数据交换由它的本地DMA控制。RTL8019AS通过中断的方式通知S3C44B0X数据收发的结果和状态,S3C44B0X通查询中断状态寄存器的值,作出相应处理。RTL8019AS使用免跳线方式,I/O和中断由外接的EEPROM93C46里的内容决定。8019的AEN与S3C44B0X的nGCS2连,所以对应S3C44B0X的存储器的起始地址0x0600―0000;RTL8019的基址地址由其引脚IOS0、IOS1、IOS2、IOS3 8019决定。

S3C 44B0X的nOE、nWE分别与RTL8019AS的IORB、IOWB相连,控制数据的读和写操作,低电平有效。RTL8019使用中断0,对应S3C44B0的外部中断1。S3C44B0X的地址总线A1~A20、数据总线D0~D15分别与RTL8019AS的地址总线SA0~SA19、数据总线SD0~SD15相连,实现地址的选择和数据传输。

三、驱动程序设计

(一)RTL8019AS的初始化

RTL8019AS初始化是根据RTL8019AS的使用手册,编写初始化函数-void ethernetif_init(struct netif*netif),完成相关工作模式的寄存器设置,分配和初接收和发送缓冲区,初始化网卡接收地址。步骤如下:首先复位RTL8019AS;然后选中Page0设置数据配置寄存器为16位,清除远程DMA计数器,设置接受缓冲区区间,设置接受和发送配置寄存器,清除中断寄存器,屏蔽所有中断,设置寄存器BNRY;选中Page1初始化物理地址和组播地址,设置寄存器CURR;选中Page0开启RTL8019AS的所有中断。

(二)数据的传输和发送

数据的传输和发送由本地DMA传输和与远程DMA传输两部分完成,其中,前者大部分工作由RTL8019AS自动完成,我们要做的是设置收发缓冲区的大小及指针变量,这些工作在RTL8019AS的初始化时已完成,因此我们在编写数据收发函数时,只需对远端DAM口的进行相关操作,这里,由于篇幅关系,我们仅介绍接受数据函数void ethernetif_input(struct netif*netif)。(发送数据函数-void ethernetif_output(struct netif*netif)省略。)

void ethernetif_input(struct netif*netif) //netif是一个指向网络接口结构体类型的指针

{RTL8019_R00=0x21; //选择寄存器页面0,首先终止远程DMA;

RTL8019_R07=0x40;//允许内部中断的产生//

RTL8019t_R0a=(*netif).len;//设置要通过远程DMA接收数据包的长度//

//通过以下两条语句设置远程DAM的起始地址,这里选择0x0040//

RTL8019t_R08=0x00;RTL8019t_R09=0x40;

RTL8019_R00(page0)=0x0a; //对DAM端口进行访问;

While((*netif).len--)do{(*netif).data++=RTL8019_10;}

(三)中断处理

这里,我们采用中断和查询相结合的方式,来决定是否发送和接收数据。编写中断处理函数-void ethernetif_isr(void),通过对RTL8019AS中断寄存器(ISR)的访问,来判断是何种中断,并作出相应的响应。若ISR(0)=1,表明RTL8019AS已正确接收数据,此时调用ethernetif_input();若IST(1)=1,表明RTL8019AS已成功发送数据,此时调用void time_delay(),延时下一个等待中断的到来,或等待应用层继续发送请求。对于ISR其余各中断位,我们不关心,因此通过对中断屏蔽寄存器IMR相应位置1,将它们屏蔽。

四、lwIP在S3C44B0X上的移植

LwIP是瑞士计算机科学院的AdamDunkels等开发的一套用于嵌入式系统的开放源代码的TCP/IP协议栈[3]。它一般只需要几十KB的RAM和40KB左右的ROM,适合在嵌入式系统中使用。在使用和移植的过程中可根据传输数据的不同需求进行删减和增补。LwIP协议栈把所有和硬件,编译器相关的部分独立出来,放在/src/arch下面。将LwIP移植到ARM7TDMI内核的SamsungS3C44B0X上就是修改这个目录下的文件,其他的文件则根据需要做相应的修改[4]。

(1)与CPU或编译器相关的include文件。/src/arch/include/arch目录下cc.h、cpu.h、perf.h中有一些与CPU或编译器相关的定义,数据长度,字的高低位顺序等。

(2)对于在无嵌入式操作系统的应用而言,只需在sys_arch.c中实现如下三部分函数:sys_sem_t信号,sys_mbox_t消息和sys_arch_timeout等待超时函数。

(3)网络设备驱动程序。LwIP的网络驱动有一定的模型,/src/netif/ethernetif.c文件即为驱动的模板。在移植时,将第3部分介绍的初始化函数、接受函数驱动程序、发送函数和中断处理函数添加到模板中即可。

五、结束语

本设计已成功地进行以太网数据传输。由于S3C44B0X出众的性价比,及丰富的接口,通过扩展相应的电路,本设计可以应用到嵌入式仪器仪表、工业数据采集网络、自动化控制等许多领域。

参考文献:

[1]S3C44B0X User's Manual.Samsung,2000

[2]RTL8019AS用户手册[Z].RealtekSemi conductor Co.Ltd,2000

[3]LwIP sourcecode.AdamDunkel

[4]Sys_arch.txt in LwIP sourcecode.AdamDunkels

上一篇:基于Web Services的分布式网络智能配置方案及... 下一篇:弄另水电站无粘结型预应力锚索施工技术