《micro2440开发》第七章:micro2440从NAND FLASH启动原理分析
===================================================================================== 接上:《micro2440开发》第一章:S3C2440A地址空间 ARM是不能直接从NAND FLASH启动的,这包括两层意思: ? 其一、ARM刚启动时不能直接获得NAND FLASH上存储的程序;因为对NAND FLASH的读(写)操作需要软件时序。 ? 其二、ARM不能在NAND FLASH上执行程序;因为NAND FLASH是顺序存储设备、不能被随机访问,程序就不能分支或跳转、这样没法设计程序。 ? 更深层次的分析以上原因: 一、为什么ARM刚启动时不能直接获得NAND FLASH上存储的程序? ? 因为NAND FLASH是挂在NAND FLASH控制器(NAND FLASH控制器挂在ARM系统总线)上的,它不像NOR FLASH直接挂在ARM系统总线上(地址线和数据线分开,来了地址和控制信号,数据就出来);NAND FLASH地址线和数据线在一起、需要程序来控制、才能出数据。 ? 通俗地说:NAND FLASH的读写时序是不能直接由ARM硬件产生的,要读写NAND FLASH是要通过程序来实现;要先命令(说明此时传的是地址)、在给地址,最后给命令(说明此时传的是数据)、才能读到NAND的数据。 ? 结论:ARM无法从NAND直接启动。除非装载完程序(也就是NAND FLASH控制器的相关操作程序),通过命令控制NAND FLASH地址和数据复用总线后;才能使用NAND FLASH。 二、为什么ARM不能在NAND FLASH上执行程序? ? 原因很简单;因为NAND FLASH是顺序存储设备。===================================================================================== 解决方案有两种: ? 其一、板子有NOR FLASH的情况;将bootloader烧录至NOR FLASH,然后从NOR FLASH启动、利用bootloader(bootloader完成了对NAND FLASH控制器的相关软件时序的设置,这时就可以操作NAND FLASH)将boot及kernel烧录至NAND FLASH。 ? 其二、板子没有NOR FLASH的情况;将bootlader先放置内存SDRAM、然后执行bootloader(这时也完成了NAND FLASH控制器的相关软件时序设置)将boot及kernel烧录至NAND FLASH。 ? 第一种方法现在用的比较多;第二种方法很少有人使用。 ? 上述两种方法只是解决了烧录问题;我们来分析从NAND FLASH的启动过程。 ? 最重要理解的一点是:从NAND FLASH启动的CPU(NAND FLASH控制器)都有一个特殊功能,即在CPU上电后、NAND FLASH控制器会自动地把NAND FLASH上的前4K数据搬移到SRAM中。这个过程不需要程序干涉。===================================================================================== ? 最后需要说明的是:上述SRAM只有4KB,所以NAND FLASH的启动会比NOR FLASH的启动复杂一些。把NAND FLASH中bootloader的前4KB拷贝至SRAM后,这4KB还需完成将剩余部分拷贝至SDRAM并跳转执行。 =====================================================================================(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |