kevin_me 发表于 2013-5-28 12:34:23

linux下基于SPI的ENC424J600网卡驱动,实现modbus tcp,关于中断...

前一阵子的工作有了阶段性的进步,已经成功的将ENC424J600网卡芯片挂到linux下了,CPU使用的AT91SAM9G45,使用的是SPI1总线。

请看图:

启动之后,通过ifconfig -a也看到了eth0及eth1,前者是DM9161网卡,在/sys/class/net下也有eth0及eth1。

现在有几个问题想请教一下坛内的ARM老手指导指导。

就是同样的内核映像文件烧到nand中(ENC4242的驱动作为built-in方式集成在内核文件中),同样的硬件,上电之后,有时能够顺利的初始化网卡,有时则不能(驱动函数probe都跑不完,返回的错误提示是I/O错误)

如图:

所以就很奇怪,(DM9161则很稳定,都是照搬公版和官方代码),按道理讲,程序只要在硬件上跑通一次,那么程序则应该是没有问题的,现在只能怀疑是不是硬件有问题,而ENC424与CPU之间的连接又非常简单,4根SPI线,晶振波形也很漂亮。

我试过不动硬件和软件,反复的断电重启,无法识别网卡占多数,较少能正常初始化。所以才想购买一台逻辑分析仪去排查硬件问题。

软件部分,我也将最近的学习体会总结一下,想开发的可以学习,有什么问题也请指教。

1.内核使用的2.6.30
2.ENC的驱动程序是移植一个老外写的,基于microchip和linux下enc28j60改的,需要学习源码的点这里,现在版本最新是1.30
3.驱动程序中没有硬件连线的初始化,需要在内核文件的/linux-2.6.30/arch/arm/mach-xxx/board-xxx.c中,添加SPI结构体信息,因为网卡是基于SPI的。
如图:
4.以上的代码作用是指定哪条SPI总线,片选脚,最大频率,SPI工作模式等,而另外几根通信线在同样的目录下XXX_device.c中是现成的,不需要做任何修改,
如图:
5.至于ENC的驱动程序,之前一直以为直接挂到内核里面就足够了,后来查了一些资料,发现在SPI传输的时候,没有去管CS信号线的翻转,因此我在老外的这个驱动程序中,只要涉及到SPI的都在函数路口加入了CS低,return之前加入了CS拉高(同时我也疑问,在内核文件中,基于SPI的芯片的驱动文件,里面貌似都没有CS信号的处理,为啥?谁知道?)
6.在ENC的驱动文件中,也没有看到基于INT中断的ISR函数,我研究了一下驱动文件,貌似根本没有启用芯片本身的中断信号处理,而是通过SPI总线中断进行的,这个不太明白,难道需要轮询数据包吗?通过中断标志数据的收发不是更高效吗?谁知道?
如图:

现在问题还有,就是即使内核启动之后,ENC424网卡仍然没有正常通行起来,不知道哪里还未处理好,PHY层是OK的,因为插上网线之后,GREEN和YELLOW LED均闪烁了。

谁做过相关移植工作的,请指导一下,不胜感激啊,小弟已经快hold不住了,搞了2个月了。

kevin_me 发表于 2013-5-28 13:06:03

来人啊,难道大家都午睡吗。

chiooo1 发表于 2013-5-28 13:53:10

luck851 发表于 2013-5-28 14:24:31

9x35就是双网卡

luck851 发表于 2013-5-28 14:24:49

错了是9x25

kevin_me 发表于 2013-5-29 09:58:53

luck851 发表于 2013-5-28 14:24 static/image/common/back.gif
错了是9x25

我来研究一下,希望能获得圣光之灵{:lol:}

acai19871123 发表于 2013-5-29 15:10:02

努力呀,向你老学习

kevin_me 发表于 2013-5-30 01:10:21

linux里面,怎么注册中断的?看了一下手册是配置aic寄存器。

有点不明就里,而驱动程序中使用的是spi1的总线上的中断,疑问的是enc424片子上本身是有2个中断输出的,wol就不管了,而int信号我是直接连到arm的irq引脚上,谁知道怎么注册啊?

而且驱动程序中说明了,不使用外部中断做任何isr,实在有点搞不懂了 。

xiefy21 发表于 2013-8-14 08:19:15

mark……
顶一个…

xl_1120 发表于 2014-1-24 14:20:41

本帖最后由 xl_1120 于 2014-1-24 14:23 编辑

接收寄存器没做好,我也在搞424j600驱动,一直解决不了接收的问题,开启了全部数据包接收,一旦有乱的数据,会把网卡的接收弄死,无法进接收中断。

ljt80158015 发表于 2014-10-27 20:23:42

luck851 发表于 2013-5-28 14:24
错了是9x25

9x25已带两个网卡,如果再扩展两个网卡是否可行?

ljt80158015 发表于 2014-10-27 20:30:24

spi扩展速率很慢的,直接用总线扩展啊

wangcjishu 发表于 2016-6-17 20:57:44

先检查硬件吧,看看硬件接线有没有问题。
页: [1]
查看完整版本: linux下基于SPI的ENC424J600网卡驱动,实现modbus tcp,关于中断...