原创 uboot 1.1.6添加dm9000支持

2010-7-20 20:45 5325 8 10 分类: MCU/ 嵌入式

前两天在6410开发板上玩了玩u-boot,开发板是友坚的6410开发板,配套的光盘中给的是很古老的u-boot 1.1.6,而且没有网络支持。从网上下了个最新的uboot-2010.06版本,看了下发现它并不支持6410的SD卡启动模式,本来是想移植下,使得新版本也支持SD卡启动,但现在时间很紧张,没那么多时间慢慢玩了,于是就想把dm9000弄上去。


本来以为dm9000这类的大白菜,uboot肯定是一切ok了,但google了下,发现有人说低版本的uboot带的dm9000x.c驱动是不支持dm9000a的,只支持比较老的dm9000x。于是看linux 2.6.32内核代码,发现有dm9000驱动,对比了下,也没觉得有多大差别,为了省事,又看了下uboot2010.06版本里面的dm9000驱动。看注释,发现它已经支持dm9000ae了。于是直接拷贝过来,替换原先的dm9000x.c。


在include/configs/smdk6410.h中添加


#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_NO_SROM   1


注销其他网卡芯片的支持,比如//#define CONFIG_DRIVER_SMC911X      1     /* we have a SMC9115 on-board */


再添加:


#define CONFIG_NET_MULTI    1


 


修改board/smdk6410.c


本来里面好像是cs8900的,所以里面有这么一些与cs8900相关的代码:


#define CS8900_Tacs    (0x0)      // 0clk            address set-up


#define CS8900_Tcos    (0x4)      // 4clk            chip selection set-up


#define CS8900_Tacc    (0xE)      // 14clk   access cycle


#define CS8900_Tcoh    (0x1)      // 1clk            chip selection hold


#define CS8900_Tah      (0x4)      // 4clk            address holding time


#define CS8900_Tacp    (0x6)      // 6clk            page mode access cycle


#define CS8900_PMC    (0x0)      // normal(1data)page mode configuration


static void cs8900_pre_init(void)


{


       SROM_BW_REG &= ~(0xf << 4);


       SROM_BW_REG |= (1<<7) | (1<<6) | (1<<4);


       SROM_BC1_REG = ((CS8900_Tacs<<28)+(CS8900_Tcos<<24)+(CS8900_Tacc<<16)+(CS8900_Tcoh<<12)+(CS8900_Tah<<8)+(CS8900_Tacp<<4)+(CS8900_PMC));


}


 


int board_init(void)


{


       DECLARE_GLOBAL_DATA_PTR;


 


       cs8900_pre_init();//改为dm9000_pre_init


 


       gd->bd->bi_arch_number = MACH_TYPE;


       gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);


 


#if 0


       icache_enable();


       dcache_enable();


#endif


       return 0;


}


把所有cs8900改为dm9000,代码是不需要改的,对照s3c6410手册,这块memory访问的配置是没问题。这个开发板是用的是16bit的模式,所以确认cs8900_pre_init确实是把总线初始化为16bit模式的。


 


在net/eth.c中添加


extern int dm9000_initialize(bd_t*);


 


int eth_initialize(bd_t *bis)


