DM9000调试记录

最近在调试DM9000,遇到了很多问题,在网上几乎也能找到同样的问题,但是答案千变万化,弄的我这样不行,那样也不行。

1、遇到的第一个问题,网卡不识别,出现的调试信息就是:

dm9000 dm9000.0:  DM9000E read wrong id 0x00000040
dm9000 dm9000.0:  DM9000E read wrong id 0x00000040
dm9000 dm9000.0:  DM9000E read wrong id 0x00000046

dm9000 not found

其中id经常发生变化,常见的有0x00000000或者 0x2b2a2928

这个问题主要在四个方面去查:CMD信号,看看CMD信号是否连接到ADDR2(最好不要给Addr1上连接,驱动修改起来比较困难)

                                       Int信号,看看Int信号是否连接到EINT的管脚,这个可以随便选择,选择完后,需要在驱动里面进行修改,修改之处在:

[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7, //外部中断改这个地方
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
}

从上面可以看到,INT管脚使用的是EINT7,其余地方不用修改

            RST信号:在不确定RST信号连接的管脚时,最好直接接到地,这样比较保险

             cs信号:CS的信号可选4个,这个是情况而定,如果选择了NGCS3,那么在网卡驱动中要做对应的修改,修改之处在:

static struct resource s3c_dm9k_resource[] =
{
[0] =
{
.start = S3C2410_CS3, //网卡连接在CS3总线上 ,总线改这个地方
.end = S3C2410_CS3 + 3,
.flags = IORESOURCE_MEM,
},
[1] =
{
.start = S3C2410_CS3 + 4, //S3C2410_CS3 + 2,
.end = S3C2410_CS3 + 4 + 3, //S3C2410_CS3 + 2 + 3, //addr改这个地方
.flags = IORESOURCE_MEM,
},

这样,如果芯片焊接的没问题,那么DM9000在系统启动的时候就可以发现了,启动后出现如下的信息,表明DM9000已经发现了:

dm9000 Ethernet Driver, V1.31
*****dm9000.c line 1248 db->addr_res=-1068488320
****dm9000.c line 1285 i=0
***dm9000.c line 1270 db->io_addr=-998113280
***dm9000.c line 1289 db->io_data=-998096892
eth0 (dm9000): not using net_device_ops yet
eth0: dm9000e at c4820000,c4824004 IRQ 52 MAC: 00:4a:00:00:00:00 (chip)

这样第一个问题就可以解决了,但是有时候DM9000发现了,但是不能通信,就是Ping不通,当插上网线后出现如下的信息:

eth0:  eth0: link up, 100Mbps, full-duplex, no lpa 

这个问题调试了好长时间,一直以为是驱动问题,网上有人说是6.8K电阻的精度不够或者PCB的走线有问题等(搞的差点重新绘制电路板了)

经过检查原来是有个信号在作怪,我在DM9000上挂了一个AT93C46的存储器,是用来存储MAC地址的,其实很简单就是SPI接口,但是就是应为疏忽了这点导致花费了很多功夫。

开始我没有在EECS信号上加上拉电阻,当系统在运行udhcpc (v1.15.1) started 的时候,就会弹出一大堆的信息,没有抓下来图,大概就是Time out之类的信息,然后下次插上网卡后可以识别,但是弹出eth0:  eth0: link up, 100Mbps, full-duplex, no lpa 。

解决的办法就是:首先将AT93C46给去掉了,然后就已经可以通信成功,但是MAC地址不能存储。在EECS信号线上加了4.7K的上拉电阻,焊接上AT93C46就可以通信了,Ping某个IP地址就可成功。

PING 172.20.223.40 (172.20.223.40): 56 data bytes
64 bytes from 172.20.223.40: seq=0 ttl=64 time=2.932 ms
64 bytes from 172.20.223.40: seq=1 ttl=64 time=1.027 ms
64 bytes from 172.20.223.40: seq=2 ttl=64 time=0.894 ms
64 bytes from 172.20.223.40: seq=3 ttl=64 time=0.846 ms
64 bytes from 172.20.223.40: seq=4 ttl=64 time=0.876 ms
64 bytes from 172.20.223.40: seq=5 ttl=64 time=0.896 ms
64 bytes from 172.20.223.40: seq=6 ttl=64 time=0.905 ms
64 bytes from 172.20.223.40: seq=7 ttl=64 time=0.890 ms
64 bytes from 172.20.223.40: seq=8 ttl=64 time=1.454 ms
64 bytes from 172.20.223.40: seq=9 ttl=64 time=0.879 ms
64 bytes from 172.20.223.40: seq=10 ttl=64 time=0.863 ms
64 bytes from 172.20.223.40: seq=11 ttl=64 time=0.808 m

 

转载于:https://www.cnblogs.com/wxy-cool/archive/2012/10/30/2746930.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python---二分法查找

输入n个数&#xff0c;通过二分法查找该数的下标 def binarySearch(arr,value):m 0#开始n len(arr#最后)while m<n:mid(mn)//2#计算中间位置if valuearr[mid]:#查找成功&#xff0c;返回元素对应的位置return midelif value>arr[mid]:#在后面一半元素中继续查找mmid1e…

Python datetime isocalendar()方法与示例

Python datetime.isocalendar()方法 (Python datetime.isocalendar() Method) datetime.isocalendar() method is used to manipulate objects of datetime class of module datetime. datetime.isocalendar()方法用于操作模块datetime的datetime类的对象。 It uses a dateti…

ASP.NET 技术(附翻译)

1.构建 ASP.NET 页面ASP.NET 和ASP.NET结构ASP.NET 是微软.NET framework整体的一部分, 它包含一组大量的编程用的类&#xff0c;满足各种编程需要。 在下列的二个部分中, 你如何学会 ASP.NET 很适合的放在.NET framework, 和学会能在你的 ASP.NET 页面中使用语言。.NET类库假想…

SQL捕获异常

原文地址 http://technet.microsoft.com/zh-cn/office/ms179296%28vsql.100%29在 Transact-SQL 中使用 TRY...CATCHTransact-SQL 代码中的错误可使用 TRY…CATCH 构造处理&#xff0c;此功能类似于 Microsoft Visual C 和 Microsoft Visual C# 语言的异常处理功能。TRY…CATCH …

二叉树遍历(代码,分析,汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; BTree.h BTree.c 二叉树&#xff08;多路平衡搜索树&#xff09; LinkQueue.h #ifndef _LINKQUEUE_H_ #define _LINKQUEUE_H_typedef void LinkQueue;//定义队列类型LinkQueue* LinkQueu…

Java Vector insertElementAt()方法与示例

矢量类insertElementAt()方法 (Vector Class insertElementAt() method) insertElementAt() method is available in java.util package. insertElementAt()方法在java.util包中可用。 insertElementAt() method is used to set the given element (ele) at the given (indices…

Python---查找序列的最长递增子序列

查找序列的最长递增子序列 什么是序列的最长递增子序列&#xff1f; 答&#xff1a;在一个数值序列中&#xff0c;找到一个子序列&#xff0c;使得这个子序列元素的数值依次递增&#xff0c;并且这个子序列的长度尽可能地大。这就是所谓的最长递增子序列 from itertools impo…

SendMessage和PostMessage

SendMessage 和 PostMessage 的区别 &#xff11;、首先是返回值意义的区别&#xff0c;我们先看一下 MSDN 里的声明&#xff1a; LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);BOOL PostMessage( HWND hWnd…

ffmpeg-从mp4、flv、ts文件中提取264视频流数据

ffmpeg-从mp4、flv、ts文件中提取264视频流数据 main.c #include <stdio.h> #include <libavutil/log.h> #include <libavformat/avio.h> #include <libavformat/avformat.h>void proc(int need_to_annexb, char* in_file, char* out_file) {AVForma…

java timezone_Java TimeZone getDSTSavings()方法与示例

java timezoneTimeZone类的getDSTSavings()方法 (TimeZone Class getDSTSavings() method) getDSTSavings() method is available in java.util package. getDSTSavings()方法在java.util包中可用。 getDSTSavings() method is used to get the number of time differences in …

Photoshop 保存PNG格式交错和不交错有差别

1.PNG格式是由Netscape公司开发出来的格式&#xff0c;可以用于网络图像&#xff0c;但它不同于GIF格式图像只能保存256色&#xff0c;PNG格式可以保存24位的真彩色图像&#xff0c;并且支持透明背景和消除锯齿边缘的功能&#xff0c;可以在不失真的情况下压缩保存图像。但由于…

线索化二叉树(代码 、分析 、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; BTree.h BTree.c 二叉树&#xff08;多路平衡搜索树&#xff09; SeqList.h SeqList.c 顺序表 main.c #include <stdio.h> #include <stdlib.h> #include "BTree.h&qu…

Python---寻找给定序列中相差最小的两个数字

编写函数&#xff0c;寻找给定序列中相差最小的两个数字 def getTwoClosestElements(arr):#先进行排序&#xff0c;使得相邻元素最接近#相差最小的元素必然相邻seq sorted(arr)#先进行排序dif float(inf)#无穷大#遍历所有元素&#xff0c;两两比较&#xff0c;比较相邻元素的…

ubuntu 无线 共享 上网

配置DHCP服务器 使连接到此AP的电脑 自动获取IP 1. 安装软件包&#xff1a;sudo apt-get install dhcp3-server2. 修改/etc/default/dhcp3-server配置文件INTERFACES"eth1" //eth1为无线网卡的名字3. 修改/etc/dhcp3/dhcpd.conf配置文件option domain-name-servers …

Java StringBuilder getChars()方法与示例

StringBuilder类的getChars()方法 (StringBuilder Class getChars() method) getChars() method is available in java.lang package. getChars()方法在java.lang包中可用。 getChars() method is used to copy all the characters from the given arguments (int src_st, int …

Python---利用蒙特.卡罗方法计算圆周率近似值

利用蒙特.卡罗方法计算圆周率近似值 什么是蒙特.卡罗方法&#xff1f; 答&#xff1a;蒙特卡罗方法是一种计算方法。原理是通过大量随机样本&#xff0c;去了解一个系统&#xff0c;进而得到所要计算的值。 正方形内部有一个相切的圆&#xff0c;它们的面积之比是π/4。 这里假…

不具有继承关系的Delegate如何进行类型转换?

- 引自:Artech 我们知道对于两个不具有继承关系的两个类型&#xff0c;如果没有为它们定义转换器&#xff0c;两这之间的类型转换是不允许的&#xff0c;Delegate也是如此。但是有时候我们却希望“兼容”的两种Delegate类型能够进行转换&#xff0c;比较典型的就是表示事件的De…

Java属性loadFromXML()方法与示例

属性类loadFromXML()方法 (Properties Class loadFromXML() method) loadFromXML() method is available in java.util package. loadFromXML()方法在java.util包中可用。 loadFromXML() method is used to load all the properties denoted by the XML file on the given inpu…

FLV封装格式的分析

FLV封装格式的分析&#xff0c;各种详细的参数比较多没有详细解释&#xff0c;这是总体的格式分布。详细的参数说明可以参照文档。 以flv格式内封装的音频流是aac、视频流是h264分析&#xff1a; flv文件tag部分截图&#xff1a;可以看到音频TAG、视频TAG是交错存储的

《计算机基础复习》===数据库技术基础

数据库系统三级结构&#xff1a; 数据库系统一般划分为三个抽象级&#xff1a;用户级、概念级、物理级。 1&#xff09;用户级数据库&#xff1a;对应于外模式。它是用户看到和使用的数据库&#xff0c;又称用户视图&#xff1b;用户级数据库主要由外部记录组成&#xff0c;不同…