
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页基于ax88796b的网络接口模块的设计与实现网络技术应用日益普及的今日,工业现场的仪器仪表、数据采集和控制设备也日趋网络化,工业和网络的结合越来越疏远。而将以太网和系统相结合应用于工业控制中已成为趋势。
ax88796b是asix公司推出的一款为嵌入式和工业以太网应用而设计的低引脚数以太网控制芯片。其内部集成10/100mb/s自适应的介质拜访层mac和物理层phy以及8k×16位的sram。ax88796b可应用于商业级0~70c和工业级-40c~85c的温度范围。ax88796b支持mcs-51系列、80186系列、isa和sram-like接口类型。执行基于ieee802.3/ieee802.3u局域网标准的10mb/s和100mb/s以太网控制功能,并且提供发送队列功能来增加标准ne2000的发送性能。
at91r40008微控制器是基于7tdmi核的32位risc结构的嵌入式微控制器,十分适于工业实时控制应用。ax88796b引脚的lqfp封装削减了空间并且和ne2000兼容,编程容易,其驱动可以简单迅速的移植到许多嵌入式系统中。因此,综合上述两种芯片的优点,我们挑选ax88796b和at91r40008作为工业实时控制中嵌入式网络应用的解决计划,具有很好的工业应用价值和前景。
图1ax88796b内部结构图
一、ax88796b内部结构及工作原理
1ax88796b的内部结构
网卡上电复位时eeprom接口能够通过中偏移为14h的smi/eeprom寄存器来存取数据,mac地址由eeprom中读取,并被自动载入地址为0000h~001fh和0400h~040fh的内部存储区中。假如没有用法eeprom,每次上电对网卡举行初始化时候就手动给它分配一个mac地址。
ax88796b内部有一个16kb(0x4000~0x7fff)大小的sram,该sram是双端口sram,可以同时被网卡读写和用户读写,这片地址空间的一部分被保留用来存放一个缓冲环结构,另一部分可以给用户用法。在本设计中,16kb的sram所有被用来接收和发送数据包。本地dma正是通过这个缓冲环结构来接收报文的。这个结构由一连串相邻的固定长度为256b的缓冲区构成,每256字节称为一页,共有64页。页的地址就是地址的高8位,页地址为0x00~0xff。其中0x40~0x4b为网卡的发送缓冲区,共12页,刚好可以存储2个最大的以太网包,所以我们把发送缓冲区别成两部分举行轮番发送。用法0x4c~0x7f共52页为网卡的接收缓冲区。ax88796b的sram空间结构和收发缓冲区结构2、3所示。
图2sram空间结构
图3收发缓冲区
2ax88796b的工作原理
由四个寄存器来控制接收缓冲区的操作。pagestartaddressregister(pstart)和pagestopaddressregister(pstop)定义了接收缓冲区的起始和终止页号,形成一个接收缓冲环。当前页地址寄存器(currentpageregister)指向第一个用于存储数据包的缓冲区。边界指针寄存器(boundarypointerregister)指向在缓冲环中第一个未被主机读取的数据包。假如本地dma地址与boundarypointerregister的值相等,则接收过程中止。边界指针也被用来初始化远端dma来移动一个数据包,当数据包被移走后,边界指针也向前增长。这样,currentpageregister犹如一个写指针,boundarypointer犹如一个读指针。接收到一个数据包时,从psr中指定的页号开头存储,假如一个256b的缓冲区不够,dma会执行一个前向衔接来衔接下一个缓冲区以存储这个数据包的剩余部分。衔接的时候缓冲区必需是延续的,一个数据包总是会被存储在相邻的缓冲区里。在衔接下一个缓冲区前,缓冲管理规律会执行两个比较,首先比较下一个缓冲区的dma地址是否和pagestopregister相等,若相等,则dma地址被复原为pagestartaddressregister中保存的地址。第二和boundarypointerregister比较,假如相等,则接收报文过程终止。boundarypointerregister能够防止缓冲区里的数据还没有读出就被重写。
要发送和接收数据包就必需通过dma读写ax88796b内部的sram。dma分为远程dma(remotedma)和本地dma(localdma)。cpu从网卡的sram读写数据称为远端dma。ax88796b读写sram称为本地dma。数据包的接收过程:当数据包到达网卡的mac层后,本地dma先将到达mac层的报文传送到网卡的内存中,主机cpu再通过远端dma通道从网卡内存中读取数据包。数据包的发送过程:主机cpu通过远端dma把要发送的数据包送到网卡的内存中,本地的dma将该数据包传送到mac层,再经由内部的phy层发送至网络。
二、网络接口硬件设计
1ax88796b的引脚配置
ax88796b与cpu的衔接方式有mcs51模式、isa模式、186模式,此计划用法了isa8bit模式。片选引脚csn,读写信号rdn、wrn、rstn都是低电平有效,分离和at91r40008相应引脚相连即可。ax88796b的数据线sd0~sd15和at91r40008的data[0:15]相连,可通过软件配置为16位或8位dma数据传输方式。ax88796b的irq是可编程的,中断哀求信号可以通过配置btcr或eeprom来挑选其触发方式和中断i/o缓冲类型,at91r40008中断触发方式应当和btcr的配置相全都。其他重要引脚如iois16、pme、eece、eeck在本设计中悬空处理。引脚配置应按照网卡芯片手册解释和设计计划而定。
对ax88796b控制状态寄存器(csr)的操作,需要确定其基地址,基地址的挑选应按照at91r40008的可编程外部总线ebi的地址和片选信号来确定。
at91r40008的ebi处理位于地址空间0x00400000~0xffc00000的拜访操作,在拜访过程中,它将产生外部器件的控制拜访信号。当把网卡寄存器地址空间映射进ebi后,挺直对ebi地址空间操作即可控制网卡的寄存器读写。对每个映射进ebi接口的外围器件,可以编程等待周期数、数据浮空时光、数据总线宽度(8位或16位)等。
2at91r40008与ax88796b接口
图4硬件衔接原理图
三、ax88796b的驱动程序设计
ax88796b的网卡驱动程序是处理器cpu和网卡硬件的接口,网卡驱动程序主要包括以下几部分:网卡的初始化;数据包的接收和发送;中断处理子程序。
1网卡初始化
在网卡的初始化过程中除了完成对相关寄存器的定义与赋值外,还要完成对接收缓冲环的构造。ax88796b的全部寄存器除了数据端口寄存器外都是8位数据宽度。数据端口寄存器可以通过配置dcr寄存器中的wts设置成8位或16位宽。
ax88796b将偏移量为01h~0fh的寄存器分为4页(page0~page3)举行操作。与ne2000兼容的寄存器惟独3页(page0~page2)。初始化需要设置页0与页1的相关寄存器,页2的寄存器是只读的,不行以设置,页3的寄存器不是ne2000兼容的,不用设置。初始化函数主要要完成以下诸项工作。
/*ax88796b_init*/
/*调用复位子程序对ax88796b举行复位。有两种复位方式:一是硬件复位,通过拉高拉低reset引脚达到复位ax88796b的目的;二是软件复位,从0x1f端口读数据使ax88796b复位。*/
readbyte(reset);
writebyte(reset,0xff);
delay(3000);
writebyte(imr,0);/*初始化中断屏蔽寄存器imr,写入0x00,禁止全部中断哀求。*/
writebyte(cr,0x61);/*选中页1,停止ax88796b。*/
delay(1000);
writebyte(cpr,0x4c);/*初始化接收缓冲环写页指针cpr=pstart*/
writebyte(par0~par5,mac);/*设置网卡芯片mac地址,清除多播地址寄存器。*/
writebyte(mar0~mar7,0);
writebyte(cr,0x21);/*停止网卡,切换到页0。*/
delay(1000);
writebyte(bnry,0x79);/*写边界指针寄存器(bnry)为0x79;*/
writebyte(pstart,0x4c);/*设置接收缓冲区的起始页地址0x4c;*/
writebyte(pstop,0x80);/*pstop接收缓冲区的结束页地址0x80;*/
writebyte(tpsr,0x40);/*tpsr发送页的起始地址0x40;*/
writebyte(dcr,0x80);/*设置数据配置寄存器为8位数据传输模式。*/
/*设置接收配置寄存器为0x4c,使接收缓冲区仅接收广播地址数据包和多点播送地址包。*/
writebyte(rcr,0x4c);
/*设置tcr发送配置寄存器为0x80,采纳全双工模式,当数据包长度小于60字节时自动填充,发送时附加crc校验。*/
writebyte(tcr,0x80);
writebyte(isr,0xff);/*清除中断状态寄存器。*/
writebyte(imr,0x11);/*允许覆写中断和数据包接收中断。*/
writebyte(btcr,0x30);/*中断触发方式为高电平有效,irq输出为推挽驱动方式*/
writebyte(cr,0x22);/*启动芯片,ax88796b初始化完成。*/
delay(1000);
wrcurpge=read(cpr);
rdnxtpge=wrcurpge;
2数据包的发送和接收
推断ax88796b是否接收到新的数据包有两种方式:轮循和中断。用轮循方式较多。为了提高cpu性能和实时性要求,这里采纳中断方式。当网卡接收到新数据包时进入中断,首先推断cpr是否等于bnry,若相等,则表示接收缓冲区已被存满,则停止接收数据包,而不会笼罩旧的数据;若不等,则将接收缓冲区中待读取的数据包的起始地址写入rsar[0,1]寄存器,数据包的开头4字节写入rbcr[0,1]寄存器,并启动远端dma读指令,通过读取4个信息字节得到待读取数据包的长度、接收状态和下一个将被读的页的指针信息。然后通过远端dma读指令,将数据包从网卡sram中读入cpu内存中,并更新读页指针寄存器bnry,cpu每从网卡内存中读走一页数据,bnry便加一,这需要通过程序实现。网卡通过cpr将接收到的数据包写入接收缓冲区,每写完一页,cpr将自动加一,当加到最后的空页(这里是pstop=0x80)时,cpr将自动复原为接收缓冲区的首页(pstart=0x4c)。网卡接收关键性代码如下:
/*ax88796b_receive*/
uint8rcvinfo,i;
uint16pktlength,index;
/*得到待读取数据包的信息,并将其保存在rcvinfo数组中*/
writebyte(rsar0,0x00);
writebyte(idx,rsar1,rdnxtpge);
writebyte(rbcr0,0x04);
writebyte(rbcr1,0x00);
writebyte(cr,0x0a);
for(i=0;i>8));
writebyte(cr,0x0a);
readdata(uint16*buf,uint16length);
/*更新bnry指针,并返回pktlength值*/
rdnxtpge=rcvinfo;
if(rdnxtpge==pstart)
writebyte(idx,bnry,pstop-1);
else
writebyte(idx,bnry,rdnxtpge-1);
returnpktlength;
cpu通过远端dma通道将网卡发送缓冲区的起始地址和要发送的字节数分离写入rsar[0,1]和rbcr[0,1],然后启动远端dma写指令即可将数据包写入网卡内存,此后将字节数写入tbcr[0,1]寄存器,启动发送指令就可将数据包发送到网络上。网卡发送的关键代码如下:
/*ax88796b_transmit*/
/*将数据写入网卡的发送缓冲区*/
writebyte(rsar0,0x00);
writebyte(rsar1,tx_buf_start);
writebyte(rbcr0,(uint8)(len
writebyte(rbcr1,(uint8)(len>>8));
writebyte(cr,0x12);
writedata((uint16*)addr,len);
writebyte(idx,tpsr,tx_buf_start);
/*发送缓冲区的数据发送到网络*/
writebyte(tbcr0,(uint8)(len
writebyte(tbcr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论