首先是2440的存储控制器:

  暂时不管是从nand启动还是nor启动,因为我现在只关注内存,从上图可以看到由2440的Memory Controller可以寻址的范围是0x0000,0000---0x4000,0000,总共是1G,这1G又分为8个bank,bank0-bank7,每个bank为128M, 8*128M=1G。其中bank0-bank5这6个bank是只能接SROM,那么什么是SROM,2440数据手册的221页说明了,SROM是ROM或者SRAM。

  

通用存储设备:

  内存存储设备的存储方式:ROM,RAM

    ROM(Read-Only Memory):只读存储器,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。如:PC里面的BIOS。

    RAM(Random Access Memory) :随机访问存储器,存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。可以理解为,当你给定一个随机有效的访问地址,RAM会返回其存储内容(随机寻址),它访问速度与地址的无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间内随机访问使用的程序。计算机系统里内存地址是一个四字节对齐的地址(32位机),CPU的取指,执行,存储都是通过地址进行的,因此它可以用来做内存。

  RAM按照硬件设计的不同,随机存储器又分为DRAM(Dynamic RAM)动态随机存储器和SRAM(Static RAM) 静态随机存储器。

    DRAM它的基本原件是小电容,电容可以在两个极板上短时间内保留电荷,可以通过两极之间有无电压差代表计算机里的0和1,由于电容的物理特性,要定期的为其充电,否则数据会丢失。对电容的充电过程叫做刷新,但是制作工艺较简单,体积小,便于集成化,经常做为计算机里内存制作原件。比如:PC的内存,SDRAM, DDR, DDR2, DDR3等,缺点:由于要定期刷新存储介质,存取速度较慢。

    SRAM它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。因此其存取速度快,但是体积较大,功耗大,成本高,常用作存储容量不高,但存取速度快的场合,比如CPU的L1 cache,L2cache(一级,二级缓存) ,寄存器。

  由于价格和存储量的限制,mini2440上作为内存的就是DRAM,从上图看得出,只有bank6,bank7才能接DRAM,那么我猜想控制bank6,7的Memory Controller对应的寄存器肯定有一个控制刷新的部分,其他几个不具备,因为不需要。再看看mini2440上的内存芯片怎么和2440接线的,它使用了2块16位宽的SDRAM:

  

  从上图来看,芯片包括了最基本的地址线,数据线,对比2块芯片,发现它们相同的地址线是连在一起的,都是A0-A12,共13根地址线,而数据线一块是连接2440的LDATA0---LDATA15,一个是LDATA16-LDATA31,再看看2440的引脚:

  可以看出,2440的数据线是DATA0-DATA31,可以接收的数据宽度是32位,而它的地址线是ADDR0--ADDR26,一共是27根,那么2^27就是128M,正好是内存控制器一个bank的大小。再联系SDRAM和2440的接线方式,发现数据线32根分别由2块芯片对接,2块芯片分别用16根,而地址线只用了13根,2^13=8K,那怎么可能做到寻址128M呢?何况SDRAM上居然是从LADDR2开始接线的。那么就得看看SRAM的手册,看看它是怎么被寻址的。

  

  mini2440上SDRAM型号是H57V2562GTR,是一个256Mb的16位位宽的DRAM,注意这里是256Mb,是小b,所有总共是256/8=32MB。看看SDRAM内部的结构功能框图:

这款DRAM内部的存储单元首先是由4个称作BANK的单元组成,然后每个BANK单元上是由一个存储矩阵组成,通过XY轴定位到最小寻址粒度的一个单元,也就是一个16bit的存储单元。然后把这个16bit的单元里面的数据放到数据输出口上。打个比方,假设一块DRAM是一个Excel文件,那么它的bank就是Excel的一个sheet,由横坐标(ABCDEF.......)和纵坐标(12345....)定位一个最基本的单元格,这个单元格就是DRAM的基本存储单元,这款DRAM是16位宽的,所有基本存储单元就是16bit。在看看左下角的Address Buffers,A0-13,地址线,BA1-BA0,bank选择线,首先通过片选信号CS选中这块芯片,然后由BA[0,1]选中bank,再在A0-A12上发出行地址,然后发出列地址,这样一个最小寻址粒度的存储单元就定位下来了,怎么知道地址线上的是行地址还是列地址呢?通过 RAS和CAS这2根信号线。那现在再计算一下128MB怎么来的,行13,列13,bank 2,这样2^13*2^13*2^2 = 2^28 然后是16位宽再乘2,就是2^29MB,521MB,怎么一块就超过了2440的寻址范围,肯定是哪搞错了,再细看DRAM的介绍:

