[转]用Ax88796实现SA1110的以太网接口

href="file:///C:/DOCUME~1/专业实~1/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" rel="File-List" /> href="file:///C:/DOCUME~1/专业实~1/LOCALS~1/Temp/msohtml1/01/clip_editdata.mso" rel="Edit-Time-Data" />

 

摘要 讨论嵌入式微处理器SA1110与以太网控制器Ax88796在实际应用中的硬件连接问题;给出软件设计方面的一些注意事项,SA1110的网络应用提供一种参考。

关键词 嵌入式 SA1110 Ax88796 以太网 CPU MII

   Intel公司的StrongARM SA1110是一款主要面向嵌入式应用的高性能32位微处理器,目前已经被广泛应用在PDA等手持设备上。SA1110最高主频可达206 MHz,具有内存管理单元(MMU)和大容量的指令/数据高速缓存(16 KB/8 KB),兼容SDRAMSMROM等多种存储设备,并带有LCDPCMCIA控制器。

1  Ax88796简介

  Ax88796是台湾Asix公司推出的NE2000兼容快速以太网控制器。其内部集成有10/100 Mb/s自适应的物理层收发器和8K×16位的SRAM,支持MCS-51系列、80186系列以及MC68K系列等多种CPU总线类型。

   Ax88796执行基于IEEE802.3/IEEE802.3u 局域网标准的10Mb/s100Mb/s以太网控制功能,并提供IEEE802.3u兼容的媒质无关接口MII(Media Independent Interface),用以支持在其它媒质上的应用。此外,Ax88796还提供可选用的标准打印接口,可用于连接打印设备或用作通用I/O端口。其结构 框图如图 1所示。


1  Ax88796结构框图

   Ax88796的地址总线SA[9:0]与数据总线SD[15:0]分别与CPU的地址/数据总线相连。CPU通过I/O读写NE2000寄存器来控制 Ax88796的工作状态,通过远程DMA FIFOsAx88796的内部缓存SRAM进行数据交换。SRAMMAC核之间进行Local DMA将数据发送至MAC,再经由内部的PHY层发送至RJ45接口,或者经过MII接口送至外部的物理层芯片。

  SEEPROM接口可以用来连接串行EEPROMEEPROM可用于存储MAC地址,Ax88796每次初始化时读取。

硬件接口电路

   Ax88796CPU[1:0]两个输入引脚用来设置与不同CPU总线连接时Ax88796的工作模式。在Asix公司官方提供的资料 中,Ax88796在与SA1110连接时,是将这两个引脚都拉低,也即设为ISA总线模式。但实际应用中发现这样设置,在对Ax88796奇地址寄存器 进行8位数据宽度的访问时存在问题:无论写入何值,读出值总为00H(由于Ax88796NE2000系列的以太网控制器,MAC层的控制寄存器都采 用8位数据宽度,因此存放地址有奇偶之分;CPU在对Ax88796的控制中,需要对其寄存器进行8位数据宽度的读写)。

  最初的 怀疑是,Ax88796的奇地址寄存器无法正确写入数据。但用示波器抓取数据总线上的信号,发现SA1110已经正确送出数据;并且当对Ax88796 的奇地址寄存器进行读操作时,Ax88796在数据总线D[7:0]上送出的数据正是此前SA1110向其奇地址寄存器写入的数据。也就是说,数据已经被 正确写入了Ax88796的奇地址寄存器中,SA1110从中读取数据时出现了问题。

  根据Ax88796资料中的相关说明, ISA总线模式下,对其NE2000寄存器进行8位数据宽度操作时,8位数据线D[15:8]是被内部拉低的。因此,数据都是在数据总线D[7:0]上 进行传送的,Ax88796由地址线A0上信号电平的高低来判断所访问地址的奇偶,如表 1所列。

1  Ax88796ISA总线模式下的读写操作

  SA1110最大支持32位数据总线,它在进行不同宽度的数据读写时,有其自身的一套机制:

   在对奇地址进行8位数据宽度的写操作时(如写19H,地址线A0送出1,而数据总线D[31:24]D[23:16]D[15:8] D[7:0]上同时送出该8位数据(即送出19191919H;在对奇地址进行8位数据宽度的读操作时,地址线A0送出1,数据总线D[15:8]上的 数据作为有效数据被读入SA1110的内部寄存器,而其余数据线上的数据被丢弃。

  由此可见,SA1110Ax88796的奇地 址寄存器进行8位数据宽度的读操作时,Ax88796在数据总线D[7:0]上送出的有效数据,SA1110丢弃了;而数据总线D[15:8]上的值 00H被误认作有效数据读入了SA1110。这就解释了为什么对Ax88796奇地址寄存器可以正确写入却无法正确读取的问题了。

  综合上面的分析,在实际中采用的接口电路如图 2所示。


2  Ax88796SA1110接口电路图

   Ax88796CPU[0]上拉,CPU[1]下拉,设置它工作在186总线模式下。SA1110的地址线A0经反向器后接至Ax88796的引脚, 用来确保SA1110Ax88796的控制寄存器的访问都为8位数据宽度。实验证明,这并不影响Ax88796Remote DMA时与SA1110之间的16位数据宽度传输。

  SA1110GPIOx引脚可以复用作中断输入,因此用来连接Ax88796的中断输出IREQ

3  软件方面

  由于Ax88796NE2000兼容芯片,所以Linux kernel中的驱动ne.c8390.c只需作较少的改动就可以用来驱动SA1110平台上的Ax88796

  将ne.c中的侦测端口地址列表netcard_portlist[]的初始赋值改为kernel中为nCSx所映射的虚拟地址。

  将ne.c里的中断侦测程序段去掉,分配dev->irq=IRQ_GPIOx;而在8390.c中的每次enable_irq函数前,GPIOx设置为上升沿触发。

  由于Ax88796具有独立的端口被用来支持对EEPROM的访问,因此ne.c中访问EEPROM所采取的Remote DMA方式应改写为对端口的访问方式。

  另外值得一提的是,SA1110的片选输出nCSx与读写信号输出nOEnWE之间的时序关系可以由对应的SA1110寄存器MSCx中的控制位来调节。一个合适的取值可以大大提高SA1110Ax88796之间的数据传输速度。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值