WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(17)-CS8900 NDIS Miniport driver简析(3)

接下来就是对CS8900A网卡的实际操作了,首先介绍下cs8900A网卡芯片:
CS8900芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位接口模式。可选择1:1.414 YL18-1064S或1:2.5  YL18-1080S 变压比例的变压器
  CS8900网卡工作原理:
  CS8900与ARM芯片按照16位方式连接,网卡芯片复位后默认工作方式为I/O连接,基址是300H,下面对它的几个主要工作寄存器进行介绍(寄存器后括号内的数字为寄存器地址相对基址300H的偏移量)。
  ·LINECTL(0112H)
  LINECTL决定CS8900的基本配置和物理接口。在本系统中,设置初始值为00d3H,选择物理接口为10BASE-T,并使能设备的发送和接收控制位。
  ·RXCTL(0104H)
  RXCTL控制CS8900接收特定数据报。设置RXTCL的初始值为0d05H,接收网络上的广播或者目标地址同本地物理地址相同的正确数据报。
  ·RXCFG(0102H)
  RXCFG控制CS8900接收到特定数据报后会引发接收中断。RXCFG可设置为0103H,这样当收到一个正确的数据报后,CS8900会产生一个接收中断。
  ·BUSCT(0116H)
  BUSCT可控制芯片的I/O接口的一些操作。设置初始值为8017H,打开CS8900的中断总控制位。
  ·ISQ(0120H)
  ISQ是网卡芯片的中断状态寄存器,内部映射接收中断状态寄存器和发送中断状态寄存器的内容。
  ·PORT0(0000H)
  发送和接收数据时,CPU通过PORT0传递数据。
  ·TXCMD(0004H)
  发送控制寄存器,如果写入数据00C0H,那么网卡芯片在全部数据写入后开始发送数据。
  ·TXLENG(0006H)
  发送数据长度寄存器,发送数据时,首先写入发送数据长度,然后将数据通过PORT0写入芯片。
  以上为几个最主要的工作寄存器(为16位),CS8900支持8位模式,当读或写16位数据时,低位字节对应偶地址,高位字节对应奇地址。例如,向TXCMD中写入00C0H,则可将00h写入305H,将C0H写入304H。

在GEC2410开发板上,CS8900A连接BANK3,中断EINT9,基址0xA7000300
我们从初始化慢慢来看:
1.CS8900Initialize
实现在cs8900.c,被CS8900RegisterAdapter(CS8900RegisterAdapter被MiniportInitialize调用),也就是在Miniport驱动初始化中进行了网卡的初始化.
代码如下:

其中在最后调用了CSInit,对网卡寄存器进行了初始化.
代码如下:

其中调用了findCS,resetCS,initCS分别进行判断芯片是否存在,复位,初始化工作
使用到的读写网卡寄存器的函数如下:
要通过IO模式访问cs8900A内部寄存器,必须先设置PacketPage Pointer,将要读写的目标寄存器偏移地址写入PacketPage Pointer Port(I/O Base+000AH),然后该目标寄存器的内容就被映射到PacketPage  Data Port(I/O Base+000CH),然后就可以进行相应的读写工作了.CS8900ReadRegister和CS8900WriteRegister就是实现这样的方式.

(1)findCS:

(2)resetCS:

(3)initCS:

(4)initIrq:


2.CS8900ReadEthernetAddress:
初始化好网卡芯片控制器后,CS8900RegisterAdapter调用CS8900ReadEthernetAddress来获取网卡的MAC地址,这里直接进行赋值.

3.CS8900ReceiveEvent
在中断发生时,CS8900HandleInterrupt会被调用,当判断是接收中断时,调用CS8900ReceiveEvent来接收数据.

4.SendHandler:CS8900Send
相应的还有对应的发送函数SendHandler,即MiniportSend的入口函数.
MiniportSend用来发送已经封装好协议的数据帧.
This function transfers a protocol-supplied packet over the network.

其中调用了CS8900RequestTransmit来发出发送要求

当返回状态BUS_ST_RDY4TXNOW为1时,说明CS8900A准备好发送数据,这时调用CS8900CopyTxFrame来发送数据帧

基于NDIS架构CS8900A的驱动在CE下的实现就简单介绍到这里,主要涉及了NDIS网络驱动结构及CS8900A芯片处理.关于NDIS的知识还有很多,有待于进一步学习.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值