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介绍 ...
随机推荐
- 【循序渐进学Python】15.网络编程
Python 内置封装了很多常见的网络协议的库,因此Python成为了一个强大的网络编程工具,这里是对Python的网络方面编程的一个简单描述. 1. 常用的网络设计模块 在标准库中有很多网络设计相关 ...
- Code First :使用Entity. Framework编程(3) ----转发 收藏
第三章 对属性使用约定和配置 在第2章,对Code First的约定以及如何通过配置覆写默认约定行为进行了大致的介绍.学习了如何使用Data Annotations进行配置,也学习了如何使用Fluen ...
- 【精心推荐】几款极好的 JavaScript 文件上传插件
文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...
- 25款专业的 WordPress 电子商务网站主题
WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易用.这篇文章和大家分享35款专业的 WordPress 电子商务网 ...
- 【初探移动前端开发04】jQuery Mobile (中)
前言 昨天我们一起学习了一部分jquery mobile的知识,今天我们继续. 这些是些很基础的东西,有朋友觉得这个没有其它的好,但是学习下不吃亏嘛,我反正也不会一起学习基础啦. 例子请使用手机查看哦 ...
- [deviceone开发]-纳豆项目源码开源
一.简介 已上线的纳豆项目开源.这个App做的非常好,细节处理的很流畅,使用了很多小的动画效果,极力推荐,很多功能可以从这个应用中获取代码和灵感. 二.效果图 三.相关下载 androi ...
- AdaBoost算法实现
# -*- coding: utf-8 -*- # -------------------------------------------------------------------------- ...
- Android基础面试题
1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onP ...
- Day Tips:ForceDeleteSite
最近遇到一个奇怪的问题,如下图: 试了各种删除方式都不行. 谷歌了一下发现需要使用如下代码删除. SPWebApplication w = SPWebApplication.L ...
- Web服务器具体开发流程
下面是我个人对Web服务器开发流程的一点理解,下面做出了大概的模型,实现了基本的功能,下面也有所有的代码可以提供参考: 一开始学的时候不要把网站想的太复杂了,把网站的流程和大概的原理框架搞清楚,在通过 ...