程控直流电源程序烧写的简单几步里有多少知识点?

在刚开始学习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)。


虽然说

程控直流电源程序烧写只有短短的几步,但是其中蕴含的知识点还是蛮多的,这或许也就是嵌入式的特点吧。


图片加载中...

在线留言

◎欢迎您的留言,您也可以通过以下方式联系我们:

◎客户服务热线:021-51095123

◎邮箱:xin021@126.com

展开