为什么指定了SDRAM,程序却烧写到了Nand flash?

转载 2017年12月12日 00:00:00

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在刚开始学习ARM9的裸机编程和Linux系统移植的时候,烧写Nand flash内存的时候对一些指定的地址产生了疑惑。


看过很多教学视频,他们在烧写程序到Nand flash的时候一般会指定一个地址0X3000_0000,而S3C2440的官方手册上指明了0X3000_0000地址对应的片内外设是SDRAM。这不禁让人产生疑问:明明是指定了SDRAM却烧写到了Nand flash,这到底是为什么呢?


要解答这个问题,首先要从Nand flash本身的结构说起。Nand flash的结构和RAM不一样,它的数据线是复用的,内与足够的地址线用来寻址,对于它的数据存取通常是以块为单位。这一点跟Nor flash不一样,Nor flash带有RAM接口,有足够的地址线进行寻址,所以CPU可以访问Nor flash内部的每一个字节,程序可以在nor flash中运行,而Nand flash不行,所以Nand flash中的程序想要运行必须拷贝到内存(一般是SDRAM)当中来。


当我们想烧写程序至Nand flash中时,会借助一个“中转站”,既SDRAM。程序先烧写到SDRAM中(这就是指定0X3000_0000地址的原因),然后在从SDRAM中拷贝到Nand flash中去,而这个拷贝工作由实现烧写到Nor flash中的uboot程序引导完成。

 

此外,当我们向2440开发板移植Linux系统的时候,要向Nand flash烧写三个文件,分别是:uboot、Linux kernel和文件系统。每一步的烧写也跟前面一样借用SDRAM作为烧写的“中转站”。但是,我们在烧写的时候并没有对每一步的烧写地址做特定的处理,那怎么能够保证写着三个文件的时候后面的不会覆盖前面的呢?个人理解是:还是Nor flash中的uboot程序的功劳,它会引导着三个文件分别拷贝到Nand flash的不同位置中。


那么说完了Nand flash烧录的问题,自然而然就应该说一下Nand flash中程序运行的问题。前面我们说到,Nand flash中不可以执行程序,而在我们选择从Nand flash启动的时候,S3C2440会自动将Nand flash的前4KB的代码拷贝到内存当中一个Stepping Stone(一般称为垫脚石)的片内内存当中(这一步操作由芯片内部的硬件决定,不用我们操心),PC跳转到0地址去执行这些代码。


但是这个片内内存只有4KB,当我们在Nand flash中的程序大于4KB的时候怎么办呢?


这时候就是这最先拷贝过去的4KB代码发挥作用的时候了。这4KB的代码会帮我们初始化SDRAM,然后将Nand flash中剩下的代码一并拷贝到SDRAM中,PC跳转到SDRAM中去执行剩下的程序(所以我们的裸机程序一般不会超过4KB)。


虽然说烧写只有短短的几步,但是其中蕴含的知识点还是蛮多的,这或许也就是嵌入式的特点吧。

640?

0?wx_fmt=jpeg

1.《单片机与嵌入式系统应用》12月电子刊新鲜出炉~

2.CPU和GPU擅长和不擅长的地方

3.Python是这样调用matlab程序的!

4.写了 15 年代码,总结出提升 10 倍效率的三件事

5.电子爱好者向电子工程师进阶,你需要做些什么?

6.C++17 标准正式发布,以后开发者可更简单地编写和维护代码

0?wx_fmt=gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

TQ2440开发板学习纪实(8)--- 从NAND Flash读取数据,把代码搬运到SDRAM运行

因为依赖于S3C2440的开机自动从Nandflash复制数据到片内SRAM执行,目前我们的可执行程序体积仍然不能大于4KB的限制。而我们的程序目前已经非常接近这个限制大小了,为了能够继续开发,必须突...
  • smstong
  • smstong
  • 2016年12月30日 16:39
  • 1073

SRAM、SDRAM、nor flash、nand flash理解以及uboot在nor flash和nand flash启动

· 笔者最近开始用mini2440开发板学习linux下uboot移植,学习的过程中涉及到uboot在nor flash、nandflash下启动以及和sdram关系。发现自己先前对于SRAM、SDR...
  • Hanjun__XMU
  • Hanjun__XMU
  • 2016年03月06日 15:55
  • 886

关于S3C2440开发板Nand flash程序烧写和运行的一些理解

这两天刚开始学习ARM9的裸机编程和Linux系统移植,在烧写Nand flash内存的时候对一些指定的地址产生了疑惑。 我看过很多教学视频,他们在烧写程序到Nand flash的时候一般会指定一个地...
  • Liu_Jack
  • Liu_Jack
  • 2016年03月14日 13:11
  • 2252

Nandflash启动,norflash启动,SDRAM总结

nand flash:适合大容量数据存储,类似硬盘; nor flash:适合小容量的程序或数据存储,类似小硬盘; sdram:主要用于程序执行时的程序存储、执行或计算,类似内存。S3C24...
  • u012582664
  • u012582664
  • 2016年06月27日 11:15
  • 1727

Jlink 烧写文件到 nandflash norflash

s3c2440开发板支持两种启动方式,一种是 nandflash 启动,此时 nandflash 中的前 4K 内容会由硬件自动拷贝至片内 SRAM 4K 内存中,这片内 4K 内存会被 map 到 ...
  • lizuobin2
  • lizuobin2
  • 2016年07月25日 17:14
  • 2576

DM36x使用串口和NAND启动完成NAND Flash烧写(一)

背景:项目进行到最后阶段,所有的启动都需要放到NAND Flash芯片上。但是由于硬件设计,没有添加网络和JTAG模块,所以常见的NFS和JTAG烧写方式失效。于是,我们需要寻找可行的烧录方式。平台:...
  • qq_36006553
  • qq_36006553
  • 2017年02月15日 23:37
  • 503

编程器烧写NAND flash的一些说明

注意事项: 1.大小端模式,也即在使用编程器时需不需要做字节反序 2.Spare area处理方式,需要还是不需要,是否含有私有ECC算法。 3.坏块处理方式。 摘要一段说明如下:(虽然针对西...
  • lqrensn
  • lqrensn
  • 2012年10月18日 09:32
  • 10159

mini2440烧写到nand flash 的方法

今晚偶然发现mini2440烧写逻辑程序到nand flash的办法,如图。点击开始烧写完成后。再按立即启动就能看到裸机程序的效果(比如跑马灯)。 但是重启后就没了,无论板子的开关nor还是nand...
  • sinat_20276189
  • sinat_20276189
  • 2016年03月16日 23:42
  • 694

单片机外挂SDRAM与NANDFLASH的系统规划,并设计一个山寨内核

STM32F4系列都是M4,STM32F4XX9系列可以
  • shujis625972380
  • shujis625972380
  • 2014年11月08日 09:36
  • 998

nand flash 烧写

有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot-2009.03差别不大,只不过这个u-boot-2009.03是从TI的网站上下载...
  • pointfish
  • pointfish
  • 2011年12月21日 19:02
  • 4617
收藏助手
不良信息举报
您举报文章:为什么指定了SDRAM,程序却烧写到了Nand flash?
举报原因:
原因补充:

(最多只允许输入30个字)