下一节准备将代码重定位到DDR SDRAM,所以本节先对一些基础知识进行学习一下。
DDR出身自SDRAM,严格的说应该叫DDR SDRAM,DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思,所以,有很大一部分,两者是一样的,理解SDRAM,然后再来理解DDR。在SDRAM上的改进,效果应该更好一些,本文参考大神Tekkaman Ninja的博客中介绍的,并加入了一些自己的讲解。
先上一张SDRAM的结构图,如下图所示
SDRAM结构图
下面上一张简易的SDRAM工作流程图
SDRAM的内部是一个存储阵列,阵列就如同表格一样,将数据“填”进去。在数据读写时和表格的检索原理一样,先指定一个行(ROW),在指定一个列(COL),我们就可以准确的找到所需要的单元格,这就是内存芯片寻址的基本原理。这个单元格(存储阵列)就叫做逻辑BANK(简称L-Bank)。
SDRAM是多Bank结构,例如在一个具有两个Bank的SDRAM的模组中,其中一个Bank在进行预充电期间,另一个Bank却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电Bank的数据时,就无需等待而是可以直接读取了,这也就大大提高了存储器的访问速度。
为了实现这个功能,SDRAM需要增加对多个Bank的管理,实现控制其中的Bank进行预充电。在一个具有2个以上Bank的SDRAM中,一般会多一根叫做BAn的引脚,用来实现在多个Bank之间的选择。另外它们的行、列地址线共用,由行地址选通((CAS)、列地址选通(RAS)信号分时控制。
SDRAM简易工作流程图
图中用红色标明的就是我们需要找的几个主要时间,现在开始看图说话
1、芯片初始化
SDRAM 芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时都要先对这个控制逻辑核心进行初始化。
2、行有效
初始化完成后,要想对一个 L-Bank 中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后再确定列。简单点理解就先传行地址过来。
3、列读写
行地址确定之后,就要对列地址进行寻址了。读写的信号和列地址是同时发过来的,读写的操作取决于WE#引脚,当他使能则为写,否则为读。
在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为 tRCD,即RAS to CAS Delay(RAS 至 CAS 延迟),大家也可以理解为行选通周期,简单点理解就是说,在发完行地址后,再发列地址和读写信号时,需要延迟一下,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。
广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100 SDRAM,tRCD=2,代表1000/100 * 2 = 20ns 的延迟,下图是tRCD=3的时序图。
SDRAM 时序图 tRCD说明
4、数据输出(读)
在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据 I/O 通道(DQ)输出到内存总线上了。
但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为 CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以 CL 又被称为读取潜伏期(RL,Read Latency),下图是CL=2的示意图。
SDRAM 时序图 CL说明
5、数据输入(写)
数据写入的操作也是在 tRCD 之后进行,但此时没有了 CL(记住,CL 只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。 为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR 至少占用一个时钟周期或再多一点(时钟频率越高,tWR 占用周期越多)
6、突发长度--(Burst Lengths)
突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。 只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是 tRCD+CL)外,其后每个数据只需一个周期的即可获得。
7、预充电
由于 SDRAM 的寻址具体独占性,所以在进行完读写操作后,如果要对同一个Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。Bank 关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。 在发出预充电命令之后,要经过一段时间才能允许发送 RAS 行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)。和 tRCD、CL 一样,tRP 的单位也是时钟周期数,具体值视时钟频率而定。
8、刷新
之所以称为 DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作一样,都是用 S-AMP 先读再写。 但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank 中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank 预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。比如我有四片,刷新是我依次刷新四片内存中的某个地址,然后再刷下一个;而预充电的工作行地址可以不同。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000 秒),也就是说每一行刷新的循环周期是 64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到 4096 RefreshCycles/64ms 或 8192RefreshCycles/64ms 的标识,这里的 4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096 行时为 15.625μs(微秒,1/1000 毫秒),8192 行时就为 7.8125μs。
刷新操作分为两种:自动刷新(Auto Refresh,简称 AR)与自刷新(Self Refresh,简称 SR)。
SR 则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是 STR(Suspend to RAM,休眠挂起于内存)。在发出 AR 命令时,将 CKE 置于无效状态,就进入了 SR 模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在 SR 期间除了 CKE 之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使 CKE 有效才能退出自刷新模式并进入正常操作状态。
上一篇:Exynos4412裸机程序之DDR工作原理与时序(一)
下一篇:Exynos4412裸机程序之代码重定位初体验
推荐阅读
史海拾趣
在追求企业发展的同时,Federal Custom Cable也积极履行社会责任。他们注重绿色生产,采用环保材料和生产工艺,减少对环境的影响。同时,Federal Custom Cable还积极参与公益事业和慈善活动,回馈社会。这种关注社会责任、追求绿色发展的企业精神,使Federal Custom Cable在电缆行业中树立了良好的企业形象。
随着国内市场的逐渐饱和,Able Systems公司开始将目光投向国际市场。通过参加国际展览、建立海外销售渠道等方式,公司成功将产品推向了全球范围。同时,公司还积极与国际知名企业合作,共同开发新产品,进一步提升了公司在国际市场的竞争力。
随着电子行业的不断变革,Able Systems公司也面临着新的挑战。例如,新技术的出现、市场需求的变化等都对公司的发展提出了新的要求。然而,Able Systems始终保持着敏锐的市场洞察力,不断调整战略,积极应对挑战。通过不断创新和改进,公司成功克服了各种困难,保持了稳健的发展态势。
随着科技的不断进步和市场的不断变化,Excelta始终将技术创新作为公司发展的核心驱动力。公司投入大量资金和资源进行技术研发和产品创新,不断推出具有竞争力的新产品。其中,一款高性能的微型连接器产品凭借其出色的性能和稳定性在市场上取得了巨大成功。此外,Excelta还积极探索新的应用领域和市场机会,为公司的持续发展注入了新的活力。
随着电子行业的竞争日益激烈,Ambersil公司意识到,要想在市场中立足,必须注重产品质量。公司加大了对生产线的投入,引进了先进的生产设备和技术,严格把控产品质量。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。这些举措使得Ambersil公司的产品在市场上赢得了良好的口碑。
自成立以来,EPCOS一直致力于技术创新和产品拓展。公司不断投入研发资源,开发出了一系列高性能、高品质的电子元器件产品。这些产品广泛应用于通信、消费、汽车和工业电子等领域,赢得了众多客户的信赖和好评。同时,EPCOS还积极拓展国际市场,与全球众多知名企业建立了长期稳定的合作关系。
流线型设计,体积小巧, USB2.0接口,免电源,与台式示波器类似界面,易于上手. 更适合于笔记本电脑,生产线维修调整,便于出差使用。 小的尺寸(mm):190(L)x100(W)x35(H) ,便于携带. .高刷新率, 高采样率,200MS/s实时采样,50GS/s等效采样. ...… 查看全部问答∨ |
29、尽量用for而不是while做循环 --------------- 基本上来说,for可以完成while的功能,我是建议尽量使用for语句,而不要使用while语句,特别是当循环体很大时,for的优点一下就体现出来了。 因为在for中,循环的初始、结束条件、循环的推进, ...… 查看全部问答∨ |
STM32是ST公司推出的基于ARM公司的Cotex-M3内核的单片机,该单片机具有较大的存储空间、高速的内核以及种类齐全的外设。您的行业不管是消费电子,还是工业控制,STM32都是您明智的选择。 为了让大家的学习更加快捷、更有效率,飞嵌电子将推出系列 ...… 查看全部问答∨ |
WinCE 5.0补丁的问题(怎么找不到04、05、06年的补丁) 小弟请教各位一个问题: 我的pb5.0上补丁要从哪年开始打? 印象中以前在MS的网站上可以找到WinCE5.0从04年开始的补丁,可最近只能够找到07/08/09年的补丁,咋回事呢?… 查看全部问答∨ |
lenux、各位大侠: 郁闷了几天了,这个问题不解决,工作就停滞不前了,各位帮忙看看吧 我的问题是这样的: EVC4.0下,应用软件在Emulator下,设断点,单步运行,很慢很慢,每一步要3~5秒钟,什么原因呢? 我的说明一下我的环境及 ...… 查看全部问答∨ |
编译了一个NK。BIN文件,下载到板子,启动后,程序执行下面就不动了。 应该是我的Jump地址0x8c208810有問題,但沒找到修改这个的地方,哪位熟悉 的朋友提醒一下,谢谢! Jumping to image at virtual address 0x8C208810h +ToPhysicalAddr:0x8C ...… 查看全部问答∨ |
#include <reg52.h> #include <intrins.h> #include <absacc.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int sfr WDTRST = 0xA6;   ...… 查看全部问答∨ |
请问WINCE下支持wm format sdk 吗?? 如果不支持,在wince下怎样将从声卡取得的PCM数据转成WMA格式或者MP3格式呢?? 在wince下该怎样去调用系统提供的Windows Media Codecs呢?? 刚学习这方面的东西,请多多指教哈~~ 可以的话给个简单的wince下编解 ...… 查看全部问答∨ |
问一下我在EVC++的单文档里画了个圆,只在文档窗口的左上角显示1/4,怎么让让它显示在中央?代码如下: void CDWDht1View::OnDraw(CDC* pDC) { CDWDht1Doc* pDoc = GetDocument(); ASSERT ...… 查看全部问答∨ |