S3C2440存储控制器的地址空间与MMU分析介绍

发布者:数字冲浪最新更新时间:2022-12-26 来源: elecfans关键字:S3C2440  存储控制器  地址空间  MMU 手机看文章 扫描二维码
随时随地手机看文章

一、S3C2440存储控制器

如果大家写过S3C2440的ARM裸机程序都应该知道通常SDRAM的起始地址是0X30000000,但是大家有没有想过为什么呢?下面我将给大家做一个简要的介绍。


查S3C2440的手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。于是S3C2440通过一个叫BANK的东东解决了这个问题。S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器,只要在某一时刻只选通一个BANK就可以实现1G的寻址空间每个BANK有个地址,对该BANK地址的访问实际上就是选通该BANK,于是ARM核只要发出一个地址,然后S3C2440的储存控制器只要把该地址解释成两部分:一部分是BANK地址一部分是连接到该BANK存储器内部的地址就可以访问了。


而作为32位的CPU,可以使用的地址范围理论上可以达到2的32次方等于4G,除去上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。

下面我们来看到S3C2440存储器的地址空间分布图

S3C2440存储控制器的地址空间与MMU分析介绍

左边的是表示CPU从NOR FLASH启动时的地址空间图,右边是CPU从NAND FLASH启动时的地址空间图。从图中可以看出SDRAM接在BANK6上面,地址为0X30000000,这就解释了开始最开始的那个问题。问题又来了为什么CPU从NAND和NOR启动时地址空间不同?这是因为NOR是线性结构,跟普通的内存差不多,它接在BANK0上。而NAND则是另外一种结构,S3C2440有专用的NAND控制器和地址线来连接,它不能接在BANK0上。CPU启动时必定从0地址开始执行程序,而从NAND启动时,0地址没有存储器,那CPU怎么办呢?于是就出现了一种叫“起步石”(stepping stone)的东东,它是S3C2440内部的一块4K的存储器,当从NAND启动时,0地址线会连接到起步石上面,同时CPU会通过内部的硬件将NAND FLASH开始的4K数据复制到起步石里面。起步石里面的程序一般设计为对SDRAM进行初始化,然后将NAND里面的部分程序复制到SDARM,然后跳到SDRAM开始执行程序。所以当做U-BOOT移植使其支持从NAND的启动时,需要对NAND的前4K程序做处理。


下面我们再来看看S3C440存储控制器一般所接外设的访问地址和部分寄存器的访问地址

S3C2440存储控制器的地址空间与MMU分析介绍二、S3C2440MMU

1.MMU的作用

我们再第一部分讨论的全部都是物理地址,注意不要与这部分要将的虚拟地址给混淆起来。


内存管理单元(Memory ManagerUnit)简称MMU。它负责将虚拟地址转换成物理地址,然后传给上部分介绍的存储管理器进行寻址。


现代的多用户多进程操作系统通过MMU使各个用户进程都有自己的独立的地址空间:地址映射功能功能使的个进程拥有“看起来”一样的地址空间,而内存访问权限的检查可以保护每个进程所用的内存不会被其他进程破坏。


我来打个蹩脚的例子。甲同学(进程甲)去一个图书管理员那儿去借名为“内存”的一本书,说他7点钟要用。图书管理员给甲同学一个牌子上面写着哪个层楼房哪个房间有这本书,不过这块牌子只能7点钟去取书,且只能借三个小时(权限),而乙同学同样要借这本书不过是12点,图书馆同样给乙同学一块牌子,不同的时这块牌子只能12点钟去取书也只能借三个小时。结果是甲乙同学都借到了这本书,他们都感觉拥有了这本书,在他们拥有这本书的期间不会被其他同学打扰。实际上这里的同学就代表进程,图书管理员代表是内核,牌子代表的是虚拟地址,书代表实际的内存,而MMU完成的工作就是拿到同学的牌子帮同学找到书的过程。


虚拟地址最终要转成物理地址才能读写实际的数据,这通过将虚拟地址空间、物理地址空间划分为一个同样大小的一块块小空间,然后为着两类小空间建立映射空间,有可能多块虚拟地址映射到同一块物理地址空间,或者有些虚拟地址空间映射具体物理地址空间上去。启动MMU后,CPU对外发出虚拟地址,然后MMU将虚拟地址转成物理地址再进行访问。


2.虚拟地址空间到物理空间的转换过程

在ARM CPU中使用页表的方式进行转换。linux内核一般使用两级页表的方式。页表是个什么东东,他就像我们的书上的目录,有主目录,次目录。当我们要找一个知识点的时候先找到主目录,然后再找到次目录再找到相应的知识点。每一个进程都会在内存里面创建一个目录,目录的存放地址保存起来。当需要访问目录时,就会将目录放到CPU的一个专用寄存器里面,然后MMU读取这个寄存器里面的值就会帮我们找到我们要访问的物理地址。


页表是怎样建立的呢?

实际上它就是在内存的一个地址内存放了第一级目录的内存地址,然后在第一个级的目录的内存内又存放了实际的物理地址。


关键字:S3C2440  存储控制器  地址空间  MMU 引用地址:S3C2440存储控制器的地址空间与MMU分析介绍

上一篇:基于ECOS操作系统在S3C2510开发板上的应用研究
下一篇:基于S3C4510B的串口网络服务器最小系统

推荐阅读最新更新时间:2024-11-18 10:00

