S3c2451开发板的启动过程详解

-----转载地址:http://blog.csdn.net/qq_33595823/article/details/52566761


1、概念基础

SRAM,STATIC RANDOM ACCESS MEMORY  就是静态随即存储器
SROM static read only memory 静态只读存储器
ROM ,只读存储器
RAM,随即存储器
DRAM,英文全称Dynamic Random Access Memory,即动态随机存取存储器
SDRAM,同步动态随机存储器 同步就是需要同步时钟
NOR Flash 和 NAND Flash 是现在市场上两种主要的非易失闪存技术。

 

注:开发板 SRAM          64KB

(手册p34) (64KB for internal SRAM Buffer(8KB internal buffer for booting))

   SDRAM         256MB

   NANDFLASH     256MB

SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是这样的。在s3c2440这颗CPU上这个SRAM大小为4KB,datasheet里把它叫做Stepping Stone,江湖人称起步石

 

1.1 NOR FLASH与NAND Flash 区别

1)接口区别:
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。
通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。而且都是在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.

 

2)性能区别

NOR的传输效率很高,在14MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
● NOR的读速度比NAND稍快一些。
● NAND的写入速度比NOR快很多。
● NAND4ms擦除速度远比NOR5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少。

 

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

 

理解上面的这点后,就不难理解,为什么系统能够从Norflash直接启动,而不能直接从Nandflash启动。

这是因为,ARMCPU复位时,CPU默认会到0x0000 0000地址处去取指令,而如果我们是从Norflash启动的话(一般Norflash会挂到Bank0,nGCS0)s3c2440 CPU就会把Norflash的空间挂接到0x0000 0000这段内存空间上。这时CPU就能够直接从Norflash上取指令运行,启动了。而如果是Nandflash, 因为Nandflash他不能直接挂到系统总线上,并且他的读写,擦除操作必须依赖Nandflash控制器,这也就意味着Nandflash的存储空间永远不能映射到0x0000 0000这个地址上去。


1.2 能够运行程序的存储器

1IROMNOR FLASH(0x0000 0000)

2SRAM             (0x4000 0000)

3SDRAM            (0x3000 0000)

 

1开发板上一般都用SDRAM做内存,flashnornand)来当做ROM。其中nand flash没有地址线,一次至少要读一页(512B).其他两个有地址线

2nandflash不用来运行代码,只用来存储代码,NORflashSDRAM可以直接运行代码.

 

2、启动介质

讲到启动系统,那么需要哪些存储介质才行呢?首先得有启动介质,也就是掉电后代码不会丢失并且上电后就能运行(不需要初始化,否则怎么运行呢),我们知道内存是不行的,内存掉电后数据就清空了。norflash就能掉电后数据不丢失,并且可以总线式访问(挂在总线上就可以使用,不需要初始化)。所以norflash可以作为启动介质,但这家伙一般比较小,因为贵嘛,所以代码一般运行在内存,容量大,便宜。现在一般开发板内容都用DDR2. 理论上 有NORFLASHDDR2就可以了,但三星还另外加了一块SRAM。为什么要加SRAM呢?因为NORFLASH只能读,不能写,那么就不能进行数据交换,而DDR2此时还不能用,那么只能用SRAM来保存全局数据和设置栈空间。所以210的存储结构为IROM(类似于NORFLASH+SRAM+DDR2的结构)

注:IROMNORFLASH功能作用相似,但结构不同,我们开发板不用NORFLASH,都用IROM



3NORFLASH启动过程

 

 

刚上电时,首先执行iROM内的固化程序(不能人工改变),按照IROM内的命令,cpu会自动从NAND flash读取前8KB的数据放置在片内SRAM0x4000 0000),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000cpu是从0x00000000开始执行,也就是NAND flash里的前8KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行。

注:上电时移植的8K就是superboot8K,主要作用将主程序拷贝到RAM (一般是SDRAM)中运行,同时还有初始化内存(SDRAM),关闭看门狗,初始化时钟等作用。

 

通过下载器,可以看出我们是直接下载到SDRAM0x3000 0000)中,当然我们前面讲过SDRAM必须要先初始化,才能应用,其实就是给SDRAM分配(0x3000 0000)地址。这些初始化操作是在移植的8K中完成的。因此我们可以直接运行SDRAM的我们自己写的程序。

 

从下载器中,可以看出我们也是可以选择下载到NAND FLASH中,那时便需要再将NAND FLASH复制到SDRAM中。

如果执行的代码<8KB,程序直接在SRAM中运行。

如果执行的代码>8KB,要把代码完整的搬到SDRAM中运行。

 

注意:我们会发现,刚开始点亮led灯时,我们没有写时钟程序,为什么灯还是能点亮,这是因为在移植8KSRAM时,就打开时钟了,我们自己编写的时钟程序,只是覆盖了superboot的时钟程序。


4.Nandflash启动和Norflash启动的判断

在u-boot运行的第一阶段,需判断系统是从Nandflash还是Norflash启动
/* check boot device is nand or nor*/
ldr r0, =0x00000000
ldr r3, [r0]
ldr r1, =0xfffffffe
str r1, [r0]

ldr r2, [r0]
str r3, [r0]
cmp r1, r2
beq nand_copy

这里判断的方法是先保存好地址0处的内容,然后往地址0处赋值0xfffffffe并记录此值到r1,然后再取地址0处的值放到r2,比较r1和r2的值,如果相等,系统就是从Nandflash启动的,否则就是从Norflash启动的。
nand flash启动是将前4K/8K内容拷贝到SRAM,然后将SRAM映射到地址0处,因此可以直接往地址0处赋值取值
nor flash启动时,nor flash映射到地址0处,可以直接在nor flash中运行,往nor flash写数据需执行一套特定的指定,往Norflash的地址0处赋值是不能成功的

猜你喜欢

转载自blog.csdn.net/laozhusb/article/details/70884623