摘 要:主要介绍基于AT91RM9200处理器的以太网接口模块设计,给出基于网络芯片RTL8019AS的系统外围接口相关器件选型。在硬件设计的基础上,给出了详细的编程思想、工作流程以及部分关键代码。在此设计方案下,完全可以实现通过以太网进行通信,达到嵌入式模块之间实时控制的目的。
关键词:AT91RM9200;以太网;RTL8019AS;嵌入式模块
0 引 言
在Internet飞速发展的今天,网络已经渗透到生活的方方面面,与网络的结合已经成为嵌入式系统发展的必然趋势。目前,ARM微处理器已经在多个领域中得到应用,各种基于ARM微处理器的设备应用数量已经远远超过了通用计算机,基于ARM微处理器的开发应用正成为数字时代的技术潮流。
l AT91RM9200简介
AT91RM9200是Atreel公司开发的基于ARM920T核的高性能,低功耗16/32位RISC微处理器,内部集成丰富的外设资源与外设接口,从而为低功耗,低成本,高性能的计算机应用提供了一个单片解决方案。适用于要求外设资源丰富,功耗低,工作稳定的工业控制等方面。
AT91RM9200微处理器最高主频为180 MHz,其双向、32位外部数据总线支持8/16/32位数据宽度,26位地址总线可以对最大64 MB空间进行寻址。片内集成了非常丰富的外围功能模块,包括内存管理单元(MMU)、内部包含16 KB的SRAM和128 KB的ROM,16 KB的数据缓存以及16 KB的指令缓存。其外部总线接口控制器(EBI),支持SDRAM,静态存储器,Burst FLASH以及Compact FLASH。为了提高系统性能还扩展了以下外设;增强的时钟发生器与电源管理控制器(PMC);系统定时器(ST);实时时钟(RTC);高级中断控制器(AIC);4个32位PIO控制器;20通道的外设数据控制器(PDC);10/100兆Base-T型以太网卡接口;4个通用同步/异步串行收发器(UASRT)以及JTAG/ICE接口等。
2 最小系统设计
硬件系统设计是嵌入式系统设计的基础,ARM系统硬件平台主要分为两部分:一部分为基于ARM处理器的最小系统;另一部分为外围扩展电路。系统只有在硬件最小系统调试稳定的基础上,才能灵活、轻松地扩展出其他外围应用,所以最小系统是保证微处理器可靠工作所必须的基本电路。基于AT91RM9200微处理器的最小系统由微处理器、电源电路、时钟电路、复位电路、JTAG接口、存储器模块、串行调试接口等电路组成。
2.1 电源电路设计
在系统中AT91RM9200需要1.8 V和3.3 V电源,另外,大部分外围器件需要3.3 V电源,小部分外围器件还需要5 V电源,假设输入电压为5 V直流稳压电源。为了得到可靠的3.3 V电压,此处选用的电压转换芯片是NCPlll7ST33T3,它的输入电压为5 V,输出电压为3.3 V,最大输出电流为0.8 A。同样,为了得到可靠的1.8 V电压,选用NCPlll7STl8T3,它的输入电压为5 V,输出电压为1.8 V,最大输出电流为0.8 A。由于3.3 V和1.8 V属于NCPlll7系列的2个固定输出电压,所以设计比较简单,只需要在电路中与芯片并联2个典型值为10 tLF、的滤波电容即可。
2.2 时钟电路设计
时钟电路为AT91RM9200和其他外设电路提供工作时钟。处理器内部带有锁相环电路,所以外接频率比较低的晶体振荡器,该设计用晶体振荡器Y1(20 MHz)作为系统的主时钟振荡器。处理器内部还带有实时时钟电路,还需要外接32.768 kHz的晶体振荡器。振荡器产生的主时钟和慢时钟经过微处理器内部2个锁相环后,产生系统所需的各种主时钟、外设时钟以及USB器件工作时钟。
2.3 复位电路设计
AT91RM9200有2个独立的复位信号,即系统复位信号NRST与调试复位信号NTRSI,都是低电平有效。系统上电后,AT91RM9200必须执行一个上电复位,在过渡状态下,它的强制复位信号为低,直到电源电压和振荡器工作频率稳定为止。此外,NRST和NTRST还可以手动复位,以方便用户调试程序。该设计中选用的复位芯片是MAX811,再加上一个手动按键,当工作电压低于3 V或手动复位输入引脚被拉低时处理器复位。
2.4 存储器模块设计
存储器模块包括NOR FLASH存储器和SDRAM存储器。
NOR FLASH存储器用于存储系统运行所需的程序和重要数据,即使掉电,程序和数据也不会丢失。该设计中所用芯片是Atmel公司生产的AT49BNl614T,以保持与AT91RM9200的兼容性,其存储容量为2 MB,工作电压为3.3 V,采用56引脚TSOP封装,具有16位数据宽度。AT91RM9200需要以下引脚与之对应相连:A[1:21],D[0:15],NCSO/BFCS,NRST,BFRDY,BFWE,BFOE。
SDRAM存储器的作用是存放系统运行时的程序和数据,掉电后该部分程序和数据会丢失。设计中使用两片数据宽度为16位的SDRAM并为一个具有32位数据宽度的SDRAM模块,以充分发挥微处理器32位数据宽度的高性能。设计所使用的芯片是HY57V561620,其存储容量为32 MB,工作电压为3.3 V,采用54引脚TSOP封装,16位数据宽度,支持自动刷新和自刷新。AT91RM9200需要以下引脚与HY57V561620对应相连:D[0:31],A[2:11],A[13:14],NBS0,N:BSl,NBS2,NBS3,SDCKE,SDCK,SDCS,RAS,CAS,SDWE。这里特别注意:A12引脚不使用。
2.5 JTAG接口电路设计
JTAG是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,是开发、调试嵌入式系统的一种简洁高效的手段。它有两种接口标准:14针接口和20针接口。该设计中选择20针接口标准。JTAG调试接口设计是否标准,直接影响到硬件平台是否能够连接ARM仿真器。所以在设计时,有以下几点需要注意:
(1)尽可能按照标准的20针接口设计。如果设计成14针接口,一定要严格按照14针接口对应于20针接口的对应关系来设计。
(2)nTRST和nRESET、引脚不用时,要用10 kΩ的电阻拉高,否则JTAG上这两个引脚的信号不确定,会造成ARM调试器不能正常连接目标系统。
(3)JTAG上输出的信号都要用10 kΩ的电阻拉高。
2.6 UART、串行接口电路设计
AT91RM9200的UASRT作为同步/异步串行接口,在调试状态下作为调试串口;在正常工作状态下为一般串行口使用,可以通过RS 232实现与其他设备的通信。该设计中的UART、接口芯片是MAX3232,其工作电压为3.3 V,16引脚SOIC封装。其最为简单且常用的是三线制接法,即地线,接收数据线和发送数据线三脚对应相连。
在完成以上几部分电路设计后,基于AT91RM9200的嵌入式系统就具有了安全可靠的工作条件,也为下面的扩展以太网接口设计打下了良好的基础。
3 以太网接口设计
在ARM系统中,以太网接口是与远程机进行通信及调试的基础,还可以进行内部局域网和互联网间的通信。而基于ARM的系统若没有以太网接口,其应用价值就会大打折扣。因此,就整个嵌入式系统而言,以太网接口电路是必不可少的,但同时也是相对复杂的。
从硬件的角度看,以太网接口电路主要由MAC控制器和物理层接口(PHY)两大部分构成。该设计中所用到的以太网接口芯片RTL8019AS,其内部结构包含这两部分。RTL8019AS是一款高集成度的以太网控制芯片,具有8/16位总线模式,集成了IEEE802.3协议标准的MAC层和PHY层的性能,与NE2000相兼容,支持以太网全双工通信方式;支持UTP,AUI和BNC自动检测,支持16位I/O基本地址选项和额外I/O地址输入/输出完全解码方式;支持存储器瞬时读写,收发可同时达到10 Mb/s的速率,内置16 KB的SRAM,可以方便地与微处理器进行连接。它支持多种嵌入式处理器芯片,内置有FIFO缓存器用于发送和接收数据。
3.1 以太网接口工作原理
使用RTL8019AS作为以太网的物理层接口,它的基本工作原理是:在收到由主机发来的数据包后,侦听网络线路。如果线路忙,它就等到线路空闲为止,否则,立即发送该数据帧。在发送过程中,首先为数据包添加帧头(包括前导字段和帧开始标志),然后生成CRC校验码,最后将此数据帧发送到以太网上。
在接收过程中,它将从以太网收到的数据包在经过解码、去帧头和地址校验等步骤后缓存在片内。在CRC校验通过后,它会根据初始化配置情况,通知RTL8019AS收到了数据包。最后,用某种传输模式(I/O模式、Memory模式、DMA模式)传到ARM系统的存储区中。
3.2 硬件电路设计
用RTL8019AS芯片设计的以太网控制器相关电路,可以通过RJ45连上以太网,在判断网卡芯片是否工作正常时,有两个依据,一是看状态指示LED是否有闪烁;二是用专用网络监听工具软件进行监听。在本设计中用两个LED指示灯表示接收和发送状态,当有网络连接且收发数据包时,LED闪烁。此外,网卡芯片单独不能工作,还必须有一个网络变压器在RJ45接口和网卡芯片中间进行电平转换,该设计中所用的电平转换器是20F001N。另外要特别注意,由于RTL8019AS的复位引脚是高电平有效,而AT91RM9200的NRST引脚是低电平有效,所以不能直接将两个引脚进行连接。该设计所用的解决方法是:在两引脚间加上一个共发射极的三极管,利用它的反相作用,来达到两个复位引脚间的电平匹配。同时,为了提高数据的传输速率,需要将网卡芯片设计成16位的数据通道,这就要求将RTL8019AS的IOCSl6B引脚用电阻上拉来达到设计目的。RTL8019AS与AT91RM9200进行连接还需要以下引脚:NOE,NEW,NCS2,D[O:15],一条中断线IRQ0以及地址线A[O:4](设计RTL8019AS的I/O基地址为300H,所以只需要SA[O:4]接A[O:4],而A[5:19]只需要接地即可)。至此,硬件电路已经设计完毕,整个电路的结构框图如图1所示。
4 软件设计
4.1 以太网口初始化
初始化第一步是复位以太网口。以太网口复位分为硬件复位和软件复位。硬件复位通过给RTL8019AS的RESET引脚发送一个复位脉冲;软件复位通过写端口达到复位,也就是给18~1F之间的任意一个寄存器写入任意一个数,就使得以太网口复位。第二步是设置一些寄存器的初始值,寄存器保存本机的物理地址,只有和寄存器保存的物理地址相同的以太网帧才被接收(RCR寄存器中PRO=O)。
以太网口第一次复位必须是硬件复位,硬件复位以后要经过大约10 ms的等待才能对以太网口操作,特别是发送和接收操作。
4.2 以太网口存储及初始化
RTL8019AS内部RAM地址范围从0x0000~0x7FFFF,其中0x4000~Ox7FFF用作接收和发送缓冲区。缓冲区是按页管理的,256 b为一页,这样接收发送缓冲页面是0x40~0x7F。发送缓冲区的起始页在TPSR寄存器中设置,接收缓冲区的起始页在PSTART寄存器中设置,PSTART实际上也表明了发送缓冲区的结束页。接收缓冲区的结束页是PSTOP。所以发送缓冲区的页从TPSR到PSTART-1,接收缓冲区的页从PSTART到PSTOP-1。一般设置如下:
使发送缓冲区可以容纳下两个最大以太网帧(最大为1 514 B),第一个帧放在SEND_START_PAGEO起始页,第二个帧放在SEND_START_PAGE1起始页,剩下的缓冲区都作为接收缓冲区。
RTL8019AS内部RAM是双口 RAM,因为它要支持两个独立的操作:一个是用户CPU读取RAM中的内容,对这个操作RTL8019AS提供一个读写口,也就是寄存器中的Remote DMA Port;另一个是RTL8019AS内部控制电路把从网络接收的数据写入RAM中,这时RAM称为Local DMA。RTL8019AS通过Local DMA写入RAM是不需要用户干涉的,它通过Remote DMA Port读写RAM。
读RAM见RTLReadRam函数,代码如下:
这个函数表示从address开始读取size个字节的内容到buff指向的内存中。设置CR寄存器指令为:writereg(cr,(0x00 | er_remote_read | cr_start_com-mand));然后从Remote DMA Port读取size次,就得到所需的数据。
写RAM函数,操作基本上和读RAM函数差不多,只要将最后一步的读size次改成写size次就可以。
4.3 发送数据包
发送数据包的基本步骤如下:
(1)首先将发送的起始页,一般是发送缓冲区内的页(Ox40~Ox4b),写入StartPage变量中。将要发送的数据写入地址为StartPage<<8开始的缓冲区中,然后等待上一次发送结束。对于过大或者过小的数据包,不发送;对于过小的帧,在发送时要填充。
TPSR为发送起始寄存器,将StartPage写入TPSR寄存器,高字节写入TBCRH(TBCRl),低字节写入TBCRL(TBCRO)。当写发送命令时,RTL8019AS将从TPSR<<8地址开始发送size个字节的数据。
(2)发送数据帧:发送缓冲区可以存储2个最大的以太网帧,一个起始页为SEND_START_PAGEO,另一个起始页SEND_START_PAGEl,两个交替使用。发送数据帧时,CR寄存器设置为:writereg(cr,((prepage&OxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));发送数据包函数代码如下:
4.4 接收数据包
接收数据包的步骤如下:
(1)接收缓冲操作。当RTL8019AS接收到一个数据包后,自动将接收的数据包放到CURR页。如果一页放不下,则CURR加1;如果CURR=接收结束页,则CURR自动变成接收开始页,继续写入接收的数据。
(2)用户读取接收数据包。RTL8019AS通过Local DMA把接收的数据写入接收缓冲区,并自动改变CURR和识别缓冲区的界限,这些都不需要用户干预。
当一个无错的数据接收完毕,则触发中断处理函数。然后读取数据包到分配的内存,可以从接收字节计数器中得知读取数据。这里要处理一种情况:如果接收的数据包存储不是连续的,在这种情况下要分2次才能读取1个完整的数据包,判断是否存储不连续的条件是:
bnry>Head[1]&&Head[1]!=RECEIVE_START_PAGE
其中:bnry是这个包的起始页;Head[1]是下一个包的起始页。
接收数据包函数与发送数据包函数相似,只需要修改相应寄存器配置即可。然后将接收的数据写入网络接口层的输入队列,如果写入失败则释放内存。写入后上层协议将提取这个数据包。最后网卡通过中断控制器向ARM响应中断,中断完毕清除中断标志。
5 结 语
ARM微处理器正以其极好的性价比和极低的功耗,与其他体系结构的微处理器进行激烈的竞争,其应用将进一步深入到各行各业。可以预测,在将来的一段时期内,ARM微处理器将成为32位微处理器市场的统治者。了解、学习、掌握和应用ARM微处理器技术很有必要,也非常重要。在ARM系统采用高性能的以太网控制器,系统通信和调试快速、可靠,具有很高的实时性。该设计构造一个基于以太网的嵌入式系统的应用,该接口模块的主要任务是完成与外界的信息交互,以达到网络监控的目的。在实际应用中,它运行稳定,能够十分方便地实现网络互连。该系统已在视频监控光端机上得到成功应用,传输速度相当于PC机的10兆网口。