浅谈AT91RM9200在以太网接口模块应用
据包在经过解码、去帧头和地址校验等步骤后缓存在片内。在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,((prepageOxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));发送数据包函数代码如下:
4.4 接收数据包
接收数据包的步骤如下:
(1)接收缓冲操作。当RTL8019AS接
模块 应用 接口 以太网 AT91RM9200 浅谈 相关文章:
- 什么是module 以及如何写一个module(转)(04-23)
- 在Linux 2.6内核下编译可以加载的内核模块(04-23)
- 用DSP56F805 PWM模块输出高频正弦波(05-25)
- DSP与PC机的无线交换调制模块设计(09-17)
- 基于TMS320F28334的伺服系统模块设计(02-25)
- Linux安全模块(LSM)简介(06-12)