1.SDRAM单管存储单元

  1. SDRAM单管电路图

  

  C记忆单元

  T控制门管

  Z字线

  W位线

  注:图示为N沟道耗尽型MOS管

  • 写入:Z加高电平,MOS导通,W状态决定了电容C的状态
  • 读出:Z加高电平,MOS导通,可以从W状态得知C的状态
  • 保持:Z加低电平,MOS关闭,电容保持原状态
  • 注意:单管读出是破坏性读出,因为读出时电容充电或者放电了,所以读出后还要重写

2.      刷新与重写

  ●  刷新是每隔一段时间,自动重写一次;重写是破坏性读出后立即还原

  • 最大刷新间隔:所有的动态单元都被重新刷一遍的时间
  • 刷新周期:刷新一行所用时间
  • 刷新周期数:刷新一块芯片所用的刷新周期数
  • 刷新周期的安排方式:

  a). 集中刷新

  b). 分散刷新

  c).  异步刷新

2. SDRAM寻址机制

    1.  地址分布逻辑图

  

   图示大致说明了寻址方式,地址总线发出行列地址,选中相应的芯片,再读写。

  2.   K4S561632E功能模块图(SDRAM芯片)

  

 ● CLK系统时钟

 ● CKE时钟使能

 ● A0~A12地址线

 ● BA0~BA1块选择

● RAS'列信号使能

 ● CAS'行信号使能

 ● WE'写信号使能

 ● DQM控制数据输入输出

 ● Vdd/Vss供电电源/地

 ● Vddq/Vssq数据输出供电/地

  3.  SDRAM时序图

    1.片选信号时序图

  

● Tacs:片选信号nGCSn起效前,地址信号建立时间

● Tcos:在nOE起效前,片选信号建立时间

● Tacc:访问周期

● Tcoh:nOE结束后(即电平升高),片选保持时间

● Tcah:nGCSn结束后(即电平升高),地址信号保持时间

● Tacp:Page模式的访问周期

● 前面介绍了图示一些术语,有了一定了解,下面我们来分析上图:

  存储控制器使用HCLK作为其时钟

  CPU要访问某个地址,先发出地址给MMU,MMU再控制地址线,分批次发送行列地址。

  Page模式可以暂时忽略,因为我们还没用到离散存储管理(即物理内存分块,虚拟内存分页)。

  

  

●  Trp:SDRAM RAS预充电时间

●  Tsrc:SDRAM半行周期时间

●  Tcas:SDRAM列地址建立时间

关闭上一次操作,对上一次读的行全部重写一遍,即预充电;

S3C2440A发出片选,块选(BANK)信号同时发出列地址;

选中行后,发出列地址,读出相应数据,延迟几个时钟周期,I/O端口上就会出现所读数据

  4. 寄存器

  总线/位宽等待寄存器BWSCON

  总线控制寄存器BANKCON0~BANKCON5

  总线控制寄存器BANKCON6/7

  SDRAM刷新控制寄存器

  BANKSIZE寄存器

  SDRAM模式寄存器

  

5.寄存器配置(重点理解,我花了很长时间找资料、学习)

 a.  操作参数

注意看参数,相信大家这点英文基础还是有的。

S3C2440A的存储控制器的nGCSn、地址信号、nOE信号几乎同时发出,所以这些参数都设置为0

访问周期,根据手册,几纳秒内就可以访问到数据,所以可以尽量调低。

RAS到CAS延时:3CLK(Col. address to col. address delay+Last data in to new col. address delay+行选通信号到列选通信号的延时=3clk)

列地址:9位

预充电时间:20ns左右

行周期:65ns左右

CAS潜伏期:2或者3CLK

6. 基于以上了解,我们终于可以写代码

  

AREA SDRAM,CODE,READONLY
CODE32
ENTRY

SDRAM_BASE EQU 0X30000000

WTCON EQU 0X53000000;看门狗控制寄存器

BWSCON EQU 0X48000000
BANKCON0 EQU 0X48000004
BANKCON1 EQU 0X48000008
BANKCON2 EQU 0X4800000C
BANKCON3 EQU 0X48000010
BANKCON4 EQU 0X48000014
BANKCON5 EQU 0X48000018
BANKCON6 EQU 0X4800001C
BANKCON7 EQU 0X48000020
REFRESH EQU 0X48000024
BANKSIZE EQU 0X48000028
MRSRB6 EQU 0X4800002C
MRSRB7 EQU 0X48000030

;定义SDRAM相关寄存器

GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058

;定义GPIO端口

_ENTRY
B RESET
B .
B .
B .
B .
B .
B .;0X18
B .
RESET
LDR R0,=WTCON
LDR R1,=0
STR R1,[R0]

LDR R0,=GPFCON
LDR R1,=0X5555
STR R1,[R0]

LDR R0,=GPFUP
LDR R1,=0XFF
STR R1,[R0]

LDR R0,=GPFDAT
LDR R1,=0X5F
STR R1,[R0]


LDR R0,=BWSCON
LDR R1,=0X22011110
STR R1,[R0]

LDR R0,=BANKCON0
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON1
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON2
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON3
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON4
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON5
LDR R1,=0X00000700
STR R1,[R0]

LDR R0,=BANKCON6
LDR R1,=0X00018005
STR R1,[R0]

