天天看点

s3c2440裸机程序是怎么运行的?突破!

目录

S3C2440的启动方式?

为什么系统能够从Norflash直接启动,而不能直接从Nandflash启动?

S3C2440从nandflash启动流程?

Nand启动裸机程序是怎么运行的?你要怎么写?

先介绍硬盘flash和内存sdram

  1. NOR FLASH(2M):ROM存储器,通常用来保存BootLoader,引导系统启动。NOR FLASH:它的特点是支持XIP芯片内执行(eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中,也就是说可以随机寻址。NOR FLASH的成本较高。

(2)NAND FLASH(256M,型号不一样,Nandflash大小不一样):保存操作系统映像文件和文件系统。不支持XIP。可做嵌入式里的数据存储介质。如:手机存储卡,SD卡等。

   (3)SDRAM(64M):内存,执行程序,系统运行。

S3C2440的启动方式?

  • NOR启动
  • nandflash启动

则由OM0和OM1引脚(开发板具体通过拨码开关控制)来选择。

OM1 OM0 说明
1 nor flash启动

nand flash启动

 s3c2440的MMU有一种“steppingstone”.技术,它是协助MCU从无法执行程序的NAND FLASH执行启动程序的一种方法。

为什么系统能够从Norflash直接启动,而不能直接从Nandflash启动?

 Nandflash和Norflash是不同的:

  • Norflash像内存一样是直接挂在系统总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接通过总线访问Norflash上存储的内容,同时他还支持XIP(即片上执行,不用将代码搬到内存中,直接在Norflash上就能运行)。 
  • nandflash它并不是直接挂载系统总线上,而是通过Nandflash控制器(这个一般集成在CPU内部)来完成读写操作的。如果我们把Norflash的那种寻址方式叫直接寻址的话(不是汇编里的那个直接寻址,这里指CPU能够直接通过地址线访问存储器的存储单元),那么这里的Nandflash就是间接寻址(这里需要Nandflash控制器来寻址)。所以我们在使用Nandflash之前,一定要初始化Nandflash控制器。

   理解上面的这点后,就不难理解,

S3C2440从nandflash启动流程?

S3C2440A引导代码可以在外部NAND Flash存储器上存储。为了支持从NAND Flash启动,S3C2440A配备了一个内置的SRAM缓冲器,叫做“Steppingstone(垫脚石)”。

片内内存Steppingstone地址 0x0000000-0x00001000(4096字节)

Nand地址 0-4k字节 (前面4096字节),以及4k以后的部分

在配置NAND启动模式之后,S3C2440上电会先将NAND中的0x0 - 0x1000共4096字节的数据拷贝到位于Bank0中的Boot Internal SRAM上

从NAND flash启动时,cpu硬件会把NAND flash前4k复制到Steppingstone的4k的内部RAM(开始地址0x000000),然后从Steppingstone的0地址执行!

复制大小为多少:4K。

复制到哪里去:Steppingstone(垫脚石)。

复制完接着做什么:执行复制到Steppingstone这4k代码

Nand启动裸机程序是怎么运行的?你要怎么写?

注意:nandflash、norflash、sdram都是外面的设备,是独立于cpu的外部的,cpu所接外设控制器的访问地址访问这些设备。

  Sdram就是笔记本的内存条ram一样,断电丢失数据。我们程序就是加载在内存条中运行的。所s3cc2440我们接了两个sdram就是类似于笔记本插了两根内存条。我们从flash这种硬盘的加载程序到内存条里面,程序就可以跑了!!

请注意!NOR Flash 能够像内存一样读操作,不能像内存写入和擦除,所以norflsh程序还是得复制到内存sdram中运行。

一句话,嵌入式开发板上片外内存指的就是SDRM。

一句话,嵌入式开发板上片内内存指的就是Steppingstone。

我们硬件上会自动从NANDFLAH复制到4K到Steppingstone,并从Steppingstone的0地址执行。

那么这4k程序你要怎么写,

如果你的软件小于4k,Steppingstone执行的这4k,你要写成把自己这4k复制到SDRM(内存)里,复制后跳到SDRM中执行。

如果你软件大于4k就是4096字节,怎么办?

第一个问题:

你放在nandflash的软件要怎么放?

即链接脚本怎么写,要把nandflash存放的分为两部分:

  1. 前4k(nandflash0-4095)地址是引导用到。{head.o,init.o,nand.o}
  2. 4k以后(nandflash4096机以后)字节以后地址存放的数据,才是你真正的程序。(main.o)

第二个问题

前4k你要怎么写?

也就是硬件从nandflash复制到Steppingstone的4k要执行什么?你要把程序写作初始化nandflash使你能读nandflash,并把nandflash地址4k以后的数据复制到SDRAM,调到SDRM的mian执行.

片外内存SDRAM对于外设控制器的访问地址是0x30000000,执行片外内存Steppingstone里面的复制的4k程序,就是把nandflash的4k以后数据复制到0x30000000,跳到SDRAM的开始地址执行0x30000000执行程序。

下面是一个启动图

s3c2440裸机程序是怎么运行的?突破!