您的位置 首页 电源

uboot怎么检测s3c2440是从Nand Flash仍是Nor Flash发动

nand启动时,地址0x00000000为SRAM映射的地址;nor启动时,地址0x00000000为norflash的实际起始地址。向norflash中写数据需要特定的命令时序

nand发动时,地址0x00000000为SRAM映射的地址;nor发动时,地址0x00000000为norflash的实践开始地址。向norflash中写数据需求特定的指令时序,而向内存中写数据能够直接向内存地址赋值。
依据这两个特性,咱们能够这样检测,代码如下
int check_flashboot_mode(void)
{
volatile unsigned int *pdw = (volatile unsigned int *)0;
unsigned int dwVal;
dwVal = *pdw;
*pdw = 0x12345678;
if (*pdw != 0x12345678)
{
return 1; //boot from norflash
}
else //boot from nandflash
{
*pdw = dwVal; //数据复原
return 0;
}
}

用volatile声明一个寄存器变量*pdw指向的是0地址。向0地址处写一串数据,比方0x12345678,*pdw = 0x12345678,接着再从0地址中把数据读回来。
由于nor发动时,0地址是norflash的开始址,而向norflash写数据需求特定的指令时序,所以直接给地址赋值是不起做用的,所以读回来的数据仍是norflash华夏有的数据,这样经过*pdw != 0x12345678判别,此刻为nor发动。
而在nand发动时,0地址是内存的地址映射,能够用直接赋值的办法向内存中写入数据,接着从0地址读回来的数据变为0x12345678,和之前写入的数据持平,此刻就为nand发动,在操作完后,要将数据复原 *pdw = dwVal

参阅:

http://blog.chinaunix.net/uid-22030783-id-3347621.html

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/257379.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部