嵌入式系统TCP/IP网络解决方案
梁志明(微02)孔凡志(微02)甘珏瑜
摘要:以单片机为核心的嵌入式系统在TCP/IP网络中的数据传送技术,远程监控、数据传送方面的应用,提供一种具体的实现方法。
关键字:嵌入式系统单片机  TCP/IP
一、综述
随着互联网应用的日益普及,以单片机应用系统为中心的小型嵌入式设备正成为当今电子界的热门话题。
本课题研究主要研究嵌入TCP/IP协议的单片机在网络通信中的数据传输技术。包括实现TCP/IP链路层中的直接链路数据传输,网络层中的IP协议、ARP地址解析协议,传输层的TCP传输控制协议、UDP用户数据报协议,以及应用层的HTTP、TELNET等网络协议。
这种嵌入了TCP/IP协议的单片机系统,为现有的互联网提供了一种价格低廉、硬件简单、相对完善的网络接入方案,在实际应用中更会体现传输速度快、使用方便等优点,并且有着广泛的应用前景,特别是数据采集、数据传输领域。
二、硬件设计
硬件设计上采用8位的单片机系统配以太网接口芯片来完成以太网的网络通讯。考虑到8位单片机的处理能力有限,以太网接口芯片也亦采用10M的接口芯片。设计中采用了Topstar公司的ISA口的10M网卡TE-2500B,芯片采用Realtek公司的RTL8019AS芯片。该芯片可以工作在8位总线模式下。单片机采用了Winbond公司的W78E58B,该芯片支持32K 的程序代码,具有3个计数器和256字节的内部RAM。
单片机使用串行口与上位机通讯,上位机通过终端向单片机发送命令或者接受单片机处理后的数据。上位机与单片机间使用MAX232转换电平。
因为单片机需要处理大量的以太网数据报,所以大容量的RAM必不可少,设计中使用了HM62256作为单片机的扩展RAM,其大小为32K。总线连接上也留出地址线A15作为网卡地址选择。
完成的设计原理图见附录,现在对部分电路作详细介绍。
1.单片机部分
电路为扩展的数据存储器模式,单片机的工作频率为22.1184MHz,P0和P2端口用作数据及地址总线,P3.0(RXD)和P3.1(TXD)用作串行通讯,P3.2(/INT0)用作网卡的中断IRQ,P3.4用作网卡的冷复位RESET,P3.3和P3.5用作I2C总线的SDA和SCL,扩展的32K外部RAM(62256)使用地址(0x0000 - 0x7
FFF)。
设计中留有了I2C总线,以便于扩充各种的串行器件,以适合不同的应用场合,目前的串行器件层出不穷,比如:E2PROM,串行DAC/ADC,串行时钟芯片等等。
未使用的P1端口保留给用户应用程序,在后面的WEB控制的Demo中,演示了如何利用WEB实现控制LED,该LED被连接到P1.7上。
图1 单片机部分电路
2.串行口部分
上位机使用是RS-232-C接口,接口电气特性(RS-232-C中任何一条信号线的电压均为负逻辑关系。即:
逻辑“1”,-5~-15V;逻辑“0” +5~+15V 。噪声容限为2V。)都与单片机的串行口电气特性不同,需要转换电路,该电路较简单,仅使用一片MAX232和4个电容。
图2 串口电平转换电路
3.网卡部分
图3 ISA网卡接口部分
ISA接口分为两个部分A,B和C,D部分。C,D部分为扩展部分,设计中只用到3个引脚,
VDD 、GND 、/IOCS16。/IOCS16为16位IO 选择引脚,在网卡复位时,该引脚为输入,通过R10下拉地,所以网卡在复位时选择为8位IO 模式。
tcpip协议在设计时就考虑了如何解决安全问题
地址线和数据线都位于ISA 的A,B 部分,A0-A19为ISA 网卡的地址线,D0-D7为网卡的数据线。我们所使用的8019网卡有3种配置方法:1.跳线模式,2.即插即用P&P 模式,3.串行Flash 配置模式。P&P 模式用于PC 机中,在我们的试验板上无法实现,能实现的为跳线模式和串行Flash 配置模式,但Topstar 的ISA 的网卡并未在电路上提供硬跳线支持,对网卡作电路修改可能会影响网卡的正常工作,所以最后参照REALTEK 公司所提供的RTL8019AS 手册,使用串行Flash 配置模式。设置网卡工作的
I/O :0x0240 -- 0x025F ,使用中断Interrupt :IRQ9。
网卡的引脚33(RESET)连接到单片机的P3.4,引脚35(IRQ9)连接到单片机的/P3.2(INT0),引脚44(/IOR),45(/IOW)连接到单片机的P3.7(/RD),P3.6(/WD)。
网卡使用的地址为20位,而单片机可提供的总线地址只有16位,我们无法把网卡直接挂于16位的总线上。我们使用的网卡的IO 地址为0x240~0x25F 共32个地址。
图4 网卡IO 地址表 有图可以看出,实际使用的IO 地址只有5位,分别是A0-A4,其他地址都是固定的0010。从这点出发,我们使用高位地址的
7位来选中网卡已经绰绰有余了。 地址线 A6,A9(ADDR15) A5(ADDR13)
A4(ADDR12)
A3(ADDR11)
A2(ADDR10)
A1(ADDR 9) A0(ADDR 8) 值    1 0 X X X X X P 2口
P2.7
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
图5 网卡IO 与单片机总线映射
A7,A8,A10-A19接地,A6,A9接总线最高位P2.7,A0-A5接至总线高位地址上(P2.0-P2.5)。那么网卡的地址0x240-0x25F 就被映射到单片机总线的0x0C000- 0x0DF00了。
图6 访问映射后的网卡地址
三、软件设计
1. 系统IO 及驱动程序 1) 伪多任务的实现:
单片机需要处理的3个主要任务,接受终端的命令,查询接受以太网的数据报和后台服务超时程序。所以一个多任务的轮转机制是必不可少的,设计没有采用多任务的实时操作系统(RTOS),而只是采用一个简单的轮转调度方案。使用RTOS 需要占用一部分的系统资源,
地址线 A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 240H            0 0    1 0 0 0 0 0 0 ...            0 0    1 0 X X X X X 25FH            0 0    1 0    1    1    1    1    1
另外实验证明接受一个最大的数据报需要耗时60ms,而同时发送一个回应数据报也需要耗时70ms,而通常Internet上数据报的超时都在秒级的,所以在1s内,可以同时处理8个最大的数据报,这样只要保证接受任务处理8个数据报以内,就能保证下一个任务在超时前完成,实际上我们在一次任务中只处理了一个数据报,这样就不会因为在一个任务上停留时间过长而破坏了系统的实时性。串口使用了终端,在串口接受缓存区允许的情况下,可以接受到实时的命令输入。
图7 多任务轮转调度
2)系统时间和计时器
使用Timer2作为时间计数器,定时间隔为1ms。系统提供的时间为一个累加的16位秒计时,计时可以达到18个小时。系统另外提供1个8位ms级倒计时器和1个8位的100ms 倒计时器。该倒计时器可以被用作超时计时,也可用作255ms内和25s内的计时器。
图8 系统时间
使用倒计时器用作ms级或100ms级的计时器,任务时对倒计时器赋0xFF,这样倒计时器就开始工作了,任务结束时对倒计时器按位取反,即得到计时的间隔。在Ping程序中可以看到使用了ms级的计时器对目标返回的Echo数据报的时间间隔做了计时。
3)硬件的驱动程序
RTL8019AS网卡驱动程序
这里指的驱动程序不同于Windows下的VXD和WDM驱动,这里指的是实模式下一组硬件芯片的驱动子程序。RTL8019AS的工作流程非常简单,实现只需要4个函数,分别是复位,初始化,收报和发报。
前导位PR 帧起始
位SD
目标地址
DA
源地址
SA
类型TYPE/长
度LEN
数据域DATA 填充
PAD
校验
FCS
62bit 2bit 48bit 48bit 16bit <=1500Bytes 32bit
图9 802.3帧结构
TYPE:0x0800代表IP报,0x0806代表ARP报,0x814C代表SNMP报,0x8137代表IPX/SPX,小于0x0600用于IEEE802帧表明了数据的长度。
DATA:DA+SA+TYPE+DATA<=1514,最大的数据报长度为1514字节(RFC894)
PAD:DA+SA+TYPE+DATA<60时,即数据报长度不足60字节时,填充PAD。(RFC894)
接受状态下一页
指针
帧长
目的地
址DA
源地址
SA
类型
TYPE
数据域DATA 填充
PAD
校验
FCS
8bit 8bit 16bit 48bit 48bit 16bit <=1500Bytes 32bit
图10 RTL8019AS 接受帧结构
目的地址DA 源地址SA 类型TYPE/长度LEN 数据域DATA 填充PAD 48bit 48bit 16bit <=1500Bytes
图11 RTL8019AS发送帧结构
发送功能的实现:
待发送的数据报必须按照RTL8019AS的发送帧结构,将发送帧存入8019AS的RAM中,把数据报所在的首地址和长度告知芯片后(TPSR、TBCR),启动发送命令,即可实现数据报的发送。
接受功能的实现:
我们使用查询的方法来接受数据报。接受缓存是一个FIFO列队,PSTART、PSTOP两个寄存器限定了列队的开始和结束页。芯片设有2个指针CURR写指针和BNRY读指针,CURR 受芯片控制。我们在查询中判断(CURR==BNRY),如果CURR和BNRY指向不同的地址,则说明有新的数据报,那么从芯片的16kRAM中读取数据报。使用RTL8019AS接受帧的结构体指针,就可以取得不同部分的数据了。接受到的数据报保存到单片机RAM中,系统的实现是接受到一个处理一个。
芯片DMA结构介绍:
图12 双口RAM结构
RTL8019AS使用了双口的RAM,这使操作的DMA端口分为了远端(Remote)和本地(Local)两个。如图12所示,本地DMA接口指得是硬件收发电路侧,而远端DMA指得是连接到CPU 接口侧。这里的DMA与平时讲的DMA有不同,本地DMA由芯片控制器本身完成,而远端DMA 也需要主机CPU参与读取数据。具体的方法是,先由CPU给出首地址和长度,然后DMA读写RAM芯片,每操作一次RAM地址会自动加1,这样的DMA操作省去了普通DMA操作时需要先发地址的时间,速度较快,但是只能完成连续地址空间的DMA读写操作。
芯片初始化的具体参数和程序实现可以参阅附录的源代码8019as驱动部分。
另外设计中编写了一些外设的驱动程序:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。