admin管理员组

文章数量:1532187

2024年1月26日发(作者:)

嵌入式以太网接口的研究与设计

the study and design of embedded ethernet interface

吕昌泰 罗永刚

lv,changtai luo,yonggang

山东理工大学

摘要:本文使用微处理器和以太网协议芯片,组成嵌入式以太网接口,用软件实现简化的TCP/IP协议,解决了仪器仪表与以太网的连接问题。使用该接口,通过现有计算机网络,实现了对仪器仪表的远程控制和访问。

关键字:以太网;RTL8019;TCP/IP

中图分类号:TP391 文献标志:A

Abstract:Basing on analysis of ethernet technology and TCP/IP protocol,the paper

introduces a interface of connecting intelligent instrument to ethernet directly. It

also gives the design of hardware and software.

keyword:Ethernet;RTL8019;TCP/IP

1前言

随着计算机网络技术的不断成熟,数据传输速度、可靠性的不断提高,计算机网络开始在实时数据采集领域得到应用。随之,传统的仪器仪表也开始向网络化方向发展,现在仪表一般带有RS485或RS232接口,如果需要连接到计算机网络中则需要经过再次转换,但如果仪表带有以太网接口,则可以直接与计算机网络连接。

2网络接口设计

该接口主要有微处理器、以太网协议芯片组成,扩展一片62256用于存储网络数据,微处理器通过串行口和仪表的主处理器通信。微处理器采用飞利浦公司的P89C51RD2,以太网协议芯片采用台湾Realtek公司生产的RTL8019,它集成以太网控制器、介质访问控制子层(MAC)和物理层,可以方便地设计基于ISA总线的系统。另外,它还具有与NE2000兼容、软件移植性好以及价格低廉等优点,它提供给微控制器简单接口,使微控制器只需要对其相关寄存器进行相应读写即可完成对以太网的操作。

电路中还扩展了一片x5045,用于芯片复位及存储网络地址,RTL8019主要接线图如下:

AD0-AD7

SD0-SD7

LED1

A0-A4

SA0-SA4

LED2

SA5-SA7

LED3

SA10-SA19

JP

SA8-SA9

SMEMRB

IOCS16B

SMEMWB

IOS0-IOS3

HR

TPIN+

90117

8019_CS

TPIN-

AEN

INT0

HD

INT0

RESET

LD

RESDRV

图1 RTL8019 连线图

RTL8019的IOCS16引脚通过一个27k的电阻拉低,使得RTL8019工作在8位数据总线模式,它的数据线SD0-SD7与CPU的AD0-AD7连接,它的工作方式有跳线模式和非跳线模式,我们使用跳线模式,芯片的I/O地址和中断都是由跳线决定,RTL8019的JP引脚接高电平,用来选择跳线方式。IOS3-0用于选择I/O基地址,IOS3-0均为低电平时,RTL8019选择的端口I/O基地址为300H。它的地址偏移量共32个,用到的地址空间为300H-31FH,将地址线SA0-SA4与CPU的A0-A4连接,SA8-SA9接高电平,其余地址线接低。读写信号线IORB、IOWB分别接微处理器

的读写信号线,把RTL8019的AEN引脚作为片选信号。RSTDRV为芯片复位引脚。LED 各接一发光二级管以反映通信状态,LED1表示通信有冲突,LED2表示接收到网上的信息包,LED3表示发送信息包,RTL8019内置10BASE-T收发器,所以网络接口电路比较简单,通过一个滤波器之后,连接到HR90117A,这是一个集成网络变压器的RJ45接口,使用该接口既节省了空间,又增加了可靠性。

当引脚ICS16B接低电平时,芯片工作在8位DMA操作模式,该设计共使用芯片中18个寄存器,00H-0FH 16个寄存器地址,10H为DMA地址,1FH 为复位地址。

控制器收发数据以内部的RAM为核心。RTL8019 有两块内部RAM,一块16k字节的RAM,用来存储转发的数据,一块为32字节的RAM。16k存储区是分页的,每256个字节称为一页,共有64页,程序设计中使用这块RAM存储接收或是发送数据包,可由用户进行配置,一部分用来存放接收的数据包,一部分用来存储发送的数据包,但是地址不能交错。由于RTL8019接收或发送是按页为单位,因此即使某页没有完全填满数据,则下一包数据也不能继续使用该页,只能使用新的页,并且数据是按页连续存放的。

2.1 RTL8019驱动程序

从程序员的角度来说,对RTL8019的操作是比较简单,驱动程序只需要将要发送的数据按一定的格式写入芯片并启动发送命令,RTL8019会自动把数据包转换成物理帧格式在物理信道上传输。反之,RTL8019收到物理信号后将其还原成数据,按指定格式存放在芯片RAM中以便主程序取用。简而言之就是RTL8019完成数据包和电信号之间的相互转换。以太网协议由芯片硬件自动完成,对程序员透明。RTL8019驱动程序包括:芯片初始化程序、接收数据包程序、发送数据包程序,以下仅介绍芯片初始化部分。

为了能够使其启动并处于准备接收或准备发送数据的状态,必须对相应的寄存器进行初始化,这些寄存器包括CR、DCR、RBCR、 PSTART、PSTOP、ISR、IMR、PAR0-PAR5、MAR0-MAR7、CURR、TCR、RCR等,以下是对芯片的初始化程序。

Void Intnet()