原来只有行地址用了13位,列地址只用了9位,那么通过计算一共是2^(13+9+2+1)=32MB,和芯片的规格一致,那么这样解释就合理了。2440怎么使用这2块SDRAM的呢?首先要确定几个条件,2440芯片本身实际的寻址能力是4G,存储控制器的寻址范围是0x00000000-0x40000000,一共是1G,这1G又分成了8个BANK,每个BANK 128MB,公式表达就是:ADDR = 2*  2 *  227

但是这样寻址这块SDRAM得到的数据是16bit,于是用2块拼接起来,一个来存储低16位,一个存储高16位。假设地址0x30000000,寻址它怎么得到这个存储单元的内容呢?首先它是属于1G这个范围内,然后又是处于bank6,BANK0,行0,列0.

由此可见仅仅需要30位就可以定位一个access cell,这也就是为什么2440地址线只接了A2开始的13位到SDRAm上,由于2440的存储控制器每次只能以4byte对齐访问,一个int的4个byte分别存储在2个芯片上,然后4byte的数据读到存储控制器,地址还未用到的最低2位在存储控制器里面决定是用哪个byte。这就是一个byte的寻址过程。

  2440SDRAM可以使用16位宽的2片拼接,或者8位的4片拼接,32位的1片。显然如果是2片时,这2片的大小必须要一样大的,否则多出来的就会只能存16bit,其他的位会丢失掉,4片也是同样的。

  H57V2562GTR,SDRAM管脚说明

外接管脚名

内接管脚名

全称

描述

A2~A14

A0~A12

Address

地址线

D0 ~D31

DQ0~DQ31

Data Input/Output

数据线

A24,A25

BA0,BA1

Bank Address

L-BANK片选信号

DQM0~DQM3

LDQM, UDQM

Data Input/Output Mask

高,低字节数据掩码信号

SCKE

SCKE

Clock Enable

输入时钟有效信号

SCLK

SCLK

Clock

输入时钟

nSCS0

nSCS

General Chip Select

片选信号(它与nGCS6是同一管脚的两个功能)

nSRAS

nSRAS

Row Address Strobe

行地址选通信号

nSCAS

nSCAS

Column Address Strobe

列地址选通信号

nWE

newnWE

Write Enable

写入有效信号

看2片SDRAM和2440的接线可以看出来,它们只有数据脚和LDQM UDQM引脚不同,这2个引脚来决定数据引脚上高8位和低8位的有效性,由于2440内存控制器只能发出4byte对齐的数据给SDRAM(data线的连接固定了),那么我如果只想存储或者读取一个byte,怎么办?由这2个引脚来控制,它来决定16位宽的高低8位的有效性,确保不想改的byte内容不变。

参考自:

http://blog.csdn.net/mr_raptor/article/details/6555786

