查看了实际应用中小米手机,是使用的NAND+SDRAM方式,小米手机2:2GB DDR2 533运行内存(RAM)+ 闪迪出品16G储存芯片(ROM);
三星S3C2440A开发板:
内存 | 64M,可根据需要扩展到128M |
NAND Flash | 支持大容量NAND Flash,标配256M(首家推出,真正解决大页驱动难题,尤其适用于产品开发) |
NOR Flash | 一片4M NOR Flash |
启动代码是系统上电或者复位后运行的第一段代码 他的作用是在用户程序运行之前 对系统的硬件与软件运行环境进行必要的初始化 并在最后使程序跳转到用户程序 他直接面对ARM处理器内核以及硬件控制器进行编程。
S3C2440 支持从 NOR flash 或者 NAND Flash中启动。NOR Flash 的特点是 程序可以直接在芯片内执行 不必将程序读取到RAM中运行 NOR FLASH虽有这个优点 但是它的性价比远低于NAND FLASH
NOR FLASH启动: NOR FLASH --》映射到 nGCD0 其地址被映射为0x00000000
NAND_FLASH启动:S3C2440内部自带一块容量为4K的bootSRAM(叫做起步阶石“Steppingstone”)映射到nGCS0 其地址被映射为0x00000000
但系统上电或启动后 程序会从0地址处开始执行 因此我们需要把启动代码放在0地址处
NOR FLASH启动:程序可以在FLASH芯片中 直接被CPU执行
NAND FLASH启动:上电或复位后 0地址处为bootSRAM 启动前他里面是空的 启动后S3C2440 先通过硬件机制将NANDFLASH的前4K内容拷贝他里面去
如果系统的所有程序 编译链接后大小小于4K 那么系统的启动代码中无需考虑将程序从NANDFLASH 搬运到SDRAM 中去执行这个问题
如果系统中所编的程序编译后大于4K 那么系统的启动代码中需要包含一段将系统的全部程序从NANDFLASH 搬运到SDRAM的代码
系统启动时 只将NANDFLASH 的前4K 拷贝到了BootSRAM中,还有部分程序保存在NAND FLASH中 是无法内执行的 所以前4K被拷贝到BootSRAM中需要有能将程序拷贝到SDRAM中的代码。
因此从NAND FLASH中启动 牵涉到两次拷贝
1:nandflash前4K --> BootSAM 自动 无需人为干扰
2:从nandflash中搬运系统到SDRAM 需要程序员 控制
//
======================开发板NAND FLASH 启动===================================
//这一个真正的全裸代码。具体原理是这样的:
//首先是设置到NAND Flash 启动。当ARM 上电后,会自动读取NAND Flash
// 0x0000000地址处执行代码。我们将代码编译联接地址也设为0x0000000
//然后,用Jflash 烧写时,烧写到NAND Flash的0x0000000。那么上电后就会
//执行你的代码。
1:交叉环境的建立
2:连上开发板与PC上的JTAG线.开发板接上电源,
=========================开发板NOR FLASH 启动================================
编译u-boot,把编译生成的新的u-boot.bin烧写到NorFlash中。开发板上电启动后,则在超级终端(或类似的软件)中显示的结果为:
U-Boot 2011.06 (Jul 30 2011 - 23:40:44)
DRAM: 64 MiB
Flash: 2 MiB
NAND: raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
No NAND device found!!!
0 MiB
*** Warning - bad CRC, using defaultenvironment
In: serial
Out: serial
Err: serial
Net: CS8900-0
ZHAOCJ2440 #
从上述显示的内容可以看出本开发板的一些基本的信息,如DRAM为64M,NorFlash为2M,由于我没有设置NandFlash,因此系统没有检测到NandFlash,命令提示符也已经修改为“ZHAOCJ2440 # ”。
总结:nor flash启动和nand flash启动都需要选择启动方式并把程序烧到相应的flash中。