0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指定了SDRAM却烧写到了Nand flash的详细分析

h1654155971.7688 2017-12-21 18:14 次阅读

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

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18285

    浏览量

    288475
  • SDRAM
    +关注

    关注

    7

    文章

    409

    浏览量

    54732
  • NAND
    +关注

    关注

    16

    文章

    1544

    浏览量

    134799
  • FlaSh
    +关注

    关注

    10

    文章

    1551

    浏览量

    146646

原文标题:为什么指定了SDRAM,程序却烧写到了Nand flash?

文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    教你用JLINKNOR/NAND FLASH

    your_file.bin 0x30000000 g 这时,你的文件已经被下载到SDRAM 0x30000000去了。 后面的操作就是u-boot的命令。2.4 使用u-bootFla
    发表于 03-27 09:51

    DVI接口详细分析

    DVI接口详细分析DVI 接口规格和定义 DVI 有DVI 1.0 和DVI 2.0 两种标准,其中 DVI 1.0 仅用了其中的一组信号传输信道(data0-data2 ),传输图像的最高像素时钟
    发表于 08-11 09:51

    uboot代码详细分析

    [url=]uboot代码详细分析[/url]
    发表于 01-29 13:51

    写虽然只有简单几步,太多知识点

    flash的时候一般会指定一个地址0X3000_0000,而S3C2440的官方手册上指明了0X3000_0000地址对应的片内外设是SDRAM。这不禁让人产生疑问:明明是指定
    发表于 12-15 20:29

    请问程序如何写到指定FLASH中?

    concerto f28m35请教:程序如何写到指定FLASH中?用仿真器可以直接下载吗?我对程序写没有清晰的概念,求赐教!
    发表于 10-30 10:14

    请问u-boot写ucosii系统能不能写到nand flash中去?

    SDRAM中并且可以运行,一断电就没了。。。。能不能写到nand flash中去呢,就像写l
    发表于 08-06 23:29

    TMS320C6748的nand flash写问题

    请问一下大家,我遇到了nand flash写问题,我们参照TI的C6748核心板做了一套板子,和TI核心板上的nand
    发表于 10-25 11:21

    详细分析一下USB协议

    本文跟大家一起详细分析一下USB协议。
    发表于 05-24 06:16

    详细分析stm32f10x.h

    每日开讲---学习STM32不得不看的剖析(详细分析stm32f10x.h)摘要: 学习STM32不得不看的剖析(详细分析stm32f10x.h)。/**这里是STM32比较重要的头文件*******************************************
    发表于 08-05 07:44

    详细分析VTIM和VMIN的功能

    上一篇文章中,我们详细分析VTIM和VMIN的功能,《嵌入式Linux 串口编程系列2--termios的VMIN和VTIME深入理解》 也明白这两个参数设计的初衷和使用方法,接下来我们 就
    发表于 11-05 07:09

    详细分析嵌入式Linux系统启动流程

    在嵌入式Linux专题(一)中已经对嵌入式Linux系统的架构及启动流程有初步的介绍,本文将详细分析嵌入式Linux系统启动流程。
    发表于 11-05 09:25

    电子工程师必须掌握的20个模拟电路详细分析

    内含参考答案以及详细分析
    发表于 10-07 07:15

    uboot1-1-6代码详细分析

    uboot 1-1-6版本的 代码详细分析
    发表于 11-02 11:02 25次下载

    Buck变换器原理详细分析

    Buck变换器原理详细分析
    发表于 09-15 17:26 30次下载
    Buck变换器原理<b class='flag-5'>详细分析</b>

    正激有源钳位的详细分析

    正激有源钳位的详细分析介绍。
    发表于 06-16 16:57 56次下载