微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于s3c2410从NAND Flash启动的问题--bootrom 4KB限制

关于s3c2410从NAND Flash启动的问题--bootrom 4KB限制

时间:11-10 来源:互联网 点击:
用的是S3C2410.见附件start.s 其中关于nand flash启动的那一段一直百思不得其解,按说从NAND FLASH启动时, 应该是前4KB映射到NGCS0,其中的代码将NAND中存放的程序拷贝到RAM中,但该文件提供的程序好象是先从NAND拷贝 128K的代码到ResetEntry开始的地方,即地址为0的地方,然后再从ResetEntry处拷到RAM中,但此时NGCS0好象只有4KB的 RAM区,怎么能存储128K的代码,一直没想通.望高手指点,谢谢!

搞明白了,是两条指令的差别

LDR r0,=_entry和ADR r0,_entry

前者是在编译的时候按照load address生成的绝对地址,后者反汇编后是相对当前PC寻址,例如在ADS中设置RO地址为0X30000000,那么前者传给r0的值是 0x30000000,而后者传给r0的值要视当前PC而定,一般从NGCS0中启动时,传给r0的值就是0。

amsungS3C2410支持Nor Flash和Nand Flash启动,在SBC-2410X上可以通过BOOTSEL跳线设置启动方式:
|------|
| 。。 |bootfrom nand flash
|------|

------。。bootfrom nor flash

注:
(1) BOOTSEL跳线在"串口"和"usb slave接口"之间
(2) 两个引脚用"跳线卡"连接,则表示从nand flash启动。拔下"跳线卡"表示从nor flash启动。

椐了解 NOR FLASH 是容量小,速度快,稳定性好,适合做程序存储器

NAND FLASH 总容量大,适合做数据存储器
是不能从NAND FLASH启动的,NAND FLASH是的读写时序是不能直接有ARM硬件产生的,要读写NAND FLASH是要通过程序来实现的,很明显能看出来的就是NAND FLASH只有8个数据、地址复用的数据地址接口
2410/2440可以直接从NAND FLASH启动的,因为它把NAND前面的4K映射到了RAM的空间

首先应该先了解FlashROM的种类

NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。

NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。

通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。

而且都是在一个总线完成的。

结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.

装载程序只能从maskrom或者Nor flash.

三星的2410可以从NF启动程序,它会把第一块的前4KB复制到内部SRAM中然后从SRAM执行,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行(NF地址不是线性的,程序不能直接运行,必须拷贝到线性RAM中)

从Nand Flash启动U-BOOT的基本原理
-------------------------------------------
前4K的问题
如果S3C2410被配置成从Nand Flash启动(配置由硬件工程师在电路板设置),S3C2410的Nand Flash控制器有一个特殊的功能,在S3C2410上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部RAM中,并把0x00000000设置内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。这个过程不需要程序干涉。
程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中。
启动程序的安排
由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2410的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。

u-boot源码不支持从nand flash启动,可是s3c2410支持从nand flash启动,开发板(sbc-2410x)加电后s3c2410将nand flash的前4k(保存有u-boot的部分功能--拷贝功能--把nand flash中的内容拷贝到SDRAM)拷贝到sram(s3c2410芯片内的sram)。这就需要修改u-boot源码,增加u-boot的功能: 使u-boot在得到执行权后能够将其自身拷贝到开发板上SDRAM中,以便处理器能够执行u-boot

.Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。

NAND FLASH不能够执行程序,本人总结其原因如下 :

1. NAND FLASH本身是连接到了控制器上而不是系统总线上。CPU启动后是要取指令执行的,如果是SROM、NOR FLASH 等之类的,CPU 发个地址就可以取得指令并执行,NAND FLASH不行,因为NAND FLASH 是管脚复用,它有自己的一套时序,这样CPU无法取得可以执行的代码,也就不能初始化系统了。

2. NAND FLASH是顺序存取设备,不能够被随机访问,程序就不能够分支或跳转,这样你如何去设计程序。

U-BOOT支持ARM、 PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统,主要用来开发嵌入式系统初始化代码 bootloader。bootloader是芯片复位后进入操作系统之前执行的一段代码,完成由硬件启动到操作系统启动的过渡,为运行操作系统提

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top