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. Ionic 开发环境搭建

    android sdk环境搭建并非易事,本人经过无数失败,才使用以下方式成功 配置Ionic 开发环境 1.下载JDK并配置Java运行环境 http://www.oracle.com/technet ...

  2. Charted – 自动化的可视化数据生成工具

    Charted 是一个让数据自动生成可视化图表的工具.只需要提供一个数据文件的链接,它就能返回一个美丽的,可共享的图表.Charted 不会存储任何数据.它只是获取和让链接提供的数据可视化. 在线演示 ...

  3. 【Spring】Spring框架之Struts2和Spring的优点

    Java Web开发使用Structs2和Spring框架的好处 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术 ...

  4. go语言条件语句 if else

    示例: if a < 5 { return 0 } else { return 1 } 关于条件语句,需要注意以下几点:  条件语句不需要使用括号将条件包含起来():  无论语句体内有几条语 ...

  5. 学习笔记——关于HTML(含HTML5)的块级元素和行级(内联)元素总结

    1.首先我们要知道什么是块级元素和行级(内联)元素? 块级(block)元素的特点: ①总是在新行上开始: ②高度,行高以及外边距和内边距都可控制: ③宽度缺省是它的容器的100%,除非设定一个宽度: ...

  6. 一步一步教你如何解锁被盗的iPhone 6S

    即使你的iPhone6S设置了六位数的密码,甚至还设置了touch ID,但我要告诉你的是:你的手机仍然能被犯罪分子解锁. 事件背景 三天前,一位苹果用户的iPhone6S被偷了.随后,小偷重置了该用 ...

  7. C语言中的字符串

    字符串 字符串 用双引号引起来的多个字符. 在C语言中字符串是用’\0’结束的.即每个字符串的最后一个字符是’\0’,但是结束符不显示,仅仅标志该字符串到这儿就结束了. 二.声明字符串 char *s ...

  8. OC 类方法,对象方法,构造方法以及instancetype和id的异同

    OC 类方法,对象方法,构造方法以及instancetype和id的异同 类方法: 类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法.一般写一些工具方法. 类方法: 声明和实现的时候,以 ...

  9. mysql 判断表字段或索引是否存在

    判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ...

  10. AEAI DP开发平台精要

    1 背景概述 相信很多了解数通畅联软件的人对AEAI DP应用开发平台并不陌生,笔者在入职第一天就开始接触AEAI DP,使用AEAI DP开发过AEAI WM.AEAI CRM以及中国XXXX管理系 ...