微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uboot如何检测s3c2440是从Nand Flash还是Nor Flash启动

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

时间: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

参考:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top