一般的理解:
Nor flash 与 Nand flash 写操作 相同: 不能直接写
Nor 与 Nand 读操作 不同: Nor 可以直接读,Nand 不能直接读
更深入的理解:
NOR flash有自己的数据和地址总线,因此可以采用类似RAM的随机访问(片上运行execute in place即EIP),并且数据读取速度快,所以一般用Nor flash作bootloader。
NAND flash的采用了i/o方式读取,他只有8位的数据地址共用的总线,因此需要软件去控制读取时序,因此不能像NOR flash那样直接连到地址和数据总线上,即不能像内存那样访问,因此不能EIP,因此不能直接作为boot之用。NAND适合用来作大量数据存储的。
补充说明:
1. 对于Nor flash 芯片内执行这个叫法,其实并不确切,并不是所有的指令都可以在Nor Flash运行,像 sdr 指令在Nor Flash上执行就会出错。
2. 如果从程序段的角度来理解,nor flash 中只能执行程序的text段,可以用 rodata段,而不能使用程序的 rwdata段,不能改变rwdata段中的数值。
附程序:
/*
* 无论是从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
*/
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;
}
}
|