专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

DM9000AEP网口驱动总结(STM32)

作者:Jie华哥   来源:Jie华哥   点击数:  更新时间:2014年06月16日   【字体:

 首先,总的来说,调好DM9000AEP的驱动就3个函数:

1、DM9000A_Init();
2、DM9000A_Read();
3、DM9000A_Write();
一、对于DM9000A的初始化,网上有很多,主要就是配置好DM9000A的寄存器而已。在这里要特别主要几点:
1、DAVICOM公司的产品命名非常怪异,至少我感觉是这样。DM9000(100pin)和DM9000A(48pin)是不同的,另外还有什么 DM9000C系列的,这个大家注意一点就行。另外在他们的官网是找不到充足的资料的,连datasheet有些产品都找不到,我在调试DM9000A的 时候碰到一些大家很少遇到的问题(接收慢),于是我发了封邮件给他们的技术支持,结果他们并没有第一回复我的问题,而是先只是问了我是哪家公司的,于是我 就没回他们了(是我太天真了),你们还是靠广大劳动群众吧。在这里我要特别感谢那些开源的开发板商,像正点原子、安富莱等,大家可以在他们的官网找到很多 相关例程和问题的答案。
2、DM9000A的初始化的复位延时一定要够,要不就会初始化不成功,之前用安富莱的例程就因为延时不够网口工作不了。
3、注意官方资料的初始化教程什么的,大家一定要辩证地看啊(我感觉他们的官方资料写得不怎么样,大家还是从网上看广大网友上传的资料和经验会更好一点, 我一开始还以为官方的资料会比网友上传的会好点,结果~~~,于是我懂得了大公司像STM、ATMEL等公司就看官网的资料会好点,他们的资料会非常完 整,其他的小公司他们的官网资料非常少,有些资料不开放,大家能下的资料看时还是注意一点吧)。我之前遇到的接收慢的问题还以为是初始化的问题,于是按照 官方的初始化改了一下,结果网口的灯都亮不了,于是我就不再看官方的教程了。
二、DM9000A的读操作大家一定要注意了。你要先了解它的FIFO原理和包头格式,按照官方的datasheet,读操作似乎很简单,网上大部分例程 也是非常简单的,我看了网上的很多例程都是那样用的,不知他们的芯片跟我用的是不是有点不同,我直接用他们的例程总会出现接收非常慢的状况,网上也很少人 有讨论过这个问题,后来颇费周折看了安富莱的例程,他们用软件写了接收FIFO的地址指针变动,不再依照像官方说的芯片会自动移动FIFO的地址指针(尽 管安富莱的例程在初始化时也是配置成了FIFO自动循环接收的模式,不知这是不是一个硬件BUG,还是我用的芯片有问题)。一开始我还以为是硬件的问题, 再后来以为是初始化的问题,最后还看了接收FIFO的地址指针等寄存器,才发觉它老是辨别不了接收到数据包,还经常溢出,后来用了安富莱的例程后,效果还 不错,问题解决。
三、DM9000A的写操作全世界都差不多,我也没遇到什么问题,就没什么好说的了。
 
其次,说说调试方法的问题,如果驱动端的串口可以用的话,用串口查看 DM9000A寄存器是一个非常有用的找到问题所在的方法(在写驱动时)。PC端大家可以装个wireshark抓包工具,我们可以先从最简单的ARP协 议开始调试发送与接收是否可以成功,至于ARP协议的格式大家可以百度,其实很简单,一个数组就解决了。在确认DM9000A可以正常收发时,大家可以移 植uIP实现其他功能,uIP的移植教程网上也有很多,大家可以参考正点原子的,如果前面的工作做好了,这里一般不会有什么大问题。如果可以的话,大家直 接用uC/OS-II+LwIP会更好点。
 
最后,说下硬件的问题,在画PCB时可以参考官方的注意事项,官方说的也挺详细的 了。单片机和DM9000A最好离近点,DM9000A与网口之间的收发线要走差分线,还有DM9000A与网口的铺地问题,datasheet说得非常 详细了。由于硬件不是我画的,所以之前出现接收慢的问题时我一度怀疑是硬件问题,后来看了PCB后更加怀疑是硬件问题了,布局布线太奇葩了(一个新手画 的),可是我听老大说这硬件是可以的,于是~~~直到找到安富莱的例程才解决问题。由于我用的环境比较一般,就算你画得再差,一般布通了就可以了,根本不 用管什么差分线,但是,做硬件的还是应该多注意一下自己的板子,免得出现其他问题,或者在其他环境才出现问题那就痛苦了,到时排查都搞死你,更别说给做软 件的会带来什么致命困扰了。
关闭窗口

相关文章