S3C6410 NAND启动流程

S3C6410 NAND启动流程

分类: 嵌入式ARM-Linux   861人阅读  评论(4)  收藏  举报

        S3C6410和2440的NAND启动流程大体一样,也有一些区别。这篇文章主要目的是梳理下S3C6410 NAND启动流程,也给这几天的学习来个总结。

        S3C6410主存的地址范围为 0x0000_0000~0x6FFF_FFFF。主存部分分成四个区域:引导镜像区,内部存储去,静态存储区和动态存储区。

       引导镜像区的地址范围是从0x0000_0000~0x07FFF_FFFF,但是没有实际的映射内存,引导镜像区反映一个镜像,这个镜像指向内存的一部分区域或者静态存储区。引导镜像的开始地址是0x0000_0000

        内部存储区用于启动代码访问内部ROM和内部SRAM,也被称为Steppingstone。内部ROM地址范围为0x0800_0000~0x0bff_ffff,为只读,当内部ROM启动被选中时,该区域能映射到引导镜像区。内部RAM地址范围为0x0c00_0000~0x0fff_ffff,可读写,当NAND启动被选择时,能映射到引导镜像区。


(图中steppingstone 4K是错误的,不知道为什么,有的芯片资料说是4K,有的说是8K,我请教过别人都是说8K,并且在内部SRAM设置sp为8*1024程序能正常跑,说明8K没有超出范围)


启动流程:

        给板子上电之后,硬件会将nand前8K代码拷贝到steppingstone中,steppingstone会映射到引导镜像区,代码从0x0地址开始执行。可以通过这段启动代码将uboot等加载进SDRAM,实现更多功能。

        这里有个小问题困扰了很久,因为这点跟2440不同,就是为什么nand里8K拷贝进steppigstone后程序从0地址开始跑,而不是0x0c00_0000(steppingstone 地址0x0c00_0000),后来又看了芯片资料,steppingstone会映射到引导镜像区,引导镜像区在映射之前是不指向实际内存地址的。我做了个测试,当8K拷贝完后,我将PC指针分别指向0x0,和0x0c00_0000去执行,发现执行的代码是一样的。所以以0x0,和0x0c00_0000为起始地址的8K代码其实是一样的,都是指向物理地址为0x0c00_0000的这段代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值