SDRAM,英文名是:Synchronous Dynamic Random Access Memory,即同步动态随机存储器,相较于 SRAM(静态存储器),SDRAM 具有:容量大和价格便宜的特点。 STM32H743 支持 SDRAM,因此,我们可以外挂 SDRAM,从而大大降低外扩内存的成本。
当前开发板使用的 SDRAM 型号是 W9825G6KH,其内部结构框图如下图所示:
接下来,我们结合上面的图,对 SDRAM 的几个重要知识点进行介绍。
信号线 | 说明 |
---|---|
CLK | 时钟信号,在该时钟的上升沿采集输入信号 |
CKE | 时钟使能,禁止时钟时,SDRAM 会进入自刷新模式 |
CS# | 片选信号,低电平有效 |
RAS# | 行地址选通信号,低电平时,表示行地址 |
CAS# | 列地址选通信号,低电平时,表示列地址 |
WE# | 写使能信号,低电平有效 |
A0~A12 | 地址线(行/列) |
BA0,BA1 | BANK 地址线 |
DQ0~15 | 数据线 |
DQML,DQMH | 数据掩码,表示 DQ 的有效部分 |
SDRAM 的存储单元(称之为:BANK)是以阵列的形式排列的,如下图所示:
对于这个存储阵列,我们可以将其看成是一个表格,只需要给定行地址和列地址,就可以确定其唯一位置,这就是 SDRAM 寻址的基本原理。而一个 SDRAM 芯片内部,一般又有 4 个这样的存储单元(BANK),所以,在 SDRAM 内部寻址的时候,先指定 BANK 号和行地址,然后再指定列地址,就可以查找到目标地址。
SDRAM 的存储结构示意图,如下所示:
寻址的时候,首先 RAS 信号为低电平,选通行地址,地址线 A0~A12 所表示的地址,会被传输并锁存到行地址译码器里面,最为行地址,同时 BANK 地址线上面的 BS0,BS1 所表示的 BANK 地址,也会被锁存,选中对应的 BANK,然后, CAS 信号为低电平,选通列地址,地址线A0~A12 所表示的地址,会被传输并锁存到列地址译码器里面,作为列地址,这样,就完成了一次寻址。
W9825G6KH 的存储结构为:行地址:8192 个;列地址:512 个; BANK 数: 4 个;位 宽:16 位;这样,整个芯片的容量为: 8192*512*4*16=32M 字节。
命令 | CS | RAS | CAS | WE | DQM | ADDR | DQ |
---|---|---|---|---|---|---|---|
NO-Operation | L | H | H | H | x | x | x |
Active | L | L | H | H | x | Bank/Row | x |
Read | L | H | L | H | L/H | Bank/Col | DATA |
Write | L | H | L | L | L/H | Bank/Col | DATA |
Precharge | L | L | H | L | x | A10=H/L | x |
Refresh | L | L | L | H | x | x | x |
Mode Register Set | L | L | L | L | x | MODE | x |
Burst Stop | L | H | H | L | x | x | DATA |
Active,即激活命令,该命令必须在读写操作之前被发送,用于设置所需要的 Bank 和行地址(同时设置这 2 个地址),Bank 地址由 BS0,BS1(也写作 BA0,BA1,下同)指定,行地址由 A0~A12 指定,时序图如下所示:
Read/Write,即读/写命令,在发送完激活命令后,再发送列地址就可以完成对 SDRAM 的寻址,并进行读写操作了,读/写命令和列地址的发送,是通过一次传输完成的,如下图所示:
列地址由 A0~A9 指定,WE 信号控制读/写命令,高电平表示读命令,低电平表示写命令,各条信号线的状态,在 CLK 的上升沿被锁存到芯片内部。
Percharge,即预充电指令,用于关闭 Bank 中所打开的行地址。由于 SDRAM 的寻址具有独占性,所以在进行完读写操作后,如果要对同一 Bank 的另一行进行寻址,就要将原来有效(打开)的行关闭,重新发送行/列地址。Bank 关闭现有行,准备打开新行的操作就叫做预充电(Percharge)。预充电命令时序,如下图所示:
预充电命令可以通过独立的命令发送,也可以在每次发送读/写命令的时候,使用地址线 A10,来设置自动预充电。在发送读/写命令的时候,当 A10=1,则使能所有 Bank 的预充电,在读/写操作完成后,自动进行预充电。这样,下次读/写操作之前,就不需要再发预充电命令了,从而提高读/写速度。
Mode Register Set,即设置模式寄存器。 SDRAM 芯片内部有一个逻辑控制单元,控制单元的相关参数由模式寄存器提供,我们通过设置模式寄存器命令,来完成对模式寄存器的设置,这个命令在每次对 SDRAM 进行初始化的时候,都需要用到。
发送该命令时,通过地址线来传输模式寄存器的值,W9825G6KH 的模式寄存器描述如下图所示:
由图可知,模式寄存器的配置分为几个部分:
SDRAM 上电后,必须进行初始化,才可以正常使用。SDRAM 初始化时序图如下图所示:
初始化过程分为五步:
① 上电,此步,给 SDRAM 供电,使能 CLK 时钟,并发送 NOP(No Operation 命令),注意,上后,要等待最少 200us,再发送其他指令。
② 发送预充电命令,给所有 Bank 预充电。
③ 发送自动刷新命令,这一步,至少要发送 8 次自刷新命令,每一个自刷新命令之间的间隔时间为 tRC。
④ 设置模式寄存器,这一步,发送模式寄存器的值,配置 SDRAM 的工作参数。配置完成后,需要等待 tMRD(也叫 tRSC),使模式寄存器的配置生效,才能发送其他命令。
⑤ 完成,经过前面四步的操作,SDRAM 的初始化就完成了,接下来就可以发送激活命令和读/写命令,进行数据的读/写了。
这里提到的 tRC、tMRD 和 tRSC 见 SDRAM 的芯片数据手册。
在完成对 SDRAM 的初始化后,我们就可以对 SDRAM 进行读写操作了,写操作时序图如下所示:
SDRAM 的写流程如下:
① 发送激活命令,此命令同时设置行地址和 BANK 地址,发送该命令后,需要等待 tRCD 时间,才可以发送写命令。
② 发送写命令,在发送完激活命令,并等待 tRCD 后,发送写命令,该命令同时设置列地址,完成对 SDRAM 的寻址。同时,将数据通过 DQ 数据线,存入 SDRAM。
③ 使能自动预充电,在发送写命令的同时,拉高 A10 地址线,使能自动预充电,以提高读写效率。
④ 执行预充电,预充电在发送激活命令的 tRAS 时间后启动,并且需要等待 tRP 时间,来完成。
⑤ 完成一次数据写入,最后,发送第二个激活命令,启动下一次数据传输。这样,就完成了一次数据的写入。
前面介绍了 SDRAM 的写操作,接下来我们看读操作时序,如下图所示:
SDRAM 的读流程如下:
① 发送激活命令,此命令同时设置行地址和 BANK 地址,发送该命令后,需要等待 tRCD 时间,才可以发送读命令。
② 发送写命令,在发送完激活命令,并等待 tRCD 后,发送读命令,该命令同时设置列地址,完成对 SDRAM 的寻址。读操作还有一个 CL 延迟( CAS Latency),所以需要等待给定的 CL 延迟(2 个或 3 个 CLK)后,再从 DQ 数据线上读取数据。
③ 使能自动预充电,在发送读命令的同时,拉高 A10 地址线,使能自动预充电,以提高读写效率。
④ 执行预充电,预充电在发送激活命令的 tRAS 时间后启动,并且需要等待 tRP 时间来完成。
⑤ 完成一次数据写入,最后,发送第二个激活命令,启动下一次数据传输。这样就完成了一次数据的读取。
SDRAM 的简介,就给大家介绍到这里,以上,tRCD、tRAS 和 tRP 等时间参数,见 SDRAM 的数据手册,且在后续配置 FMC 的时候需要用到。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。