思黛姆(SDRAM)姻缘之物理纠缠

in WhereIN3 years ago (edited)

思黛姆(SDRAM)姻缘之物理纠缠

话说这是我在这个世界上偶然结识到的,它叫思黛姆(SDRAM),我不了解它,因而我看不透它。总感觉它神神秘秘的,叫人恼怒,可是我为什么要恼怒呢?我应该慢慢的接触它,亲近它,才能了解它。其实,它的能力很大,我看好多怡莱崔克(Electronic)的工作者都要求助于它。我或许该放弃我的傲慢,才能获得它的帮助呢!

呐,思黛姆(SDRAM),这天,我在它的粉丝见面会上,鼓起勇气,问到,"你为什么叫思黛姆?"其实我问过之后,就羞愧了,这个问题太愚蠢了,因为就好比问"桃花,你为什么叫桃花?"周围的人都轰然大笑,像看傻子一样的看着我。不过思黛姆没有不悦,反而稍有兴趣的看了我一眼。

之后,我在思黛姆论坛,发现了思黛姆的介绍,其实思黛姆的名字代表了它的六种特性:同步(Synchronous),动态(Dynamic),随机(Random),读写(Access),存储器(Memory)。

天呐,我感叹,有内涵的人就是不一样,连名字起的都这么……内涵。可是我有些头疼,思黛姆究竟是怎样的人呢?

不过我费劲心力的研究思黛姆,为的是与之建立连接。【同步】指的是它需要外部提供一个时钟,这个时钟与控制器的控制时钟(专门用来控制SDRAM数据读写的)一样。【动态】,指的是它内部的电荷总处于不断充放电过程,称为动态刷新,来保持存储器内的数据不变。【随机】,指的是数据写入和读出的地址可以随意指定。【存储器】指的是可以数据访问与读取。

SDRAM是以电容存储数据,掉电后数据会丢失,但是它的功耗很小。而且,它的存储容量可以做到很大(64MB)。

SDRAM的一位数据读写电路涉及到了行地址线,列地址线,行选通三极管,列选通三极管,刷新放大器,存储电容以及数据线构成【图1】。

要使数据线上有信号,一般先打开行地址,后打开列地址。行列打开的时间有一定的间隔,称为tRCD,active to read or write delay。不同型号不同速率的器件其值不一定相同。比如有的133MHz的器件其值为15ns,有的是20ns。那么行列选通的间隔时间分别是2和3个时钟周期。

当列地址被打开后,数据也不是立马出现在数据线上。也有延迟,称为列选通潜伏期,CL,CAS READ latency。不同速度等级的器件,CL值不同。

实际上,一个行地址和一个列地址,不是决定一个位,而是一个单元,比如16位总线数据,一个单元有16位,那么一个行和一个列同时控制8位数据。

SDRAM芯片的引脚有时钟引脚CLK,上升沿采样。CKE,时钟使能,为0时,时钟无效。CS_N,片选,屏蔽所有输入,但不包括CLK,CKE和DQM。RAS_N行地址选通,在低电平有效时,在上升沿锁存行地址,使能行访问和预充电。CAS_N列地址选通,在低电平有效时,在上升沿锁存列地址,使能列访问。WE_N写使能,使能写操作和预充电。BA[1:0],BANK地址。SA[12:0],地址总线。DQM[1:0]字节选通,无效时,对应输出为高阻态。DQ[15:0],数据输入输出复用。

关于BANK,存储器一般有4个bank,相当于4页。由bank地址选择。比如MT48LC64M4A2为64M存储器,4个bank,总线宽为4位,每个bank是16M。MT48LC32M8A2,4个bank,每个bank是8M,总共32M,8为数据总线。MT48LC16M16A2,总共16M,4个bank,每个bank是4M,16位总线。

其实有一点,我觉得有必要说一下,就是SDRAM是3.3V供电,而DDR是2.5V供电,而DDR2是1.8V供电。工作电压越低,信号频率越高。

SDRAM有13根地址线,译码成8192个行信号,对于256M的SDRAM,则11根地址线译码为2048个列信号,数据位宽为4,则总数据位是819220484。数据位宽为8,则为10根地址线。数据位宽为16,则为9根地址线。而128M的存储器,它的行地址线会变成12根,列会在12的基础上依照位数变化。这是SDRAM的编址规则。

接下来是SDRAM的读写。SDRAM的读写是以突发的方式进行的。从一个指定的【地址】开始,按编程好的【长度】和【顺序】写数据。

开始是一个禁止命令(CS_N被拉高了)。然后CS_N被拉低,其余控制均为高,进入无操作模式。然后,激活,RAS_N被拉低,地址线上为期望的行地址,bank上为期望的bank地址。此时WE_N为高,读。然后隔2~3时钟,CAS_N拉低,bank地址和数据地址为期望的列地址。激活时的bank和读的bank可以不一样。

【选中bank和行】激活,【选择bank和列】启动突发,所以可以在读的基础上直接写。突发终止,【行和列都置高】。预充电,【只关闭行】,可以用code选择是哪个bank。因为数据读写完毕,所以得关闭行来防止数据丢失。其实在预充电的过程,刷新放大器会重新向存储电容写入数据。

