nand发动时,地址0x00000000为SRAM映射的地址;nor发动时,地址0x00000000为norflash的实践开始地址。向norflash中写数据需求特定的指令时序,而向内存中写数据能够直接向内存地址赋值。
依据这两个特性,咱们能够这样检测,代码如下
int check_flashboot_mode(void)
{
}
用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