基于S3C2440的测试系统数字稳压电源的设计
  0 引 言   直流稳压电源是一种比较常见的电子设备,一直被广泛地应用在电子电路、实验教学、科学研究等诸多领域。近年来,嵌入式技术发展极为迅速,出现了以单片机、嵌入式ARM 为核心的高集成度处理器,并在自动化、通信等领域得到了广泛应用。电源行业也开始采用内部集成资源丰富的嵌入式控制器来实现数字稳压电源的控制系统。数字稳压电源是用脉宽调制波(PWM)来控制MOS管等开关器件的开通和关闭,从而实现电压电流的稳定输出。数字稳压电源还具备自诊断功能,能实现过压过流保护、故障警告等。   相比之前的模拟电源,数字稳压电源大大减少了在模拟电源中常见的误差、老化、温度漂移、非线性不易补偿等诸多问题,提高了电源的灵活性和适应性。将SAMSUN
[单片机]
基于<font color='red'>S3C2440</font>的测试系统数字稳压电源的设计
S3C2440的中断寄存器的分类及中断的过程分析
S3C2440一共有60个中断源,其中有15个子中断源,它们与SUBSRCPND寄存器中的每一位相对应,其他45个中断源与SRCPND中的每一位相对应。要注意的是EINT4~7对应的是同一位SRCPND,而EINT8~23对应的也是SRCPND一位。 1 S3C2440的中断寄存器 中断分两大类:外部中断和内部中断。 1.1 外部中断寄存器 24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体可参考datesheet数据手册。 寄存器: EXTINT0-EXTINT2:分别设置EINT0—EINT7、E
[单片机]
<font color='red'>S3C2440</font>的中断寄存器的分类及中断的过程分析
S3C2440 I/O口初始化设置与注意事项
1. S3C2440A has 130 multi-functional input/output port pins and there are eight ports as shown below: — Port A(GPA): 25-output port (output only) — Port B(GPB): 11-input/out port — Port C(GPC): 16-input/output port — Port D(GPD): 16-input/output port — Port E(GPE): 16-input/output port — Port F(GPF): 8-input/output po
[单片机]
S3C2440—9.复制程序到SDRAM中执行
一.S3C2440的启动方式 S3C2440的MMU有一种“steppingstone”.技术,是协助MCU从无法执行程序的NAND FLASH执行启动程序的一种方法,其启动步骤如下: 1、系统上电后,首先自动判断是否是autoboot模式,如果使用 s3c2440是带有nandflash的,并且被设置成autoboot,从nandflash开始启动. 2、在判断是autoboot模式后,mcu内置的nandflash控制器自动将nandflash的最前面的4k区域(这4k区域存放着 bootloader的最前面4k代码)拷贝到samsung所谓的 steppingstone 里面(steppingstone是在S3C2440
[单片机]
S3C2440 用C语言点亮LED
一、从汇编到C函数 1、设置栈 为什么从汇编调用C函数需要设置栈? 1、因为arm汇编调用C函数参数要遵循APCS规则。即参数小于等于4个可以用R0-R3来传参;多于4个的参数,前四个参数用R0-R3传参,第五个参数开始使用栈来传参 2、C函数内部使用到的局部变量,它所存储的空间就是栈空间 3、C函数里面调用C函数时,需要用栈来保存返回地址(LR寄存器的值)。 二、怎么设置堆栈 1、设置SP寄存器 设置栈,本质就是将SP(堆栈寄存器)指向一块内存。在S3C2440处理器里,要指向那块内存呢? 由于S3C2440在上电启动的时候,外部内存还没有初始化,我们只能将SP指向它内部4Kb的SRAM。 又因为S3C2440支持nand
[单片机]
<font color='red'>S3C2440</font> 用C语言点亮LED
基于S3C2440和PCL6045BL的四轴运动控制器设计
运动控制系统已被广泛应用于工业控制领域。近年来,工业控制对运动控制系统的要求越来越高。传统的基于PC及低端微控制器日渐暴露出高成本、高消耗、低可靠等问题,已经不能满足现代制造的要求 。随着嵌入式技术的日益成熟,嵌人式运动控制器已经初露锋芒。基于ARM技术的微处理器具有体积小、低成本、低功耗的特点,决定其在运动控制领域具有良好的发展前景。 PCL6045BL是一种新型专用DSP运动控制芯片,它具有强大的数据处理能力和较高的运行速度,可以实现高精度的多轴伺服控制。为解决精密制造对低成本、可移植性强的通用型多轴数控系统的迫切需求,文中给出一种基于ARM 微处理器S3C2440与DSP专业运动控制芯片PCL6045BL构成的嵌入式四轴
[单片机]
s3c2440_LCD控制器设置及代码详解
1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的 形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通 过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LCD控制器结构图: 我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制器: a:LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器组成; b:REGBAN
[单片机]
s3c2440_LCD<font color='red'>控制器</font>设置及代码详解
基于Linux和s3C2440的GPC控制器设计
近年来,基于Internet的网络化控制系统已成为国内外测控领域研究的热点,在石油勘探开发、钢铁化工等领域有着广阔的应用前景。而控制器的设计和研发是整个网络控制系统的关键和核心。在一些地域高度分散以及环境恶劣的控制现场,使用嵌入式系统作为控制器节点,可更有利于多点分布式综合布控及并行处理,实现更好的测控效果。然而由于网络传输本身的特点,网络时延会不可避免地影响网络控制系统的控制性能和稳定性,因此本文提出基于S3C2440A及嵌入式Linux的GPC(Generalized PredictiveControl)控制器的设计方案,具有一定的通用性。 1 控制器硬件平台设计 控制器节点是嵌入式网络化测控系统的中心。在测控系统中
[工业控制]
基于Linux和<font color='red'>s3C2440</font>的GPC<font color='red'>控制器</font>设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved