基于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微控制器是基于ARM7TDMI核的32位RISC结构的嵌入式微控制器,非常适于工业实时控制应用。AX88796B引脚的LQFP封装减少了PCB空间并且和NE2000兼容,编程简单,其驱动可以容易快速的移植到许多嵌入式系统中。因此,综合上述两种芯片的优点,我们选择AX88796B和AT91R40008作为工业实时控制中嵌入式网络应用的解决方案,具有很好的工业应用价值和前景。

 

 图1 AX88796B内部结构图


        AX88796B内部结构及工作原理

        1 AX88796B的内部结构

        网卡上电复位时EEPROM接口能够通过CSR中偏移为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所示。

        图2 SRAM空间结构

图3 收发缓冲区


        2 AX88796B的工作原理

        由四个寄存器来控制接收缓冲区的操作。Page Start Address Register (PSTART)和Page Stop Address Register(PSTOP)定义了接收缓冲区的起始和终止页号,形成一个接收缓冲环。当前页地址寄存器(Current Page Register)指向第一个用于存储数据包的缓冲区。边界指针寄存器(Boundary Pointer Register)指向在缓冲环中第一个未被主机读取的数据包。如果本地DMA地址与Boundary Pointer Register的值相等,则接收过程中止。边界指针也被用来初始化远端DMA来移动一个数据包,当数据包被移走后,边界指针也向前增长。

        这样,Current Page Register如同一个写指针,Boundary Pointer如同一个读指针。接收到一个数据包时,从PSR中指定的页号开始存储,如果一个256B的缓冲区不够,DMA会执行一个前向连接来连接下一个缓冲区以存储这个数据包的剩余部分。连接的时候缓冲区必须是连续的,一个数据包总是会被存储在相邻的缓冲区里。在连接下一个缓冲区前,缓冲管理逻辑会执行两个比较,首先比较下一个缓冲区的DMA地址是否和page Stop Register相等,若相等,则DMA地址被恢复为page start address register中保存的地址。其次和boundary pointer register比较,如果相等,则接收报文过程终止。Boundary Pointer Register能够防止缓冲区里的数据还没有读出就被重写。

        要发送和接收数据包就必须通过DMA读写AX88796B内部的SRAM。DMA分为远程DMA(Remote DMA)和本地DMA(Local DMA)。CPU从网卡的SRAM读写数据称为远端DMA。AX88796B读写SRAM称为本地DMA。数据包的接收过程:当数据包到达网卡的MAC层后,本地DMA先将到达MAC层的报文传送到网卡的内存中,主机CPU再通过远端DMA通道从网卡内存中读取数据包。数据包的发送过程:主机CPU通过远端DMA把要发送的数据包送到网卡的内存中,本地的DMA将该数据包传送到MAC层,再经由内部的PHY层发送至网络。

        网络接口硬件设计

       1 AX88796B的引脚配置

       AX88796B与CPU的连接方式有MCS51模式、ISA模式、186模式,此方案使用了ISA 8bit模式。片选引脚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位)等。

       2 AT91r40008与AX88796B接口电路

 

图4 硬件连接原理图

       电路如图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复位。*/

继续阅读
基于AX88796B的网络接口模块的设计与实现

网络技术应用日益普及的今天,工业现场的仪器仪表、数据采集和控制设备也日趋网络化,工业自动化和网络的结合越来越密切。而将以太网和嵌入式系统相结合应用于工业控制中已成为趋势。 AX88796B是Asix公司推出的一款为嵌入式和工业以太网应用而设计的低引脚数以太网控制芯片。其内部集成10/100Mb/s自适应的介质访问层MAC和物理层收发器PHY以及8K×16位的SRAM。AX88796B可应用于商业级0~70C和工业级-40C~85C的温度范围。AX88796B支持MCS-51系列、80