关于Uboot的NOR boot 或NAND boot问题

 好久没动开发板了,终于把研考完了,可以安心的做自己的实验了,但发现放下手头关于tq2440的实验两个多月,发现生疏了许多,许多问题都要想一下才能记起来是什么原理,真得抓紧时间好好弄了。

   又从uboot开始弄,以前移植了uboot1.3.1,由于太多匆忙,没有过多的注重细节,今天发现了一个以前忽略的问题,就是开发板自己判断是从何种flash介质启动的问题,首先说一下为什么要判断是哪种flash介质启动,因为这样就没有必要区分nor boot还是nand boot的bin文件了,bin文件烧到nor和nand都可以正常启动开发板。

   在网上看了下别人关于nor boot或nand boot 的文章,发现Tekkaman  Ninja写的文章非常好,很值得推荐,附上地址,以便以后查找:http://blog.chinaunix.net/u1/34474/showart.php?id=2085212

   下面来分析下天嵌公司的uboot,据Tekkaman  Ninja说,天嵌的uboot是从openJTAG的uboot 借鉴过来的,这个我们姑且不管他。贴下天嵌TQ2440的uboot中关于启动判断的代码:

int bBootFrmNORFlash(void)
{
    volatile unsigned int *pdw = (volatile unsigned int *)0;
    unsigned int dwVal;

    dwVal = *pdw;      
    *pdw = 0x12345678;
    if (*pdw != 0x12345678)
    {
        return 1;
    }
    else
    {
        *pdw = dwVal;
        return 0;
    }
}

   这段代码的思想是这样的,无论是从NOR Flash还是从NAND Flash启动,地址0处为指令"b    Reset", 机器码为0xEA00000B,对于从NAND Flash启动的情况,其开始4KB的代码会复制到CPU内部4K内存中,对于从NOR Flash启动的情况,NOR Flash的开始地址即为0。对于NOR Flash,必须通过一定的命令序列才能写数据,所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:向地址0写入一个数据,然后读出来,如果没有改变的话就是NOR Flash。

   我们在深入的分析下,首先看下nand boot 和nor boot 时物理地址分配情况:

 关于Uboot的NOR <wbr>boot <wbr>或NAND <wbr>boot问题---基于TQ2440

   从NAND闪存启动U-BOOT的设计思路

   如果s3c2440被配置成从NAND闪存启动,上电后,s3c2440的NAND闪存控制器会自动把NAND闪存中的前4K数据搬移到内部RAM中, 并把0x00000000设置为内部RAM的起始地址, CPU从内部RAM的0x00000000位置开始启动。因此要把最核心的启动程序放在NAND闪存的前4K中。

   当nor boot时,0x0000_0000是nor flash的起始地址,用语句*pdw = 0x12345678; 向0x0000_0000处写0x12345678,是没用的,因为对于NOR Flash,必须通过一定的命令序列才能写数据,所以*pdw中存的数据仍然是"b    Reset",但当nand flash启动时,cpu内部的4KBbootSRAM被映射到0x0000_0000开始的地址处,norflash这时无效了,这时用语句*pdw = 0x12345678; 向0x0000_0000处写0x12345678时,0x12345678会被写入,因为这是对内存的操作,不需要指令序列等,所以一旦发现写入和读出的数据一致时,则可判断是nand boot,这时一定要把0x0000_0000处的数据还原,用*pdw = dwVal; 这句。

   明天看看,得重新移植uboot了,好好研究研究,uboot很高深啊!! 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值