存储控制器与CPU及其它外设的关系

  我们看到cpu上集成了一个存储管理器,外围的存储设备都接在这个存储管理器上。cpu负责发出命令,其它的一切工作都交给了存储管理器。那么存储管理器是如何来管理这些外设的呢?
  首先地址空间被分为8个bank(bank0-bank7),每个bank对应128m空间。每个bank都对应一个选通位(nGCS0-nGCS7),选通位为低电平是表示该bank选通。这样的话,虽然地址线只有27条,但是总的地址空间可以达到了1G。s3c2440的地址空间组织如下图所示:

  

  我们看到地址空间是0-0x40000000,果然是1G。那么s3c2440的cpu是32位的,他可以使用的地址理论上可以达到4G,除了用于连接外设的1G地址空间之外,还有一部分是cpu内部寄存器的地址,其余的地址没有用。其中cpu的内部寄存器的地址都在:0x48000000-0x5fffffff之间。

  下面我们比较关心的一个问题就是如果我们想要访问一个外设的话,我们应该发出什么地址?其实很简单,首先由nGCSn来确定基地址,然后用地址线表示的地址加上这个基地址就是我们需要的外设的访问地址了。 我们以DM9000为例来说明一下: DM9000用到的片选信号是nGCS4,地址信号只有一个那就是LADDR2,nGCS4对应的基地址是:0x20000000,LADDR2为0代表可以写入的地址,为1代表可以读出数据的地址。那么我们要将一个数据写入DM9000的话,就需要向地址:0x20000000写入数据,如果要从DM90000读出数据的话,就需要从地址:0x20000004读出数据。也就是说cpu访问DM9000的地址只有两个,读数据的话就访问:0x20000000,写数据的话就访问:0x20000004 我们再以SDRAM为例来分析一下: 我们只分析一片SDRAM,并不去管那个扩展了。我们的SDRAM是挂接在bank6上面的,所以基地址是:0x30000000。接在SDRAM上的地址线有15条,分别是:LADDR2-LADDR14,以及:LADDR24-LADDR25。cpu访问SDRAM的地址为:基地址0x30000000+15位地址线表示的地址,其地址范围是:0x30000000-0x33ffffff,共64M空间。 为什么会这样呢?这其实是一个比较复杂的过程,我们来分析一下: 首先SDRAM的地址可以分为3部分:L_BANK、行地址、列地址,如下图所示:

  LADDR24-LADDR25对应于4个L-BANK
  LADDR2-LADDR14对应于行地址和列地址,根据控制位来决定是行地址还是列地址,其中行地址13位,对应LADDR2-LADDR14,列地址9位,对应LADDR2-LADDR10,所以地址一共26位,即64M空间。
  那么为什么要空出LADDR0-LADDR1呢?因为SDRAM是32的,即一个地址对应着4个字节,而cpu每发出一个地址对应1个字节,所以cpu发出4个地址才能对应SDRAM的一个地址。
  我们jz2440上其它一些外部存储设备的地址空间我们就不一一分析了,下面贴出来:

JZ2440开发笔记(6)——存储控制器的更多相关文章

  1. JZ2440开发笔记(9)——位置无关代码设计【转】

    b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性) 看bootloader的时候经常看到这两种写法,不太明白区别,网上查了查.其实看了之后还是一头雾水? 其中,2和3 似乎是一个 ...

  2. JZ2440开发笔记(8)——FCLK、HCLK和PCLK

    S3C2440中有三种时钟,分别是FCLK,HCLK和PCLK.这三种时钟的功能各不相同,其中FCLK主要是为ARM920T的内核提供工作频率,如图: HCLK主要是为S3C2440 AHB总线(Ad ...

  3. JZ2440开发笔记(7)——2440启动方式

    JZ2440的启动方式有两种,一种是从NOR FLASH中启动,还有一种就是从NAND FLASH中启动. 如果从NOR FLASH启动,CPU会访问NOR FLASH的0地址,而0地址位于BANK0 ...

  4. JZ2440开发笔记(5)——通过按键点亮LED

    在JZ2440中,点亮LED就是给LED的控制位设置为输出,数据位设置为低电平,而通过按键点亮LED,就需要将按键对应的控制位设置为输出. 下面是JZ2440的3个LED电路图: 下面是JZ2440的 ...

  5. JZ2440开发笔记(2)——minicom的安装和配置使用【转】

    一.安装配置minicom 1.安装minicom lingd@ubuntu:~$ sudo apt-get install minicom 2.配置minicom lingd@ubuntu:~$ s ...

  6. Android 开发笔记___存储方式__共享参数__sharedprefences

    Android 的数据存储方式有四种,这次是[共享参数__sharedprefences] 听起来挺别扭的,平时看到的app里面,当用户删除了一些软件以后下次安装,发现原来的设置还在,这种情况就是把一 ...

  7. LeapMotion控制器 java语言开发笔记--(连接控制器)

    (1)为了连接LeapMotion控制器,创建controller对象,这个对象自动创建与控制器的服务或者后台程序连接,然后捕获数据提供给你的应用程序.可以使用该对象来获取连接信息. (2)获取Fra ...

  8. LeapMotion控制器 java语言开发笔记--(LeapMotion控制器简介)

    (1)LeapMotion系统识别和追踪手,手指,以及根手指类似的工具,这个设备运行在一个极小的范围,这个范围拥有个高精度,高跟踪频率可以记录离散的点,手势,和动作. (2)LeapMotion控制器 ...

  9. JZ2440开发笔记(4)——设置静态IP

    1. 配置静态ip地址 $sudo vim /etc/network/interfaces 原有内容只有如下两行: auto lo iface lo inet loopback 向末尾追加以下内容: ...

随机推荐

  1. 实现一个div在浏览器水平居中

    第一种方法: div { margin: 0 auto; width: 960px; } 第二种方法(兼容IE): body { text-align: center; } div { margin: ...

  2. PYTHON代码摘录

    文件处理 #典型的读取文件代码 row_data = {} with open('PaceData.csv') as paces: column_heading = paces.readline(). ...

  3. 【python】Python 3 +pycharm中文支持解决方案

    使用环境:window10 + python 3.5.1 方法:在代码前端增加代码:# -*-coding:gbk-*-

  4. Python守护进程(多线程开发)

    本段代码主要作用是httpsqs队列的消费端守护进程,从httpsqs中取出数据,放入mongodb #!/usr/bin/python import sys,time,json,logging im ...

  5. 几种更新(Update语句)查询的方法【转】

    正 文: 数据库更新就一种方法Update,其标准格式:Update 表名 set 字段=值 where 条件不过根据数据的来源不同,还是有所区别的:  1.从外部输入这种比较简单例:update t ...

  6. ASP.NET MVC NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  7. sencha touch json store

    js: Ext.define('MyApp.store.MyJsonStore', { extend: 'Ext.data.Store', requires: [ 'MyApp.model.Perso ...

  8. 服务器环境搭建系列(二)-Tomcat篇

    1.解压缩Tomcat的tar包,默认放在opt下 tar -zxvf apache-tomcat-6.0.35.tar.gz 2.输入如下命令修改tomcat配置文件 vi /opt/apache- ...

  9. SpringMVC的controller方法中注解方式传List参数使用@RequestBody

    在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...

  10. 背投广告js

    js: $('#appwrap').append('<a href="http://web.2144.cn/gateway/reg?pos=8966" id="ad ...