天天看点

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

网卡移植

网卡初始化函数的位置在board.c文件的baord_init函数中调用了dm9000_pre_init();这个函数,而我们使用的开发板就是dm9000的开发板,所以主要是移植这个函数

三星版本的开发板smdvv210 的网卡是接在SRAM的bank 5中的,而我们的的是接在bank 1 中,所以根据数据手册对SRAM中各个寄存器的定义进行对应的修改,修改结果如下

<code>static</code> <code>void</code> <code>dm9000_pre_init(</code><code>void</code><code>)</code>

<code>{</code>

<code>unsigned </code><code>int</code> <code>tmp;</code>

<code>#if defined(DM9000_16BIT_DATA)</code>

<code>SROM_BW_REG &amp;= ~(0xf &lt;&lt; 4);</code>

<code>SROM_BW_REG |= (0&lt;&lt;7) | (1&lt;&lt;6) | (1&lt;&lt;5) | (1&lt;&lt;4);</code>

<code>#else</code>

<code>SROM_BW_REG &amp;= ~(0xf &lt;&lt; 20);</code>

<code>SROM_BW_REG |= (0&lt;&lt;19) | (0&lt;&lt;18) | (0&lt;&lt;16);</code>

<code>#endif</code>

<code>SROM_BC1_REG = ((0&lt;&lt;28)|(1&lt;&lt;24)|(5&lt;&lt;16)|(1&lt;&lt;12)|(4&lt;&lt;8)|(6&lt;&lt;4)|(0&lt;&lt;0));</code>

<code>tmp = MP01CON_REG;</code>

<code>tmp &amp;=~(0xf&lt;&lt;4);</code>

<code>tmp |=(2&lt;&lt;4);</code>

<code>MP01CON_REG = tmp;</code>

<code>}</code>

对应的修改对应的宏定义

(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

<a href="http://s5.51cto.com/wyfs02/M02/86/0A/wKiom1ezKI6i31WHAACpGwrfNj4799.png-wh_500x0-wm_3-wmp_4-s_130469658.png" target="_blank"></a>

将更改的代码同步后,编译运行测试可知,开发板可以和虚拟机ping通,使用tftp进行下载时也正常,至此三星官方uboot的移植已经完成

本文转自 菜鸟养成记 51CTO博客,原文链接:http://blog.51cto.com/11674570/1839384

继续阅读