>
首页 » 业界动态 » 基于ARM的嵌入式以太网通信的实现

基于ARM的嵌入式以太网通信的实现

作者:段海龙,彭辉俊,程 健  时间:2007-01-21 21:23  来源:

摘要: 介绍基于ARM 内核的微处理器S3C44B0X、以太网控制芯片RTL8019 的性能,设计了基于二者的硬件平台。并介绍了TCP/ IP 协议,给出了硬件接口驱动的程序实现,最终实现嵌入式以太网的数据传输。

关键词:嵌入式以太网;ARM; TCP/ IP

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

S3C44B0X芯片介绍

S3C44B0X 微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案,它使用ARM7 TDMI ,最高工作频率为66 MHzS3C44B0X 通过在ARM7 TDMI 内容基础上扩展一系列完整的通用外围器件,使系统费用降至最低。

RTL8019AS 芯片介绍

RTL8019AS 是在嵌入式领域应用广泛且性价比很高的网络控制芯片。Rtl8019AS 的主要性能有: 符号Et hernet II IEEE802.3 ( 10Base5 ,10Base2 ,10Base T) 标准; 全双工,收发可同时达到10 Mbit/ s 的速率;内置16 kB SRAM ,用于收发缓冲,降低对主处理器的速度要求;支持8/16 位数据总线,8 个中断申请线以及16 I/ O 基地址选择;支持UTP , AUI , BNC 自动检测, 还支持对10Base T 拓扑结构的自动极性修正;允许4 个诊断L ED 引脚可编程输出; 100 脚的PQFP 封装,缩小了PCB 尺寸。

硬件电路设计

硬件电路设计如图1 所示。

8019 采用IN T0 中断,连到处理器的外部中断1 。数据总线宽度为16 , 因此IOCS16B 上拉。Rtl8019as 3 种工作方式:跳线方式, I/ O 和中断由跳线决定;即插即用方式( PnP) ,由软件进行自动配置;免跳线方式, I/ O 和中断由外接的EEPROM93C46 里的内容决定。使用哪种方式由J P 决定,这里J P 上拉,我们选择跳线方式。

在图1 IOS2 上拉,其它悬空(未画出) ,Rtl8019as 的引脚悬空时,引脚的输入状态为低电平,里面有一个100 kΩ 的下拉电阻, 因此IOS0 ,IOS1 , IOS3 为低,芯片的I/ O 基址是200H。片选AEN 接处理器的nGCS5 也就是Bank6 ,由于数据总线宽度为16 ,处理器的A1 连接8019 SA0 ,因此对于处理器来说Rtl8019as I/ O 基址是0X0A000400H20F001 是网卡滤波器,内部包含一对低通滤波器和一对隔离变压器,直接与RJ 45的水晶插座连接。

嵌入式TCP/ IP 协议的实现

硬件接口驱动的实现

RTL8019AS 内部可分为远程DMA 接口、本地DMA 接口、介质访问控制(MAC) 逻辑、数据编码解码逻辑和其它端口。

远程DMA 接口是指单片机对RTL8019AS 内部RAM 进行读写的总线,ISA 总线的接口部分。单片机收发数据只需对远程DMA 操作。本地DMA 接口是RTL8019AS 与网线的连接通道,完成控制器与网线的数据交换。介质访问控制(MAC)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA 通道送到RTL8019AS中的发送缓存区, 然后发出传送命令; RTL8019AS 完成了一帧的发送后,再开始下一帧的发送。RTL819 接收到的数据通过MAC 比较、CRC 校验后,FIFO 存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO 逻辑对收发数据作16 字节的缓冲,以减少对本地DMA 请求的频率。

RTL8019AS 内部有16 kB SRAM ,分为256 字节/ ,只能按页操作,地址从0x40000x7FFF ,64 页组成环形队列作为收发缓冲区。与之相关的寄存器有PSTART (page start register) , PSTOP(page stop register ) , BNRY( boundary register ) ,CURR(current page register) 4 个。PSTART 定义接收缓冲区起始地址,PSTOP 定义接收缓冲区结束地址,BNRY 指向队列中没有被主机读取的第一个数据包地址,CURR 指向将要接收数据包的存储起始地址。CURR 指针由RTL8019AS 自动改变,BNRY由程序控制。要接收和发送数据包就必须通过DMA 读写RTL8019AS 内部的16 kB RAM。该RAM 实际上是双端口的RAM ,2 套总线连接到该RAM , 一套总线RTL8019AS 读或写该RAM ,即本地DMA ;另一套总线是单片机读或写该RAM ,即远程DMA

RTL8019AS 具有32 位输入输出地址,地址偏移量为00H1FH。其中00H0FH 16 个地址,为寄存器地址。寄存器分为4 : PA GE0 PA GE3 ,RTL8019AS CR (命令寄存器) 中的PS1 ,PS0 位来决定要访问的页。但与NE2000 兼容的寄存器只有前3 页。远程DMA 地址包括10H17H ,都可以用来做远程DMA 端口,只要用其中的一个就可以了。复位端口包括18H1FH 8 个地址, 功能一样, 用于RTL8019AS 复位。

RTL8019AS 的内部I/ O 基址是00H ,ARM 微处理器要访问8019 的地址却不是00H ,该地址是由处理器与网络控制器的连线决定的。由于8019 AEN ARM nGCS5 相连,所以8019 I/ O 基址是0x0A000400H

下面通过3 个函数来介绍8019 的初始化、传输及接收数据的过程。