{


       char enetvar[32], env_enetaddr[6];


       int i, eth_number = 0;


       char *tmp, *end;


 


       eth_devices = NULL;


       eth_current = NULL;


 


#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)


       miiphy_init();


#endif


#if defined(CONFIG_DRIVER_DM9000)


 


       dm9000_initialize(bis);//这是我添加的


#endif


#if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750)


       mv6436x_eth_initialize(bis);


#endif


 


编译测试。顺便说下,这个工作看起来是简单的,但仍然碰到一些问题,花了两天时间才搞定。特别开始的时候忘记定义#define CONFIG_DM9000_NO_SROM   1


结果导致每次mac地址都不对,后来看了下代码,才发现如果没有定义CONFIG_DM9000_NO_SROM,则uboot会从eeprom中读mac地址,dm9000是支持eeprom接口的,但友坚开发板上并没有用这个功能,所以需要设置CONFIG_DM9000_NO_SROM。


还遇到个恶心的问题,就是ping不通,一会说checksum bad,一会又是无任何提示的,直接给出”host is not active“。这个问题足足浪费我一天时间,最后发现是防火墙问题,把系统防火墙关闭就正常。不过我在另一台台式机上测试,防火墙开了也没啥影响,就是在我这台笔记本上不行。


        bluehacker

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户795576 2011-4-2 11:15

DM9000CEP 产品优势: 与同类产品比较具有以下独特优势: * LOCAL BUS芯片,DM9000CEP其基本特性是 48pin,10/100MLOCAL-BUS interface;工作模式8/16bit * 2.5/3.5V低功耗;DM9000CEP是全球最小颗粒单芯片, 体积小,便于布线制版 * 通过惠普认证AUTO-Midx(支持直接互连自动翻转)TCP/Ip加速(IPV4 check sum offioad) 减轻CPU负担,提高整机效能,20nsl/o读写时间 DM9000E DM9000AE DM9008AF DM9008AE DM9601 DM9102D DM9161E DM9161AE DM8606F DM9331 网络变压器:MAGCOM:HS9016 HS9001 HS12366 HS12369 我们为客户提供完善的服务: 1.完整的开发资料及强大的技术支援,成熟可靠的产品方案. 2.芯片的数据手册,原理图,驱动. 3.Layoeut(布板指南). 4.编程指南.可以由原厂工程师解决各种技术问题。 有充裕的货源支撑,无论是在价格上,还是质量上都有不可比拟的优势! 有需要的朋友请联系我们! 深圳市爱欣文科技有限公司/黄江河 ADD:深圳市南山区高新北区新西路2号东方信息港综合楼5楼503号 TEL:0755--83688556 mobil:15814419344 FAX:0755--83778765 86677606 MSN:Sir_huang@live.cn www.axwdragon.com E-Mail:river_huang@axwdragon.com QQ:1052710806 river_huang 做为国内一级代理商我们的性价比目前是最高的,同时对与我们的客户我们可免费提供方案以及免费提供由我们台湾和深圳总公司的技术支持,这也是目前国内做得最好的一家,我们的责任是做到售前售后一条龙服务。优秀的性价比和强大的技术支持是我们成功的保证,也是客户最终的追求。

用户317089 2011-3-7 14:08

爱欣文科技有限公司,DAVICOM国内总代理商,免费为客户提供网络部分整套的产品生产解决方案,在产品生产过程中如果遇到技术上的问题我们可以免费提供下列服务: ①提供完整的开发资料及强大的技术支援,成熟可靠的产品方案. ②芯片的数据手册,原理图,驱动. ③Layoeut(布板指南). ④编程指南.可以提供各种产品方案,由原厂工程师解决各种技术问题。 [联系我们]:如需开发资料的请与我联系,谢谢! 电话:0755-86677600 传真:0755-86677606 地址:深圳南山区高新北区新西路2号东方信息港综合楼5楼503号 联系人:康先生 在线QQ:1667698625 MSN:jk852284877@live.cn 电话13088816477
相关推荐阅读
用户1361860 2012-06-28 23:44
Nicrosystem Freescale Kinetis教程---SDHC
这是研究生翻译的SDHC的中文文档,里面很多句子不通,但我现在没时间去修改了。先放出来,应该还是会有一点作用  ...
用户1361860 2012-06-26 12:39
Nicrosystem Freescale Kinetis教程--低功耗定时器
Freescale Kinetis内部集成了一个独特的低功耗定时器,它可以在系统处于低功耗模式下,仍然以极低功耗运行,可以用于在适当时候唤醒系统进入正常工作模式  ...
用户1361860 2012-06-24 22:11
Nicrosystem Freescale Kinetis教程----RTC实时时钟
Nicrosystem的飞思卡尔kinetis教程之片上RTC  ...
用户1361860 2012-06-22 10:21
TI C2000微控制器指南
这是官方的C2000的介绍,C2000做电机控制那是业界最好的。  ...
用户1361860 2012-06-20 23:52
Nicrosystem Freescale Kinetis教程--PIT定时器教程
这是PIT定时器的教程,PIT是 Kinetis支持的另一种定时器,相对于上一讲的flextimer要简单。 今晚赶到北京,到宾馆发一篇博客  ...
用户1361860 2012-06-19 13:15
Nicrosystem Freescale Kinetis教程--Flextimer教程
Kinetis的Flextimer定时器教程 kinetis集成了众多功能各异的定时器,flextimer是其中最为复杂的一个  ...
EE直播间
更多
我要评论
2
8
关闭 站长推荐上一条 /3 下一条