存储控制器与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. CSS3的position:sticky介绍

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...

  2. dataTable 禁止分页

    $("#id").DataTable({ "paging": false, // 禁止分页 });

  3. Binding的源和路径

    书上写着:Binding的源也就是数据的源头.Binding对于源的要求很简单-只要他是一个对象!并且通过属性(Property)公开自己的数据,它就可以作为Binding的源了.就像上一篇我写的那个 ...

  4. 制作进度条(UISlider)

    怎样判断是否应当使用进度条 用进度条的主要目的是为了用一根管子的充满程度来直观地表示某种数值的百分比,进度条分为可拖动和不可拖动两种. 可拖动进度条和不可拖动进度条的原理几乎是一模一样,唯一的区别是可 ...

  5. 网络请求 post 的接受请求头的代理方法

    接收响应头 content-Length content-Type - (void)connection:(NSURLConnection *)connection didReceiveRespons ...

  6. 自定义一个"花瓣"菜单-b

    先来看一下效果 XLCircleMenu.gif 是不是觉得挺好玩的呀. 通过这篇文章你可以学到: 1.系统UITableView的部分设计思想 2.自定义控件常用设计思路 3.动画的具体使用 4.手 ...

  7. Codeforces Round #210

    A:简单题: #include<cstdio> using namespace std; int n,k; int main() { scanf("%d%d",& ...

  8. 日志分析-Web

    http://my.oschina.net/chenguang/blog/376267 http://my.oschina.net/chenguang/blog/371275 http://my.os ...

  9. POJ3663

    题意简单. 关键:记录每头牛的val值,每次寻找和某头牛匹配的牛时候,可以通过刚刚记录的值来计算. #include<stdio.h> #include<string.h> # ...

  10. AHB总线和APB总线

    AHB主要用于高性能模块(如CPU.DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作:非三态的实现方式:支持突发传输:支持分段传输:支持多个主控制器:可配置 ...