烧写虽然只有简单几步,却蕴了太多知识点

 

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



广告



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

虽然说

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

广告

关于立创商城

立创商城(WWW.SZLCSC.COM)是嘉立创集团旗下一家品种齐全、自营库存、质量有保障的电子元器件垂直商城,自建6000多平米现代化元器件仓库,现货库存超35000种。立创商城所有元器件均由原厂或代理商正规渠道采购,保证原装正品。

采购元器件推荐上立创商城,注册后可领取15元无门槛使用优惠券,如需业务编号请填写“N”,或直接点击阅读原文注册


    关注 玩转单片机


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册