mini2440的SDRAM分析的更多相关文章

  1. Mini2440 DM9000 驱动分析(一)

    Mini2440 DM9000 驱动分析(一) 硬件特性 Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系: PW_RST 连接到复位按键,复位按键按下,低电平 ...

  2. mini2440触摸屏驱动分析

    mini2440驱动分析系列之 ---------------------------------------Mini2440触摸屏程序分析 By JeefJiang July,8th,2009 这是 ...

  3. am335x uboot启动流程分析

    基本指令含义 .globl _start .globl指示告诉汇编器,_start这个符号要被链接器用到,所以要在目标文件的符号表中标记它是一个全局符号 b,bl b是不带返回的跳转  bl带返回的跳 ...

  4. S3C2440 裸机程序之音频

     mini2440之Main分析 2012-03-17 20:51:29 分类: 嵌入式 /****************************************************** ...

  5. Linux网络设备驱动架構學習(二)

    Linux网络设备驱动架構學習(二) 接下來會從以下幾個方面介紹網絡設備驅動的編寫流程: 1.網絡設備的註冊與註銷 2.網絡設備的初始化 3.網絡設備的打開與釋放 4.網絡數據發送流程 5.網絡數據接 ...

  6. mini2440 Nor Flash工作原理分析

    我的mini2440上是只接了一块Nor Flash,型号是S29AL016M90TAI02,这是一块2M Byte,16位宽度的Nor Flash,用于引导扇区的闪存.原理图里面关键的引脚是: 地址 ...

  7. 【转】S3C2440与SDRAM NorFlash NandFlash连线分析

    一.SDRAM(HY57V561620F)连线分析 1.  S3C2440 有27根地址线ADDR[26:0],8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx 的地址 ...

  8. ARM裸板开发:04_MMU 链接地址与运行地址不一致时,(SDRAM)初始化程序地址无关码问题的分析

    ARM裸板开发过程,程序的链接地址设置为为0x30000000,而前期的启动代码以及相关硬件的初始化代码需要在内部iRAM(steppingstone,起始地址0x0)的4K中运行.链接地址与运行地址 ...

  9. mini2440 裸机程序下载到 sdram 不能运行。

    今天在 写了个简单的 led 的汇编程序,下载到 mini2440 的 nand flash 里面可以正常运行,但是下载到 sdram 里面不能运行. 后来发现有几个注意点, 要在 sdram 中运行 ...

随机推荐

  1. div与>div区别小结

    两者之间的区别:例如div span得到的是div下所有的span元素,而div>span则是取得的div下第一级的span元素. 示例代码如下: <!DOCTYPE html> & ...

  2. 【AngularJS学习笔记】00 序

    AngularJS通过新的属性与表达式来扩展HTML,有一种很形象的叫法,定义它为声明式语言. 为克服HTML在构建应用上的不足而设计! 这是它的目标. 它的官网进不去,应该是被墙了,这是goegle ...

  3. 【原创】C#通用权限管理-程序安全检查,这些你一定要考虑到位

    接触通用权限已经一年,现在使用已经很熟练,分享通用权限管理下面的一些好的开发思想. 安全漏洞对于一个小项目来说,可能不是特别的重视,对于一个大项目来说,这是特别重要需要注意的,特别是在项目开发中的就要 ...

  4. 最小生成树Kruskal算法(邻接矩阵和邻接表)

    最小生成树,克鲁斯卡尔算法. 算法简述: 将每个顶点看成一个图. 在所有图中找权值最小的边.将这条边的两个图连成一个图, 重复上一步.直到只剩一个图. 注:将abcdef每个顶点看成一个图.将最小权值 ...

  5. [PHP] 命令行执行整合pathinfo模拟定时任务

    命令行模式下,根据传参,调用不同控制器.控制器中根据配置定时执行指定方法 Application.php <?php class Application{ public static funct ...

  6. react与redux学习资料的整理

    **重点内容**React学习 1.新手入门可以访问react的官方网站,如果英语不是特别好的同学可以访问中文版的,具体链接http://reactjs.cn/react/index.html 首页有 ...

  7. (三)play之yabe项目【数据模型】

    (三)play之yabe项目[数据模型] 博客分类: 框架@play framework   创建项目 play new yabe What is the application name? [yab ...

  8. Angular框架

    Angular 框架 Angular介绍 库和框架的区别 jQuery:库 库一般都是封装了一些常用的方法 自己手动去调用这些方法,来完成我们的功能 code $('#txt').val('我是小明' ...

  9. 详解Paint的各种set方法

    一.前言 我们用set方法来设置画笔的样式,类似于我们挑选画笔画画的过程.由于上面有些方法不支持硬件加速,所以在高版本系统中可能会没有效果.因此,我们首先来看看官方废弃的方法. 下图来自:https: ...

  10. 安卓开发_浅谈SubMenu(子菜单)

    子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2 ...