void Rtl8019_Init ()

{

Et hernet _ Reg00 = 0x21 ;/ / CR 命令寄存器选择寄存器页面0 ,中止远程DMA

Et hernet_ Reg04 = 0x40 ;/ / TPSR 传送页面开始寄存器,设置发送缓冲区起始地址

Et hernet_Reg01 = 0x4c ;/ / PSTART 页面开始寄存器,设置接收缓冲区首页面地址

Et hernet_Reg02 = 0x80 ;/ / PSTOP 页面停止寄存器,设置接收缓冲区停止页面地址

Et hernet_Reg03 = 0x4c ;/ / BN TR 边界寄存器,设置接收缓冲区最后页面的指针

Et hernet_Reg07 = 0xff ;/ / ISR 寄存器,清除中断标志位

Et hernet_Reg0a = 0 ;/ / RBCR0 ,RBCR1 远程字节寄存器,用于设置远程DMA 字节数

Et hernet_Reg0b = 0 ;/ / 这里将远程字节数清零

Et hernet_Reg0c = 0x20 ;/ / RCR 接收结构寄存器,监视方式,不接收数据包

Et hernet_Reg0d = 0x02 ;/ / TCR 传输配置寄存器,选择内部Loop back 模式

Et hernet_Reg0e = 0x48 ;/ / DCR 数据结构寄存器,8 DMA 方式

Et hernet_Reg0f = 0x00 ;/ / IMR 中断屏蔽寄存器,禁止一切中断

Et hernet _ Reg00 = 0x61 ;/ / CR 选择寄存器页面1

Et hernet_Reg07 = 0x4d ;/ / CURR 当前页面寄存器,设置首先接收缓冲器页面地址

Et hernet_Reg08 = 0xff ;/ /

Et hernet _ Reg09 = 0xff ;/ / MAR0 - MAR7 ,多点地址寄存器,

Et hernet_Reg0a = 0xff ;/ / 这里均设为FFH ,接所有组播地址的数据包

Et hernet_Reg0b = 0xff ;

Et hernet_Reg0c = 0xff ;

Et hernet_Reg0d = 0xff ;

Et hernet_Reg0e = 0xff ;

Et hernet_Reg0f = 0xff ;

/ / 下面6 条语句设置MAC 地址, 寄存器为PAR0PAR5 :实际地址寄存器,这些寄存

/ / 用来对目标地址数据包进行比较,以确定接收或者拒绝接收。地址放在数组mac中。

Et hernet_Reg01 = mac[0 ] ;

Et hernet_Reg02 = mac[1 ] ;

Et hernet_Reg03 = mac[2 ] ;

Et hernet_Reg04 = mac[3 ] ;

Et hernet_Reg05 = mac[4 ] ;

Et hernet_Reg06 = mac[5 ] ;

Et hernet_ Reg0c = 0xcc ;/ / RCR ,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包) 和多点播送

/ / 地址包,小于64 字节的包丢弃,校验错的数据包不接收;

Et hernet_Reg0d = 0xe0 ; / / TCR ,设置发送配置寄存器,启用CRC 自动生成和自动校/ / ,工作在正常模式;

Et hernet_Reg00 = 0x22 ; / / CR ,回到正常工作方式

}

初始化完成之后就可以进行报文的发送和接收了。

void getnic_data (U8*data , U16 len) {/ / data为读取的数据存放的地址,/ / len 是需要读取的数据长度

Et hernet_Reg07 = 0x40 ;/ / 清除中断标志

Et hernet_Reg0a = len ;/ / Reg0a ,Rge0b 设置需要读取的字节长度

Et hernet_Reg0b = 0 ;

Et hernet_ Reg00 = 0x0a ;/ / 开始远程DMA 读取

while (len )

{

U8 b = Et hernet_Reg10 ;

*data + + = b ;

}

}

void p ut nic_data (U8*data , U16 len) / / data是要发送的数据存储的地址,

{  / / len 是要发送数据长度

Et hernet_Reg07 = 0x40 ;/ / 清中断标志

Et hernet_Reg0a = len ;/ / 设置数据长度

Et hernet _ Reg0b = 0 ; Ethernet _ Reg00 =0x12 ;/ / out nic (CMDR , 0x12) ;/ / 开始远程DMA写数据while (len )

Et hernet_Reg10 = 3 data + + ;

len = 255 ;

while (len & & ( Et hernet_Reg07 &0x40) = =0)

len ;

}

以太网数据流程图

以太网数据流程图如图2 所示。

结束语

基于ARM 的嵌入式以太网接口设计。经实际应用,实现了网络通信控制功能,实现了工业现场测控设备的网路化、生产的信息化、网络化与远程控制等功能。将嵌入式系统与以太网技术相结合,从而实现了办公自动化与工业自动化的结合,在工业控制领域具有广泛的应用前景。

相关推荐

ARM收购Geomerics 强化行动装置游戏视觉

ARM  游戏视觉  2013-12-18

ARM:2013年Mail芯片出货量将超三亿片

ARM  芯片  2013-12-06

ARM控制智能机及平板芯片市场趋势将持续

ARM  控制智能机  2013-11-28

推动连网与行动创新 ARM聚焦物联网商机

ARM  物联网  2013-11-26

全球75%企业高管关注物联网新机遇

ARM  物联网  2013-11-08

英特尔将代工ARM芯片 或引发芯片价格下跌

英特尔  ARM  2013-10-31
在线研讨会
焦点