ARM学习篇 SDRAM理解
1.SDRAM单管存储单元
- 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理解的更多相关文章
- ARM学习篇 中断定时理解
1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...
- ARM学习篇一 点亮LED
要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...
- 《Mysql 公司职员学习篇》 第二章 小A的惊喜
第二章 小A的惊喜 ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...
- 鸟哥Linux私房菜基础学习篇学习笔记2
鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...
- 学习《深入理解C#》—— 泛型 (第三章3.1---3.2)
泛型是什么? 泛型(generic)是C# 2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定 ...
- 学习《深入理解C#》—— 委托的构成、合并与删除和总结 (第二章1.1---1.4)
目录 简单委托的构成 合并和删除委托 委托总结 简单委托的构成 委托四部曲: 声明委托类型. 必须有一个方法包含了要执行的方法. 必须创建一个委托实例. 必须调用委托(invoke)实例 ① 声明委托 ...
- 学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)
目录 C#可空类型 C# 可选参数和默认值 C# 可空类型 在日常生活中,相信大家都离不开手机,低头族啊!哈哈... 假如手机厂商生产了一款新手机,暂时还未定价,在C#1中我们该怎么做呢? 常见的解决 ...
- 学习《深入理解C#》—— 数据类型、排序和过滤 (第一章1.1---1.2)
引言 在开始看这本书之前看过一些技术博客,填补自己对于一些知识点的不足.无意中发现了<深入理解C#>这本书,本书主要探讨C# 2.C# 3和C# 4的细节与特性,所以做了一下阅读笔记,欢迎 ...
- python-基础学习篇(一)
python基础学习(一) 不积硅步,无以至千里.基础的学习越加透彻,才能更清楚的理解和分析需求,我贯彻基础学习“永无止境”的理念,故把自学的知识梳理在博客中,基础学习篇无限更新. python介绍 ...
随机推荐
- 网站开发中很实用的 HTML5 & jQuery 插件
这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...
- Ampersand.js - 模块化的 JS 应用程序开发框架
Ampersand.js 是一个高度模块化,松耦合,用于构建先进的 JavaScript 应用程序的框架.通过良好定义的方法,结合了一系列微小的 CommonJS 模块.条理清晰,没有多余的冗余代码. ...
- Gulp.js 参考手册,自动化构建利器
Gulp 是最新的基于 Node 的自动化构建工具,希望能够取代 Grunt,成为最流行的 JavaScript 任务运行器.通过结合 NodeJS 的数据流的能力,只需几步就能搭建起自己的自动化项目 ...
- xwamp 目录结构设计
xwamp 目录结构设计原文来自:http://www.xwamp.com/make/directory-structure. 目录说明 所有程序都统一放在D盘下的xwamp目录. 目录列表 Apac ...
- 关于EJB的理解
这一段时间一直在北京面试,很多都有关EJB的相关问题,于是上网查了各种资料.所以,EJB到底是什么? 简而言之:EJB就是将已编写的软件中的业务类.不放到客户端软件中,而将其打包放入服务器中.以C/S ...
- SharePoint 2013 搭建负载均衡(NLB)
服务器架构(三台虚机:AD和Sql在一台,前端两台) DC.Sql Server,其中包括:AD.DNS.DHCP服务(非必须): SPWeb01,其中包括:IIS.SharePoint: SPWeb ...
- Autodesk 产品开发培训开始报名-8月26~28-武汉– Revit, Vault, Autodesk Viewer, Navisworks
为了帮助Autodesk中国地区的二次开发人员有机会系统地了解与学习Autodesk 在BIM解决方案中的旗舰产品 Revit以及Navisworks等产品的最新开发技术,并有机会与Autodesk ...
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- Swfit 字符与字符串
Swfit 字符与字符串 OC 定义字符 char charValue = 'a'; Swift 定义字符 var charValue:Character = "a" Unicod ...
- 学习 MySQL-DBA常用SQL汇总
创建用户 GRANT USAGE ON *.* TO 'rp'@'%' IDENTIFIED BY 'rp' MAX_UPDATES_PER_HOUR MAX_CONNECTIONS_PER_HOUR ...