norflash需要很长的时间进行抹写,但是它提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,这使得它非常适合取代老式的rom芯片。当时rom芯片主要用来存储几乎不需要更新的代码,例如电脑的BIOS或机上盒(set-top-box)的固件。norflash可以忍受一万到一百万抹写循环,它同时也是早期的可移除式快闪存储媒体的基础。
norflash简单来说是sdram和nand的中间品,它能像sdram一样直接读,但又得像nand一样编程擦写。因此程序可以直接在nor里跑,速度要比sdram慢一些,往nor里面写数据必须先擦除,因为nor的每一位只能由1变为0。nor可读不可直接写的特性可以用来判断是nor启动还是nand启动,因为nand启动的话,前4k是可写的,我们写入数据再读取出来应该是没有问题的,而nor启动的话,读出的数据必然是错误的。
NorFlash的硬件接线:
首先,如果做过sdram实验的朋友应该知道,NorFlash与sdram很相似,只不过sdram位宽为32,NOR为16。在硬件连接上,Nor的地址线与cpu的地址线错开1位,sdram错开2位。简单分析一下:
32位的CPU地址线为32位,每一个地址对应1个byte,地址的步长为1byte
0x0000 0000 对应第1个地址空间大小为1bytes
0x0000 0001 对应第2个地址空间大小为1bytes
32位的sdram,每一个地址对应于4个byte,地址步长为4byte
0x0000 0000 对应第1个地址空间大小为4bytes
0x0000 0001 对应第2个地址空间大小为4bytes
16位的nor,每一个地址对应于2个byte,地址步长为2byte
0x0000 0000 对应第1个地址空间大小为2bytes
0x0000 0001 对应第2个地址空间大小为2bytes
因此,CPU的地址与它们的地址是错位的。
CPU的4个连续地址 如 0 1 2 3 均对应于sdram的 0地址
CPU的2个连续地址 如 0 1 均对应于nor 的 0地址
假如我想取sdram 0地址的 第二个byte 地址如何写?对于sdram和nor具体的每一个byte是无法寻址的呀,但是arm有一个叫存储管理器的东西,它大概会帮我们实现单字节的读写,至于sdram和nor支不支持单字节读写,我们后边在分析。