随着信息技术的飞速发展,特别是互联网的迅速普及,3C(计算机、通讯、消费电子)合一的加速,数字化时代已经来临,嵌入式系统技术的应用日益广泛。嵌入式系统具有系统内核小、专用性强、系统精简、高实时性的操作系统软件等特点,使得其在工业过程控制、交通管理、信息家电及机器人系统等研究生产领域中得到广泛应用。而在这些应用中,为了实现多个嵌入式微处理器之间的信息交流,大多利用CAN、RS-232、RS-485等总线将微处理器组网,这种网络的通信距离比较有限,有关的通信协议也比较少,并且一般是孤立于Internet以外的。嵌入式系统接入Internet以后,不仅实现了设备的远程控制、维护和升级,而且从另一层意义上讲,接入Internet的设备已经成为网络共享资源的一部分。
另外,以太网一般都基于TCP/IP协议,使得整个网络只有一种底层通讯协议,可以满足控制系统各个层次的要求,不仅使得企业信息网络和控制网络得到统一,而且易于和Internet实现无缝连接。通常,一个嵌入式系统接入Internet,可选择一个提供TCP/IP协议的嵌入式操作系统,或是在现有操作系统之上加入TCP/IP协议栈,实现TCP/IP连接。对于嵌入式系统,TCP/IP软件协议栈也构成了系统成本的一部分,而这部分投入占有不小的比例。同时,软件协议栈的引入无疑要占用更多的系统资源,对于嵌入式系统来说是可观的。但是对于嵌入式系统在网络化开发的过程中,首先要解决的就是与以太网络的连接问题,亦即如何将通用处理器的网络连接装置(以太网络控制器)应用于嵌入式网络的开发。 目前市面上有许多以太网络控制芯片,可是其中大多耗电量高、功能复杂,不适用于价格低廉的嵌入式系统之中。我们选择使用的是RTL8019以太网控制器。
系统硬件设计
AM186ed嵌入式微处理器
作为高性能的80C186兼容16位嵌入式微控制器,AM186ed微控制器结合了80C186/188 系列微控制器体系结构,但具有更高的性能。同时,它还带有一个含有DRAM控制器的装置用以提高性能。与80C186/188微控制器相比,Am186ED 微控制器可以减少体积、降低功耗和系统开销而增强性能和功能性。Am186ED 控制器为那些需要超过64K字节RAM的系统提供了一个理想的解决方案。 含有DRAM控制器的装置指的是降低系统开销而增强功能性的应用组件,包括一个DMA控制器,和可以直接连到DMA通道的串行通信口。另外,Am186ED 微控制器还集成了一些常见的外围器件,包括3个定时器,片选逻辑,一个中断控制器,2个DMA控制器,一个看门狗定时器等。
RTL8019AS以太网控制器
由Realtek公司生产的RTL8019AS高集成以太网控制器芯片集成了介质访问控制子层(MAC)和物理层的性能,可以方便地设计基于ISA总线的系统,简单的与通用单片机进行接口。另外,它还具有与NE2000兼容、软件移植性好,以及低廉的价格等优点,在市场上的10Mbps网卡中占有相当的比例。
主要性能
(1)适应于Ethernet II 、IEEE802.3协议、10Base5、10Base2、10BaseT;
(2)支持8位、16位数据总线,8个中断申请线以及16个I/O基地址选择;
(3)全双工,收发可同时达到10Mbps的速率,具有休眠模式,以降低功耗;
(4)内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求;
(5)可连接同轴电缆和双绞线,并可自动检测所连接的媒介类型;
(6)支持闪存读写;
(7)允许四个诊断LED引脚可编程输出;
(8)100 脚的TQFP封装,缩小主机板尺寸。
硬件系统结构
主要使用了XILINX公司生产的CPLD芯片XC9536,实现了RTL8019的各个逻辑控制信号。这里,RTL8019使用了跳线模式、IO方式读写。详细说明如下:
(1)、给RTL8019的NE2000兼容的各个寄存器分配了PCS0引脚,IO地址为00H~FFH,这样,只需要将CPU的A0~A4连接到RTL8019上就可以了。RTL8019默认的IO地址是300H~3FFH,因此将RTL8019上的SA19~SA10和SA7~SA5接为地,SA9、SA8接为VCC。
(2)、使用16位方式读写RTL8019AS芯片,将RTL8019上的IOCS16B引脚通过10K的上拉电阻接为VCC。使用IO模式读写网络芯片,SMEMRB和SMEMWB接上拉电阻为VCC。
系统软件设计
嵌入式实时多任务操作系统
在该系统设计中,引入了实时操作系统(RTOS)。作为一个完整的操作系统,RTOS有一个可靠性很高的实时内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的应用程序接口(API);根据各个任务的优先级,合理地在不同任务之间分配CPU的时间,保证程序执行的实时性、可靠性。内核一般都能提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。
本系统采用的是Ati 公司(Accelerated Technology Incorporated )的Nucleus 操作系统。我们已经成功的将该操作系统移植到AM186ed上。
软件设计
系统的软件设计主要是针对网络芯片进行的。下面就详细介绍一下对于RTL8109AS的软件设计
其软件设计包括芯片初始化、数据发送和接收三部分。
芯片初始化
对RTL8019的初始化主要是对其控制寄存器进行初始化设置。8019的寄存器按照其地址及功能可大致分为NE2000兼容寄存器组和即插即用寄存器组两大类。我们在该系统设计中用到NE2000兼容寄存器组,共有64个寄存器,所有寄存器均为8位,映射到四个页面。
网卡初始化过程:首先要对网卡进行复位:18H-1FH共8个地址,为复位端口。对该端口地址的读或者写入任何数,都会引起网卡的复位。
temp=inportb(IO_ADDR+0x1f); //读网卡的复位端口
outportbb(IO_ADDR+0x1f,temp); //写网卡的复位端口
说明:IO_ADDR是RTL8019的基准地址,其全部的寄存器地址都是由它得出来的,在初始化时必须赋予它正确的基准地址值。我们在此所使用的值为0x0000。
网卡复位完成之后,要对网卡的工作参数进行设置,以使网卡开始工作。对网卡的参数设置主要是对命令寄存器CR进行设置,CR主要是用于选择寄存器页、启动或停止远程DMA操作以及执行命令。
①PS1和PS0两位用来选择寄存器页:
②RD2、RD1、RD0三位代表要执行的功能。
③TXP为写入1时发送数据包,发完自动清零;
④STA,STP两位用来启动命令或停止命令
网卡初始化的软件编程如下:
8019_init()
{
outportb(IO_ADDR+0x00,0x21); //选择页0寄存器,网 卡停止 运行
outportb(IO_ADDR+0x01,0x4c); //接收缓冲区范围
outportb(IO_ADDR+0x02,0x80); //PSTOP,构造缓冲 环:0x4c-0x80;
outportb(IO_ADDR+0x03,0x4c); //BNRY,设置指针;
outportb(IO_ADDR+0x04,0x40); //发送缓冲区范围
outportb(IO_ADDR+0x0d,0x4c); //
outportb(IO_ADDR+0x0e,0xc8); //设置数据配置寄存 器,使用FIFO缓存, 普通模式,8 位数据 DMA;
outportb(IO_ADDR+0x0f,0xff); //清除所有中断标志 位
outportb(IO_ADDR+0x0f,0x00); //设置中断屏蔽寄存 器,屏蔽所有中断;
page(1); //选择页1寄存器;
outportb(IO_ADDR+0x07,0x4d); //初始化当前页寄存 器,指向当前正在写 的页的下一页;
outportb(IO_ADDR+0x08,0x00); //设置多址寄存器 MAR0-5,均设置 为0x00;
outportb(IO_ADDR+0x09,0x00);
outportb(IO_ADDR+0x0a,0x00);
outportb(IO_ADDR+0x0b,0x00);
outportb(IO_ADDR+0x0c,0x00);
outportb(IO_ADDR+0x0d,0x00);
outportb(IO_ADDR+0x0e,0x00);
outportb(IO_ADDR+0x0f,0x00);
outportb(IO_ADDR+0x00,0x21); //选择页0寄存器,网 卡执行命令
}
数据的收发
通过对地址及数据口的读写来完成以太网帧的接收与发送。要接收和发送数据包都必须读写网卡内部的16KB的RAM,必须通过DMA进行读和写。
以数据的发送为例,该过程应包含三个步骤:数据包的封装;通过远程DMA将数据包送到数据发送缓冲区;通过RTL8019的本地DMA将数据送入FIFO进行发送。具体过程如下:
①数据包在发送前应该按规定的格式封装好,格式如下:
②把上面的数据包通过远程DMA写送入RTL8019的数据发送缓冲区
outportb(IO_ADDR+0x00,0x22);
outportb(IO_ADDR+0x07,0x40); //设置中断状态寄存器ISR 为40H,清除发送完成标志
outportb(IO_ADDR+0x09,0x40); //设置远程DMA地址 寄存器RSAR1、0为 4000H,即发送缓冲 区开始地址
outportb(IO_ADDR+0x08,0x00);
outportb(IO_ADDR+0x0a,0x50); //设置远程DMA字节 计数寄存器RBCR1、 0为发送数据包的长 度80
outportb(IO_ADDR+0x0b,0x00);
outportb(IO_ADDR+0x00,0x12); //设置CR为12H,设置 命令寄存器为远程 DMA写
for(i=0;i<80;i++)
outport(0x10<<1,*(buffer+i)); //往数据端口写入发 送数据
temp=inportb(IO_ADDR+0x07); //查询中断状态寄存 器ISR,等待远程 DMA完成
outportb(IO_ADDR+0x0b,0x00);
outportb(IO_ADDR+0x0a,0x00);
outportb(IO_ADDR+0x00,0x22); //设置CR为22H,设置 RBCR1、0为0,远程 DMA停止
outportb(IO_ADDR+0x07,0x40); //设置中断状态寄存 器ISR为40H,清除发 送完成标志 ③启动本地DMA将数据发送出去。
outportb(IO_ADDR+0x06,0x50);
outportb(IO_ADDR+0x05,0x00); //设置发送字节计数 器为发送数据包的 长度
outportb(IO_ADDR+0x04,0x40); //设置发送页面起始 地址TPSR为40H,即 发送缓冲区开始地 址高位字节
outportb(IO_ADDR+0x00,0x26); //启动发送
AM186ed的Nucleus NET的实现
上面数据的收发完成的是以太网的MAC层和物理层的协议。要真正实现嵌入式系统与以太网上其他设备进行通信,需要在系统上实现TCP/IP协议。
这里我们使用了Nucleus嵌入式操作系统,该操作系统有TCP/IP组件,将RTL8019AS芯片作为一个Device,可以完全移植到Nucleus上去。
结束语
本设计实现的嵌入式以太网接口支持RS232、RS485和以太网的连接,可以通过以太网接入Internet,从而实现从Internet上监控嵌入式设备,可以广泛应用在工业控制领域,有很高的实用价值。
| |
|