{

Reg00=0x21;

//使芯片处于停止模式,这时进行寄存器设置

Delay_MS(10); //延时10毫秒,确保芯片进入停止模式

page(0);

Reg0a=0x00;

//清rbcr0

Reg0b=0x00;

//清rbcr1

Reg0c= 0xe0;

//RCR,监视模式,不接收数据包

Reg0d= 0xe2;

//TCR,loop back模式

Reg01=0x4c;

Reg02=0x80;

Reg03=0x4c;

Reg04=0x40;

//TPSR,发送起始页寄存器

Reg07=0xff;

//清除所有中断标志位,中断状态寄存器

Reg0f=0x00;

//中断屏蔽寄存器清0,禁止中断

Reg0e=0xc8;

// 数据配置寄存器,8位dma方式

page(1);

Reg07=0x4d;

Reg08=0x00;

Reg09=0x00;

Reg0a=0x00;

Reg0b=0x00;

Reg0c=0x00;

Reg0d=0x00;

Reg0e=0x00;

Reg0f=0x00;

Reg00=0x22;

//这时让芯片开始工作

SetMacID();

//将芯片物理地址写入到MAR寄存器

page(0);

Reg0c=0xcc;

//将芯片设置成正常模式,跟外部网络连接

Reg0d=0xe0;

Reg00=0x22;

//启动芯片开始工作

Reg07=0xff;

//清除所有中断标志位

}

2.2 TCP/IP简化协议实现

TCP/IP是一个分层的协议,每一层实现一个明确的功能,对应着一个或是几个传输协议,每层相对它的下层都作为一个相对独立的数据包来实现。由于采用微处理器,资源速度有限,所以对TCP/IP协议作了简化处理。

应用程序 应用程序应用程序应用程序

依据协议中的

端口号分用

ICMP(0X01)

TCP(0X06)UDP(0X11)

依据IP协议中

的协议分用

IP(0X0800)

ARP(0X0806)RARP(0X0805)依据以太网首

部帧类型分用

以太网驱动程序

进入的帧

图2 TCP/IP分层结构

以上分层结构,实际上也是以太网接收数据的流程,同时也体现了一种以太网数据分用的思想。网络层在接收到以太网驱动程序送到的IP数据包后,按照IP数据帧中的协议种类,对数据进行处理,去掉IP首部数据,形成TCP或UDP或ICMP报文进行处理。

传输层在得到UDP的报文后,按照UDP协议中的端口,分别送给不同的应用程序,若传输层得到的是TCP报文,则要根据TCP的状态转换图进行处理。

在编程的时候,使用如下的程序框架

if(以太网数据报到达)

{ if( 以太网首部帧类型==0x0806 )

{ ARP处理程序 }

if( 以太网首部帧类型==0x0805 )

{ RARP处理程序 }

if( 以太网首部帧类型==0x0800 )

{ 根据IP包的协议类型分别区分是TCP包还是UDP包}

}

在TCP或UDP的函数处理中,根据目的端口号,分别将数据送往不同的用户程序。RTL8019仅负责把数据接收到其内部的数据缓冲区。发送数据时要对数据进行逐层封装,即加上相应的首部,作为所经过每层的标识。具体原理是将用户数据加上本层的标志,然后发往协议的下一层,然后加上下一层的协议标志,继续向下传,这样依次向下传,到最后可以得到所传送的真正数据。

3. 上位机测试软件编程

上位机测试软件使用CAsyncSocket类派生出新类CTermSocket。

class CTermSocket : public CAsyncSocket

{ DECLARE_DYNAMIC(CTermSocket);

protected:

virtual void OnConnect(int nErrorCode);

//连接

virtual void OnSend(int nErrorCode);

//发送数据

virtual void OnReceive(int nErrorCode);

//接收数据

virtual void OnClose(int nErrorCode);

//关闭

};

创建连接:

m_pSocket = new CTermSocket();

if (!m_pSocket->Create())

{AfxMessageBox("Socket 创建失败");return;}

连接到远程服务器:

if (!m_pSocket->Connect(dlg.m_strHostName, dlg.m_nPort))

{ if (m_pSocket->GetLastError() != WSAEWOULDBLOCK)

{ CString strError;

ring(m_pSocket->GetLastError());

Display("Connect() failed: %srn",strError);

m_fConnected = FALSE;

delete m_pSocket;

m_pSocket = NULL;

}

}

发送数据:

m_pSocket->Send(szLine, strlen(szLine));

当收到数据包后自动执行下面的函数:

int nBytes = m_pSocket->Receive(szBuf, 255, 0);

4. 结论:

该接口采用微处理器和以太网协议芯片,使用软件实现了简单的TCP/IP协议,成功的将仪器仪表与计算机网络连结起来,使用灵活、成本低,由于仪器仪表对外传输的数据少,所以RTL8019能完全满足实时需求。本设计已成功的应用于电力网络仪表,达到了较好效果。

参考文献:

[1] 基于以太网的电量计量计费系统研究 微计算机信息 2004年11期

[2] 嵌入式工业以太网接口开发与应用 计算机工程 2003年16期

作者简介:

吕昌泰(1957-),男,山东淄博人,副教授,研究方向:计算机控制技术和计算机网络安全。

罗永刚(1979-),男,硕士,山东理工大学工程技术学院讲师。

(255012 山东省淄博市张店区共青团路88号 山东理工大学工程技术学院 )

Author Introduction:

lvchangtai(1957-),Male, Pro. teacher of shandong university of technology .

orientation of study is computer systerm Structure and Safety of Network

luoyonggang(1979-),Male,postgraduate,teacher of shandong university of technology .

本文创新:

使用微处理器和以太网芯片,组成嵌入式以太网接口,将仪器仪表与计算机网络连接起来,实现了对仪表仪器的远程采集和控制,该三设计成本低、使用灵活,将会有广阔的市场前景。

本文标签: 数据芯片使用协议接口