>
摘要: 介绍基于ARM 内核的微处理器S
关键词:嵌入式以太网;ARM; TCP/ IP
基于ARM 嵌入式以太网接口设计
S
S
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 和中断由外接的EEPROM
在图1 中IOS2 上拉,其它悬空(未画出) ,当Rtl8019as 的引脚悬空时,引脚的输入状态为低电平,里面有一个100 kΩ 的下拉电阻, 因此IOS0 ,IOS1 , IOS3 为低,芯片的I/ O 基址是200H。片选AEN 接处理器的nGCS5 也就是Bank6 ,由于数据总线宽度为16 位,处理器的A1 连接8019 的SA0 ,因此对于处理器来说Rtl8019as 的I/ O 基址是0X
嵌入式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 字节/ 页,只能按页操作,地址从0x4000~0x7FFF ,共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 位输入输出地址,地址偏移量为00H~1FH。其中00H~0FH 共16 个地址,为寄存器地址。寄存器分为4 页: PA GE0 ~PA GE3 ,由RTL8019AS 的CR (命令寄存器) 中的PS1 ,PS0 位来决定要访问的页。但与NE2000 兼容的寄存器只有前3 页。远程DMA 地址包括10H~17H ,都可以用来做远程DMA 端口,只要用其中的一个就可以了。复位端口包括18H~1FH 共8 个地址, 功能一样, 用于RTL8019AS 复位。
RTL8019AS 的内部I/ O 基址是00H ,但ARM 微处理器要访问8019 的地址却不是00H ,该地址是由处理器与网络控制器的连线决定的。由于8019 的AEN 与ARM 的nGCS5 相连,所以8019 的I/ O 基址是0x
下面通过3 个函数来介绍8019 的初始化、传输及接收数据的过程。
void Rtl8019_Init ()
{
Et hernet _ Reg00 = 0x21 ;/ / CR 命令寄存器选择寄存器页面0 ,中止远程DMA
Et hernet_ Reg04 = 0x40 ;/ / TPSR 传送页面开始寄存器,设置发送缓冲区起始地址
Et hernet_Reg01 = 0x
Et hernet_Reg02 = 0x80 ;/ / PSTOP 页面停止寄存器,设置接收缓冲区停止页面地址
Et hernet_Reg03 = 0x
Et hernet_Reg07 = 0xff ;/ / ISR 寄存器,清除中断标志位
Et hernet_Reg
Et hernet_Reg0b = 0 ;/ / 这里将远程字节数清零
Et hernet_Reg
Et hernet_Reg0d = 0x02 ;/ / TCR 传输配置寄存器,选择内部Loop back 模式
Et hernet_Reg0e = 0x48 ;/ / DCR 数据结构寄存器,8 位DMA 方式
Et hernet_Reg
Et hernet _ Reg00 = 0x61 ;/ / CR 选择寄存器页面1
Et hernet_Reg07 = 0x4d ;/ / CURR 当前页面寄存器,设置首先接收缓冲器页面地址
Et hernet_Reg08 = 0xff ;/ /
Et hernet _ Reg09 = 0xff ;/ / MAR0 - MAR7 ,多点地址寄存器,
Et hernet_Reg
Et hernet_Reg0b = 0xff ;
Et hernet_Reg
Et hernet_Reg0d = 0xff ;
Et hernet_Reg0e = 0xff ;
Et hernet_Reg
/ / 下面6 条语句设置MAC 地址, 寄存器为PAR0~PAR5 :实际地址寄存器,这些寄存
/ / 用来对目标地址数据包进行比较,以确定接收或者拒绝接收。地址放在数组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_ Reg
/ / 地址包,小于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_Reg
Et hernet_Reg0b = 0 ;
Et hernet_ Reg00 = 0x
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_Reg
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 的嵌入式以太网接口设计。经实际应用,实现了网络通信控制功能,实现了工业现场测控设备的网路化、生产的信息化、网络化与远程控制等功能。将嵌入式系统与以太网技术相结合,从而实现了办公自动化与工业自动化的结合,在工业控制领域具有广泛的应用前景。