Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366418
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: 嵌入式

2015-03-14 14:58:23

对于我们这样的初学者来说,不懂的UBOOT的原理,或者只知道那么一点点儿很肤浅的知识,哪怕是一个小小的问题,就可能困扰你一天,甚至一个月。
从六月末移植UBOOT到现在,已经有2个多月的时间了,中间虽然学了LINUX设备驱动程序。但现在的情况是,移植的UBOOT只带DM9000A的驱动,USB驱动还未移植。不过在这过程中,我收获颇丰。下面一一列出在UBOOT移植过程中遇到的问题,以免自己在将来又犯上同样的错误,却苦苦等待着很简单的答案。
问题一:
按照《嵌入式LINUX之我行》的UBOOT移植方法,修改好代码以后,下载到NAND FLASH中,在输出以下文字后死机:
  1. U-Boot 2009.08 ( 9 11 2011 - 20:00:03)
  2. DRAM: 64 MB
  3. Flash: 512 kB
  4. NAND: NAND_ECC_NONE selected by board driver. This is not recommended !!
  5. 64 MiB
  6. In: serial
  7. Out: serial
  8. Err: serial
解决方法:DM9000A网卡驱动有问题,下一个初始化的就是网卡驱动了。
 
问题二:
ping 192.168.0.16 主机时会死机,LCD屏会先出一道黑线,然后又全部变白。(这个问题困扰我达两月之久。起初以为是开发板有问题,然后送厂检修,果然网络不稳定。一个星期后,板回到我手中,再次ping,还是同样的问题,但是在WINCE下网络已经很稳定了,所以这次开发板是没有问题的了。其实找到解决这个问题的方法纯属意外,在某个论坛上浏览帖子时,发现别人描述的现象跟我的一样,那个前辈理解的比较深刻,提到可能是CPU占用过高,LCD屏刷新不过来。正是这个现象的描述,提醒了我:DM9000A的读写时序是什么样的?DM9000A是如何读取BUFFER中的数据的?)
解决方法:在某人的BLOG中找到了DM9000A的时序图(现已转载了我的BLOG),仔细研读:片选使能(nGCS)--》写命令使能(nOE)——》写命令全能结束--》片选使能结束。
首先,我的DM9000A的片选使能没有问题,其次检查片选使能后的Tcos,发现这里有问题,原来是没有设置BANK3上的位宽为16bit。由于网上比较流行的S3C2440开发板的DM9000的片选都是在BANK4上,而UBOOT默认的BANK4就是16bit的,所以不会出问题。
在board/samsung/my2440/lowlevel_init.S中修改#define B3_BWSCON (DW16)即OK。
 
问题三:
ping 主机的时候出现:operating at unknown: 0 mode。
解决方法:
/drivers/net/dm9000x.c
修改phy_read(int reg) 函数中的延时即解决,详细情况如下:
  1. /*
  2. Read a word from phyxcer
  3. */
  4. static u16
  5. phy_read(int reg)
  6. {
  7. u16 val;
  8. /* Fill the phyxcer register into REG_0C */
  9. DM9000_iow(DM9000_EPAR, DM9000_PHY | reg);
  10. DM9000_iow(DM9000_EPCR, 0xc); /* Issue phyxcer read command */
  11. udelay(1000); //udelay(100); /* Wait read complete */
  12. DM9000_iow(DM9000_EPCR, 0x0); /* Clear phyxcer read command */
  13. val = (DM9000_ior(DM9000_EPDRH) << 8) | DM9000_ior(DM9000_EPDRL);
  14. /* The read data keeps on REG_0D & REG_0E */
  15. DM9000_DBG("phy_read(0x%x): 0x%x\n", reg, val);
  16. return val;
  17. }
 
未完待续……
阅读(409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~