欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:19:17 责任编辑: Author_N1

 

一个嵌入式工程师对内存映射的若干疑惑
最近 在移植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空间 怎么跟这些实际有的 地址空间对应的?????


哪位前辈有比较容易的理解方法,不如向小弟推荐一下,定当膜拜……
--参考方法--
先弄清楚概念和基本过程。

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

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

一个过程承接一个过程,理顺好了就行了,有些绕
--参考方法--
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:19:17
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20742/
本文WWW.DOC100.NET DOC100.NET版权所有。