主题 : Tiny6410中移植DM9000EP的纠结问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 80839
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-10-31
最后登录: 2018-02-08
楼主  发表于: 2013-11-29 10:25

 Tiny6410中移植DM9000EP的纠结问题

最近买了块Tiny6410开发板是支持48pin的DM9000A的网卡,自己画了块底板,网卡芯片用的是100pin的DM9000EP,板子自动后串口打印信息有显示如下:
dm9000 Ethernet Driver, V1.31
eth0: dm9000e at d0826000,d0c00004 IRQ 108 MAC: 08:90:00:a0:90:90 (platform data)

能设置网卡IP以及MAC什么的,但是就是ping不通,求指教
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2013-11-29 11:14
ping不通的原因有很多,建议你打开dm9000.c里面的调试信息来追踪问题。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 80839
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-10-31
最后登录: 2018-02-08
2楼  发表于: 2013-11-29 12:05
谢谢啊,我试了,但是调试信息没有出来
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2013-11-29 13:05

 回 2楼(ftmn123) 的帖子

我不确定你是怎么做的,如果你要打开dm9000.c里面已有的调试信息,至少需要
1. 在源文件头上加入"#define DEBUG"
2. 你还可能需要在dm9000_probe()函数里加入下面的语句:
复制代码
  1.         /* setup board info structure */
  2.         db = netdev_priv(ndev);
  3.         db->debug_level = 8;
  4.         db->dev = &pdev->dev;
  5.         db->ndev = ndev;

3. 在内核配置时选择合适的CONFIG_DM9000_DEBUGLEVEL的值(默认是4)
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 80839
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-10-31
最后登录: 2018-02-08
4楼  发表于: 2013-12-03 00:02
引用楼主ftmn123于2013-11-29 10:25发表的 Tiny6410中移植DM9000EP的纠结问题 :
最近买了块Tiny6410开发板是支持48pin的DM9000A的网卡,自己画了块底板,网卡芯片用的是100pin的DM9000EP,板子自动后串口打印信息有显示如下:
dm9000 Ethernet Driver, V1.31
eth0: dm9000e at d0826000,d0c00004 IRQ 108 MAC: 08:90:00:a0:90:90 (platform data)

能设置网卡IP以及MAC什么的,但是就是ping不通,求指教


加入调试信息后,不断的进出这个函数
dm9000_poll_work(struct work_struct *w)
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2013-12-03 13:07

 回 4楼(ftmn123) 的帖子

dm9000_poll_work()被不断调用是正常的。另外,在原始的dm9000.c里也没有对这个函数加调试信息,我想你目前也不需要在那里面加。
调试信息的目的是追踪实际的代码执行流程用来和期待的流程做比较从而发现问题。对于你的情况,我想你首先需要关注的是dm9000_tx_done()和dm9000_rx(), 确保数据包可以正常从dm9000发送或者接收。
另外,注意一下tiny6410上默认的DM9000设置是16位数据位宽,你可能要根据你的实际硬件连接调整。
arch/arm/mach-s3c64xx/mach-mini6410.c
复制代码
  1. static struct dm9000_plat_data dm9000_setup = {
  2.         .flags                  = DM9000_PLATF_16BITONLY,
  3.         .dev_addr               = { 0x08, 0x90, 0x00, 0xa0, 0x90, 0x90 },
  4. };
  5. static struct platform_device s3c_device_dm9000 = {
  6.         .name                   = "dm9000",
  7.         .id                             = 0,
  8.         .num_resources  = ARRAY_SIZE(dm9000_resources),
  9.         .resource               = dm9000_resources,
  10.         .dev                    = {
  11.                 .platform_data = &dm9000_setup,
  12.         }
  13. };
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 80839
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-10-31
最后登录: 2018-02-08
6楼  发表于: 2013-12-04 13:31

 回 5楼(kasim) 的帖子

谢谢版主啦,其实我是想用DM9000的Reverse MII接口而不用RX+-和TX+-,这样应该可以吧,数据从6410的总线到DM9000里面然后到Reverse MII接口出来
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
7楼  发表于: 2013-12-04 14:53

 Re:回 5楼(kasim) 的帖子

引用第6楼ftmn123于2013-12-04 13:31发表的 回 5楼(kasim) 的帖子 :
谢谢版主啦,其实我是想用DM9000的Reverse MII接口而不用RX+-和TX+-,这样应该可以吧,数据从6410的总线到DM9000里面然后到Reverse MII接口出来

看起来是可以的,根据DM9000的芯片手册,当使用外部MII PHY时,只能用16位数据总线模式,这和现在Tiny6410是一样的。不过你需要在flags里加上DM9000_PLATF_EXT_PHY标志。另外,你需要在内核配置中enable CONFIG_MII
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 96881
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2013-10-04
最后登录: 2014-11-13
8楼  发表于: 2014-11-12 01:39

 Re:回 2楼(ftmn123) 的帖子

引用第3楼kasim于2013-11-29 13:05发表的 回 2楼(ftmn123) 的帖子 :
我不确定你是怎么做的,如果你要打开dm9000.c里面已有的调试信息,至少需要
1. 在源文件头上加入"#define DEBUG"
2. 你还可能需要在dm9000_probe()函数里加入下面的语句:
[code]
        /* setup board info structure */
.......

我也在调试DM9000E的驱动,但是按照上述这么做法,怎么还是没法打开dm9000.c中的调试信息呢?请教
级别: 新手上路
UID: 96881
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2013-10-04
最后登录: 2014-11-13
9楼  发表于: 2014-11-12 01:44
另外我和楼主相似,用的是DM9000EP+DP83640,ping的时候能抓到包,但是不像Tiny6410的Linux开发指南中说的那样在串口中有打印信息出来,不知道是否正常?因此才想用调试信息来查看