一个嵌入式工程师对内存映射的若干疑惑

jidonghui 2012-05-11 09:29:22
最近 在移植uboot,引发出一个思考,内存映射到底怎么理解,到现在我还没有理解透彻。以6410为例:

S3c6410支持32位地址空间,并且这些空间被分为两部分,一部分作为“存储空间”,另一部分为“外设空间”。其中主存空间经由SPINE总线,地址空间为0x0000 0000 ~ 0x6FFF FFFF。
主存空间被化分为四个区:
1、 启动引导区(0x0000 0000 ~ 0x07FFF FFFF ,并没有实际映射)
一般内部存储区或静态储存区会映射到此处,但注意,起始地址固定为0x0000 0000.
2、 内部存储区
用来访问内部的ROM或者内部的SRAM,以用来存储启动代码,即:steppingstone。
l 每个内部的ROM的起始地址是固定的,0x0800 0000 ~ 0x0BFF FFFF,但实际上只有32KB可用,而且是只读的。当选择以内部ROM启动时,应该把此处区域映射到启动引导区。
l 内部SRAM的地区空间是0x0c00 0000 ~ 0x0FFF FFFF,但实际上只有4KB.
3、 静态存储区(0x1000 0000 ~ 0x3FFF FFFF)
可以用来访问SROM,,SRAM, NOR Flash,asyncronous NOR interface device, OneNAND Flash, and Steppingstone。这六个区域,每个区代表一个片选(即:可接一片存储芯片),例如:0x1000 0000 ~0x1FFF FFFF代表Xm0CSn[0],并且每个区的起始地址是固定的(即:不可通过软件配置)。
l NAND、CF、ATA不能在此区访问,如果Xm0CSn[5:2]任何一个区被配置到NFCON或者CFCON中,这些地址空间都是不能被访问的。
² 一个特例:如果Xm0CSn[2]被用于NAND FLASH,那么steppingstone被映射到0x2000 0000 ~ 0x2FFF FFFF
4、 动态存储区(0x4000 0000 ~ 0x6FFF FFFF)
动态区被为分两部分:
DMC0:0x4000 0000 ~ 0x4FFF FFFF
DMC1:0x5000 0000 ~ 0x6FFF FFFF
该区域的起始地址是可配置的。

外设空间:
外设空间是经由PERI总线来传输数据的,地址空间为0x7000 0000 ~ 0x7FFF FFFF。所有的特殊功能寄存器呵以访问这些地址。

uboot启动是从0x0地址开始的。
所谓的0xC000000前4K空间 是什么意思?
启动引导区不是应该 是0x0000 0000 ~ 0x07FFF FFFF 么?
既然 要把启动代码拷贝到前4K 那跟 0x0 又是怎么联系 的??
还有内存映射到底怎么理解啊? 搞不清楚。

S3C6410都有哪些物理地址空间?
主存空间经由SPINE总线,地址空间为0x0000 0000 ~ 0x6FFF FFFF。
外设空间由PERI总线来传输数据的 地址空间为0x7000 0000 ~ 0x7FFF FFFF。
32位地址线,所访问的4G空间 怎么跟这些实际有的 地址空间对应的?????


哪位前辈有比较容易的理解方法,不如向小弟推荐一下,定当膜拜……
...全文
605 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JustinLin 2013-08-24
  • 打赏
  • 举报
回复
nand flash把前4k的数据存到0xc0000000地址开始处,后面说把0x00000000映射到这个地方,这个映射是怎么实现的呢?各位大神能不能提示一下啊!
xuyinglin 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

怎么知道是8K???? 手册上明明写着可用是4K啊。如下

Internal memory area is used to access internal ROM and internal SRAM for boot loader, which is also called
Steppingstone. Start address for each internal memory is……
[/Quote]4K就足够用了吧,从nandflash拷贝过来的4k代码,包括start.S,虽然只是bootloader的一部分,但是完成了bootloader的镜像拷贝和pc跳转,这就足够了。
jidonghui 2012-05-14
  • 打赏
  • 举报
回复
怎么知道是8K???? 手册上明明写着可用是4K啊。如下

Internal memory area is used to access internal ROM and internal SRAM for boot loader, which is also called
Steppingstone. Start address for each internal memory is fixed. Address range of internal ROM is from
0x0800_0000 to 0x0BFF_FFFF, but real storage is only 32KB. This region is read-only, and can be mapped to
boot image area when internal ROM booting is selected. A ddress range of internal SRAM is from 0x0C00_0000 to
0x0FFF_FFFF, but real storage is only 4KB.
ti_tantbx 2012-05-14
  • 打赏
  • 举报
回复
2410、2440是4K,6410是8K
jiazurongyu 2012-05-12
  • 打赏
  • 举报
回复
0x646e6140?是4k吧 不是很熟悉
jidonghui 2012-05-11
  • 打赏
  • 举报
回复
对“上电启动后nandflash会把nand上的前4K的数据搬移到4K的RAM中”的理解,
这句话是不是可以这样理解:
uboot.bin 下载到nandflash后,nandflash的前4K存的 一定是 uboot第一个阶段的代码吗?
搬移到 4K的ram,这4kRAM是不是 就是 http://blog.chinaunix.net/uid-24201396-id-165988.html 图中的
0x00000000 开始的4K空间???
zhenghn2010 2012-05-11
  • 打赏
  • 举报
回复
先弄清楚概念和基本过程。

映射是根据需要来进行的,也可以关闭。一般是有操作系统使用比较复杂。

刚启动,肯定没有映射,根据芯片,有固定的启动地址,然后运行一个引导程序,如uboot。这个程序怎样运行,可以打开映射,然后根据要运行的操作系统的需要个规划,把程序搬到对应位置,此刻可能和操作系统实际运行的有出入,因为操作系统可能也要进行重新配置。 总之最终操作系统开始运行并根据自己需要配置了,就是一般看到的情况了。

一个过程承接一个过程,理顺好了就行了,有些绕
jidonghui 2012-05-11
  • 打赏
  • 举报
回复
nand把前4k的数据 存到0xc0000000地址开始的地方,然后把ram地址映射到0x00000000的地方 CPU是从这里开始执行的。
但是有个以为 6410的疑问
ram是从 ox0c000000 - 0x0fffffff;
可手册上说可用的仅4k 网上有的说 6410是ram是8K
怎么 回事???
falloutmx 2012-05-11
  • 打赏
  • 举报
回复
nandflash的前4K存的 一定是 uboot第一个阶段的代码吗?
99.99%没错,要不什么都起来呢,谁知道应该从哪个位置启动Uboot?

不对,搬移到0x0c00 0000,然后映射过去。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