存储器有很多模式,通过加载模式寄存器来实现。还有写使能与输出使能控制。

命令有:
🎈命令禁止,不允许执行新的命令,{cs_n,ras_n,cas_n,we_n}=4'b1xxx;
🎈空闲或等待命令,
{cs_n,ras_n,cas_n,we_n}=4'b0111;
🎈加载模式寄存器,模式值由A[11:0]确定,A12为0。{cs_n,ras_n,cas_n,we_n}=4'b0000;加载模式寄存器后,要等待一个tMRD的时间。模式寄存器主要设置突发长度A[2:0],其中全1为full page,指的是一整行。设置突发模式A[3],分为顺序的和隔行的,隔行,可能跟大小端字节序有关。但full page的不支持interleaved模式。CAS,A[6:4],设置潜伏期时钟。Op_mode,A[8:7]一般就是标准模式,设置为0就可以。A9,为1,以编程的数量进行写突发,为0,单个写入。

🎈激活,打开bank和行,{cs_n,ras_n,cas_n,we_n}=4'b0011;打开另一行需预充电关闭当前行
🎈打开地址和列进行读取,BA[1:0]指定当前bank,{A11,A[9:0]}为4位总线当前列地址,A[9:0]为8位总线当前列地址,A[8:0]为16位总线当前列地址。A10则控制是否突发读取后立即充电,1,立即充电,0,不充电。DQM选择是否将数据输出,DQM0控制低8位,DQM1控制高8位。如果DQM为高,则【2个时钟周期后】,输出高阻态。{cs_n,ras_n,cas_n,we_n}=4'b0101;

我擦,思黛姆忽然大声吼道,不要再研究我了,我浑身发烧,额……这……我只能安慰它,思黛姆啊,把你研究透彻了,才能更好的为你服务啊!不理它……

🎈写突发,BA[1:0]指定当前bank,{A11,A[9:0]}为4位总线当前列地址,A[9:0]为8位总线当前列地址,A[8:0]为16位总线当前列地址。A10则控制是否突发写入后立即充电,1,立即充电,0,不充电。DQM选择是否将数据写入,DQM0控制低8位,DQM1控制高8位。如果DQM为高,则【2个时钟周期后】,数据无法被写入。
{cs_n,ras_n,cas_n,we_n}=4'b0100;只是【读时有潜伏期,写时没有潜伏期,一个上升沿写入一个数据】。

写可以进行随机写,一个时钟周期对应一个写地址和数据。一个写突发可以被另一个写打断。当然,也可以连续写。

🎈预充电,关闭行
{cs_n,ras_n,cas_n,we_n}=4'b0010;预充电后,所有bank处于空闲状态,需等待tRP后才能进行新的操作。A10为高,所有bank预充电,否则,只选中的bank预充电。
🎈自动预充电,就是前面由A10控制的充电过程

🎈突发终止,行列关闭
{cs_n,ras_n,cas_n,we_n}=4'b0110;
突发终止不会产生预充电,不会关闭行

🎈自动刷新,执行之前所有的bank必须预充电(关闭)。预充电后必须等待tRP时间才能执行自动刷新命令,每次需要,都需要发送一次此命令。SDRAM每次刷新一行,直到刷新8192行。也可以采用突发的方式。每64ms(或16ms)执行一个刷新命令(2^n次方刷新,n为行地址线的个数)。
{cs_n,ras_n,cas_n,we_n}=4'b0001;对应一个参数值Issue one refresh command every xxus。
CKE为高电平。

🎈自刷新
CKE为低电平。汽车级器件不支持。其它与自动刷新很相似,用于低功耗模式。自刷新至少要保持tRAS时间。退出自刷新:时钟稳定,CKE变高,至少2周期NOP命令,每7.81us或更短时间执行一次自动刷新。

好了,了解这么多,只希望能熟练使用它。

[WhereIn Android] (http://www.wherein.io)

Sort:  

👍🏻!shop

[WhereIn Android] (http://www.wherein.io)

谢谢😀

[WhereIn Android] (http://www.wherein.io)

你好鸭,lucienyong!

@boylikegirl给您叫了一份外卖!

小浣熊豌豆脆

吃饱了吗?跟我猜拳吧! 石头,剪刀,布~

如果您对我的服务满意,请不要吝啬您的点赞~

厉害了👍

[WhereIn Android] (http://www.wherein.io)

😄,多谢

[WhereIn Android] (http://www.wherein.io)

This post has been rewarded by the Steem Community Curation Project #wherein

昨天明明把手机放在桌上,今天又找不到了 ( ˘︹˘ )
咦?你是谁?我又是谁?
加入我们微信群没?还没的话赶快加我们瓜子老板。很帅的 iguozi <(^,^)>

Ha recibido un voto a favor de la comunidad WHEREIN, impulsada por STEEMIT INC. Gracias por usar WHEREIN

Terimakasih Sudah Menggunakan WhereIn, Postingan Anda Terpilih Untuk Mendapatkan Upvote Dari WhereIn Dan Di Dukung Oleh Steemit.inc !

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.028
BTC 54960.01
ETH 2314.51
USDT 1.00
SBD 2.32