新闻中心

EEPW首页>嵌入式系统>设计应用> uboot如何检测s3c2440是从Nand Flash还是Nor Flash启动

uboot如何检测s3c2440是从Nand Flash还是Nor Flash启动

作者: 时间:2016-11-27 来源:网络 收藏
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

参考:

本文引用地址://m.amcfsurvey.com/article/201611/322381.htm

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



评论


技术专区

关闭