《micro2440开发》第七章:micro2440从NAND FLASH启动原理分析

本文深入探讨了 ARM CPU 无法直接从 NAND FLASH 启动的原因,包括 NAND FLASH 的工作机制与 ARM CPU 的不兼容性,并提出了两种解决方案:通过 NOR FLASH 或者内存 SDRAM 来间接启动 NAND FLASH。重点分析了从 NAND FLASH 启动的过程,特别是 NAND FLASH 控制器在启动时自动将 NandFLASH 前 4K 数据搬移到 SRAM 中的过程,以及这一过程对启动流程的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=====================================================================================

接上:《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并跳转执行。

=====================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值