flash 写入前要先擦除的原因:写入,只能把数据位从1 改为0;擦除,只能把数据位从0 改为1;擦除的目的是把数据变成FFFF。nor、nand flash 写入前都要先擦除。
区别:
1> nor 成本高,读写数据时不易出错,适合存储少量代码;
nand 成本低,读写容易出错,容量大。
2> Nor,有类似于DRAM 之类的地址总线,可以直接和cpu 相连,CPU可以直接通过地址总线对nor flash 进行访问
nand flash 没有这类的总线,只有IO 接口,只能通过IO 接口发送命令和地址,对nand flash 内部数据进行访问。
相比之下,nor flash 就像是并行访问,nand flash就是串行访问,所以相对来说,前者的速度更快些。
所以,一个常见的应用组合就是,用小容量的Nor Flash存储启动代码,比如uboot,系统启动后,初始化对应的硬件,包括SDRAM等,然后将Nand Flash 上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM 中去执行内核了,然后内核解压(如果是压缩内核的话,否则就直接运行了)后,开始运行,在Linux 内核启动最后,去Nand Flash 上,挂载根文件,比如jffs2,yaffs2 等,挂载完成,运行初始化脚本,启动consle 交互,才运行你通过console 和内核交互。至此完成整个系统启动过程。
而Nor Flash 存放的是Uboot,Nand Flash 存放的是Linux 的内核镜像和根文件系统,以及余下的空间分成一个数据区。
区别:
1> nor 成本高,读写数据时不易出错,适合存储少量代码;
nand 成本低,读写容易出错,容量大。
2> Nor,有类似于DRAM 之类的地址总线,可以直接和cpu 相连,CPU可以直接通过地址总线对nor flash 进行访问
nand flash 没有这类的总线,只有IO 接口,只能通过IO 接口发送命令和地址,对nand flash 内部数据进行访问。
相比之下,nor flash 就像是并行访问,nand flash就是串行访问,所以相对来说,前者的速度更快些。
所以,一个常见的应用组合就是,用小容量的Nor Flash存储启动代码,比如uboot,系统启动后,初始化对应的硬件,包括SDRAM等,然后将Nand Flash 上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM 中去执行内核了,然后内核解压(如果是压缩内核的话,否则就直接运行了)后,开始运行,在Linux 内核启动最后,去Nand Flash 上,挂载根文件,比如jffs2,yaffs2 等,挂载完成,运行初始化脚本,启动consle 交互,才运行你通过console 和内核交互。至此完成整个系统启动过程。
而Nor Flash 存放的是Uboot,Nand Flash 存放的是Linux 的内核镜像和根文件系统,以及余下的空间分成一个数据区。