LDR R0,=BANKCON7
LDR R1,=0X00018005
STR R1,[R0]


LDR R0,=REFRESH
LDR R1,=0X008C07A3
STR R1,[R0]

LDR R0,=BANKSIZE
LDR R1,=0X000000B1
STR R1,[R0]

LDR R0,=MRSRB6
LDR R1,=0X00000030
STR R1,[R0]

LDR R0,=MRSRB7
LDR R1,=0X00000030
STR R1,[R0]
;设置SDRAM相关寄存器
LDR R0,=0X0
LDR R1,=SDRAM_BASE
LDR R2,=4096

COPY_LOOP
LDR R3,[R0],#4
STR R3,[R1],#4
CMP R0,R2
BNE COPY_LOOP

;复制相关0~4kB的代码到0x30000000开始的空间

LDR R0,=0X30000000
LDR R1,=ON_SDRAM
ADD R2,R0,R1
MOV PC,R2
ON_SDRAM

LDR R0,=GPFDAT
LDR R1,=0X3F
STR R1,[R0]
;点灯
LDR R0,=0X30000000
LDR R1,=ON_SDRAM
ADD R2,R0,R1
MOV PC,R2

END

  

  

ARM学习篇 SDRAM理解的更多相关文章

  1. ARM学习篇 中断定时理解

    1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●​若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...

  2. ARM学习篇一 点亮LED

    要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...

  3. 《Mysql 公司职员学习篇》 第二章 小A的惊喜

          第二章 小A的惊喜  ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...

  4. 鸟哥Linux私房菜基础学习篇学习笔记2

    鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...

  5. 学习《深入理解C#》—— 泛型 (第三章3.1---3.2)

    泛型是什么? 泛型(generic)是C# 2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定 ...

  6. 学习《深入理解C#》—— 委托的构成、合并与删除和总结 (第二章1.1---1.4)

    目录 简单委托的构成 合并和删除委托 委托总结 简单委托的构成 委托四部曲: 声明委托类型. 必须有一个方法包含了要执行的方法. 必须创建一个委托实例. 必须调用委托(invoke)实例 ① 声明委托 ...

  7. 学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)

    目录 C#可空类型 C# 可选参数和默认值 C# 可空类型 在日常生活中,相信大家都离不开手机,低头族啊!哈哈... 假如手机厂商生产了一款新手机,暂时还未定价,在C#1中我们该怎么做呢? 常见的解决 ...

  8. 学习《深入理解C#》—— 数据类型、排序和过滤 (第一章1.1---1.2)

    引言 在开始看这本书之前看过一些技术博客,填补自己对于一些知识点的不足.无意中发现了<深入理解C#>这本书,本书主要探讨C# 2.C# 3和C# 4的细节与特性,所以做了一下阅读笔记,欢迎 ...

  9. python-基础学习篇(一)

    python基础学习(一) 不积硅步,无以至千里.基础的学习越加透彻,才能更清楚的理解和分析需求,我贯彻基础学习“永无止境”的理念,故把自学的知识梳理在博客中,基础学习篇无限更新. python介绍 ...

随机推荐

  1. ZOOM - 简单易用的 jQuery 照片相册插件

    jQuery 最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一些让人惊叹的图片切换效果.ZOOM 是一款全屏效果的 jQuery 图片切换展示插件,支持键盘前后按键切换,支持 ...

  2. Material UI – Material Design CSS 框架

    Material Design 是谷歌推出的全新的设计理念,采用大胆的色彩.流畅的动画播放,以及卡片式的简洁设计.Material Design 风格的设计拥有干净的排版和简单的布局,容易理解,内容才 ...

  3. Wami Map Project – 开源的 OSM API 服务

    Wami 地图项目把 OSM 数据分享给所有的人,很容易使用.他们利用 MongoDB 的潜力进行大数据管理来实现从 OSM 数据来源搜索相关的数据.它们的 API 使人们有可能检索不同格式的 POI ...

  4. Autodesk View and Data API练练手

    大家如果参加过我们的活动,你应该已经听过看过不少关于View and Data Web Service的例子里,如果还没有的话,请看看下面这几篇: http://www.cnblogs.com/jun ...

  5. 愚人节大狂欢 – ADN DevBlog谎话连篇友谊赛

    愚人节过去了,你被捉弄了没有? :) 借这个机会,ADN的哥们儿也发泄狂欢了一把,我们4月1号当天在ADN DevBlog上发了一堆谎话连篇的blog,没有一个说实话的,哈哈.这是我们team内部进行 ...

  6. elipse + maven + tomcat + springMVC环境搭建

    1. java JDK安装 http://jingyan.baidu.com/article/b24f6c82c989da86bfe5dab2.html 2.eclipse安装 http://jing ...

  7. 定制Android透明按钮

    自己在学习和做例子的过程中,常常会需要按钮,由于系统自带按钮样式不太好看,所以需要我们自己来定制项目得按钮,我常常采用2中方法: 1.是制作9-patch的图片,这样能够匹配文字内容的长短. 2.是指 ...

  8. iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)

    本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...

  9. AOP的实现机制

    1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较. 类别 ...

  10. Windows 编程中的字符串(2)

    (1)windows写日志系统 void writeDebugEventLog(TCHAR* pszMessage, WORD wType) { //#ifdef _DEBUG HANDLE hEve ...