DM9000AE

因为板子上没有cs8900,只有dm9000ae,所以开始移植dm9000ae
1、修改include/configs/utu2440.h
 
/* Hardware drivers
 */
//#define CONFIG_DRIVER_CS8900    1    /* we have a CS8900 on-board */ //editedby yaoyi 20090314
//#define CS8900_BASE        0x19000300
//#define CS8900_BUS16        1 /* the Linux driver does accesses as shorts */
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x18000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT

2、修改lib_arm/board.c
#ifdef CONFIG_DRIVER_DM9000
extern int eth_init(bd_t * bd);
#endif
#ifdef CONFIG_DRIVER_DM9000
eth_init(gd->bd);
#endif

3、修改utu2440.h,使读出的MAC不出现00:00:00:00:00:00


....
/*#define CONFIG_BOOTARGS       "root=ramfs devfs=mount console=ttySA0,9600" */
#define CONFIG_ETHADDR          08:00:3e:26:0a:5b
#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR           192.168.1.110
#define CONFIG_SERVERIP         192.168.1.1
.......
4、修改drivers/net/dm9000x.c,已读取内存区上的MAC,以及不出现cannot establish the link
添加一个函数声明
/* function declaration ------------------------------------- */
int eth_initfirst(bd_t * bd);
int eth_init(bd_t * bd);
int eth_send(volatile void *, int);
int eth_rx(void);
.......
int
eth_init(bd_t* bd)
{
  .....

    /* RESET device */
//      dm9000_reset();
        dm9000_probe();
  .....
       
     /* Set Node address */
/*#ifndef CONFIG_AT91SAM9261EK
        for (i = 0; i < 6; i++)
                ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);
#endif*/
//edited by yaoyi 20090317
        if (is_zero_ether_addr(bd->bi_enetaddr) ||
            is_multicast_ether_addr(bd->bi_enetaddr)) {
                /* try reading from environment */
                u8 i;
                puts("ready to read MAC/n");
                char *s, *e;
                s = getenv ("ethaddr");
                for (i = 0; i < 6; ++i) {
                        bd->bi_enetaddr[i] = s ?simple_strtoul (s, &e, 16) : 0;
                        if (s)
                                s = (*e) ? e + 1 : e;
                }
        }
.......
#if 0
        i = 0;
        while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
                udelay(1000);
                i++;
                if (i == 10000) {
                        printf("could not establish link/n");
                        return 0;
                }
        }

        /* see what we've got */
        lnk = phy_read(17) >> 12;
        printf("operating at ");
        switch (lnk) {
        case 1:
                printf("10M half duplex ");
                break;
        case 2:
                printf("10M full duplex ");
                break;
        case 4:
                printf("100M half duplex ");
                break;
        case 8:
                printf("100M full duplex ");
                break;
        default:
                printf("unknown: %d ", lnk);
                break;
        }
        printf("mode/n");
#endif
        return 0;
}
在函数int eth_init()后添加eth_initfirst的定义
int eth_initfirst(bd_t * bd)
{
        dm9000_reset();
        eth_init(bd);
}
最后修改下dm9000_reset如下:
 /* Reset DM9000,
           see DM9000 Application Notes V1.22 Jun 11, 2004 page 29 */

        /* DEBUG: Make all GPIO pins outputs */
//      DM9000_iow(DM9000_GPCR, 0x0F);
        /* Step 1: Power internal PHY by writing 0 to GPIO0 pin */
        DM9000_iow(DM9000_GPR, 0);
        /* Step 2: Software reset */
        DM9000_iow(DM9000_NCR, 3);

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/linyaoyi/archive/2009/03/19/4004052.aspx

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值