您的位置:首页 > 其它

uboot移植(九)——移植三星官方uboot(三)

2016-08-16 23:06 162 查看
网卡移植

网卡初始化函数的位置在board.c文件的baord_init函数中调用了dm9000_pre_init();这个函数,而我们使用的开发板就是dm9000的开发板,所以主要是移植这个函数
三星版本的开发板smdvv210 的网卡是接在SRAM的bank 5中的,而我们的的是接在bank 1 中,所以根据数据手册对SRAM中各个寄存器的定义进行对应的修改,修改结果如下
static void dm9000_pre_init(void)
{
unsigned int tmp;
#if defined(DM9000_16BIT_DATA)
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (0<<7) | (1<<6) | (1<<5) | (1<<4);
#else
SROM_BW_REG &= ~(0xf << 20);
SROM_BW_REG |= (0<<19) | (0<<18) | (0<<16);
#endif
SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));
tmp = MP01CON_REG;
tmp &=~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}


对应的修改对应的宏定义
(1)#define CONFIG_DM9000_BASE (0xA8000000),这个是网卡的基地址,我们使用的bank 1 对应的是0x8800000,但是实际上这个地址是不行的,应该改为88000300,原因可能是网卡芯片内部的寄存器本身就存在一个300的偏移量,所以要改为
#define CONFIG_DM9000_BASE (0x88000300)
(2)#define DM9000_DATA (CONFIG_DM9000_BASE+2)
改为
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
+4的原因是 DM9000_DATA对应CMD引脚,因为端口复用的原因,这个引脚为高低电平时分别是表示发送地址和命令,CMD这个引脚接的是ADDR2(地址总线的第二根( 0 1 2 )),所以+4是因为4=100刚好对应第二跟地址总线也就是ADDR2



将更改的代码同步后,编译运行测试可知,开发板可以和虚拟机ping通,使用tftp进行下载时也正常,至此三星官方uboot的移植已经完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网卡 移植