主题 : s5pv210平台移植关于DM9000寻址的的奇怪问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 51637
精华: 0
发帖: 40
金钱: 205 两
威望: 41 点
贡献值: 0 点
综合积分: 80 分
注册时间: 2011-07-05
最后登录: 2015-10-08
楼主  发表于: 2013-07-09 00:19

 s5pv210平台移植关于DM9000寻址的的奇怪问题

公司做了一张s5pv210平台的板子,硬件部分估计是SMDK210抄一点,TINY210抄一点,我在移植UBOOT的网口部分,遇到了一些奇怪的问题。
DM9000的硬件方面,和TINY210主要的不同在于,dm9000的cs#引脚是接在XM0CSN5上(TINY210为XM0CSN1),CMD引脚是接在XM0ADDR0上(TINY210为XM0ADDR2),供电,晶振,硬复位都检查过,没有问题。
问题的关键就在于,在网上有人移植的Uboot中,DM9000_IO = 0x88001000,DM9000_DATA = DM9000_IO+0x300C,在这里是可以让TINY210的DM9000的MAC正常工作的。关于这两个值和CS#与CMD引脚的话题,网上有很多人做过看似正确的解释,而且解释得头头是道。我就想问,你们尝试过理论上可行的另外的值没有?理论上来说,DM9000_IO = 0x88000000, DM9000_DATA = 0x88000004,是可以让DM9000正常工作起来?实验告诉我,不行。下面是我在TINY210上尝试的例子:
1、DM9000_IO = 0x88001000, DM9000_DATA = DM9000_IO+0x300D。在uboot中PING一个任意地址,代码会跑到dm9000_reset中的do while语句中进行死循环,因为跳出条件是检查dm9000中MAC的复位字段是否被清掉,读出来的值是一直处于复位状态。示波器检查XM0ADDR2管脚,在PING的过程中一直处于低电平
2、DM9000_IO = 0x88000000, DM9000_DATA = DM9000_IO+0x7FFFFFF。在uboot中PING一个任意地址,代码会跑到dm9000_reset中检查ID号,结果不对,提示“ERROR: resetting DM9000 -> not responding”,示波器检查XM0ADDR2管脚,在PING的过程中有高电平脉冲
3、DM9000_IO = 0x88001000, DM9000_DATA = DM9000_IO+0x3008。初始化成功!但此时相应的ADDR2管脚理论上来说应该是低电平?示波器检查XM0ADDR2管脚,在PING的过程中有高电平脉冲

现在问题来了,我无法理解DM9000_IO和DM9000_DATA这两个值的正确设置方法,所以我尝试了很多值,都无法让DM9000在我们的板子上正常工作起来。理论上来说,DM9000_IO = 0xA8001000,DM9000_DATA = DM9000_IO+0x300D是没问题的,但是实际测试XM0ADDR0管脚在PING过程中一直都为低电平,系统卡死在dm9000_reset中的检测复位字段清除的循环中。

如果有人知道这其中的原因,请不吝赐教,小弟感激不尽!
级别: 新手上路
UID: 51637
精华: 0
发帖: 40
金钱: 205 两
威望: 41 点
贡献值: 0 点
综合积分: 80 分
注册时间: 2011-07-05
最后登录: 2015-10-08
1楼  发表于: 2013-07-14 18:28
没有人知道0x88001000和0x300C的意义?