23.1 SDRAM 控制原理
RT1052 系列芯片扩展内存时可以选择 SRAM 和 SDRAM
- 由于 SDRAM 的“容量/价格”比较高,即使用 SDRAM 要比 SRAM 要划算得多。
给 RT1052 芯片扩展内存与给 PC 扩展内存的原理是一样的
- PC 上一般以内存条的形式扩展,内存条实质是由多个内存颗粒 (即 SDRAM 芯片) 组成的通用标准模块
- RT1052 直接与SDRAM 芯片连接

除了时钟、地址和数据线,控制 SDRAM 还需要很多信号配合,它们具体作用在描述时序图时进行讲解。

23.2 SEMC 简介
RT10529使用SEMC外设来管理扩展的存储器,SEMC 是SmartExternalMemoryController的缩写,译为智能的外部存储控制器
- 可以用于驱动包括 SRAM、SDRAM、NorFlash、NAND Flash 等类型的存储器
SEMC 支持使用 8、16 位的方式访问 SDRAM
- 最多支持控制 4 个 SDRAM 存储器
- 每个 SDRAM存储器最大容量为 512Mb(64MByte)
- 支持使用 ARM 内核的 AXI 接口控制 SDRAM。

23.2.1 控制原理

23.2.1.1 控制逻辑
标号②处的SDRAM内部的“控制逻辑”,它指挥着整个系统的运行
- 外部可通过CS、WE、CAS、RAS 以及地址线来向控制逻辑输入命令
- 命令经过“命令器译码器”(Command Decoder)译码,并将控制参数保存到“模式寄存器中”(Mode Register),控制逻辑依此运行
23.2.1.2 地址控制
标号 ③ 处的结构与 SDRAM 的“A”以及“BS”两类地址线相连
- A 类地址线是行 (Row)与列 (Column) 共用的地址总线
- BS 地址线是独立的用于指定 SDRAM 内部存储阵列号 (Bank)。
在命令模式下,A 类地址线还用于某些命令输入参数。
23.2.1.3 SDRAM 的存储阵列
标号 ④ 处的结构是 SDRAM 的存储单元阵列。
- 本 SDRAM 包含 4 个阵列,外部设备使用“A”和“BS”(也称为 BA 线)地址线对这些阵列进行访问

SDRAM 内部包含的存储阵列,可以理解成一张表格,数据就填在这张表格上。
- 指定一个行地址和列地址,就可以精确地找到目标单元格,这是 SDRAM 芯片寻址的基本原理。
- 每个单元格被称为存储单元
- 这样的表就是存储阵列(Bank)
SDRAM芯片基本上内部都包含有 4 个这样的 Bank
- 寻址时指定 Bank 号以及行地址,然后再指定列地址即可寻找到目标存储单元。

SDRAM 芯片向外部提供有独立的 BS(BA 线)类地址线用于 Bank 寻址,而行与列则共用 A 类地址线。
23.1.4 与 SDRAM 通讯
- 首先把 RAS 线设置低电平,此时 SDRAM 内部的“行地址选通器”被选通
- 地址线 A[12:0] 表示的地址会被输入到“行地址译码及锁存器”中,作为存储阵列中选定的行地址
- 同时地址线 BS[1:0] 表示的 Bank 也被锁存,选中了要操作的 Bank 号;
- 接着控制 CAS 线为低电平,此时内部的“列地址选通器”被选通,地址线 A[12:0] 表示的地址会被锁存到“列地址译码器”中作为列地址,完成寻址过程。
23.1.5 数据输入输出
若是写 SDRAM 内容,寻址完成后,DQ[15:0] 线表示的数据经过下图标号中表示的数据缓冲区内,然后再传输到存储器阵列中,数据被保存;数据输出过程相反。

本型号的 SDRAM
存储阵列的“数据宽度”是 16 位 (即数据线的数量)
- 在与 SDRAM 进行数据通讯时,16 位的数据是同步传输的
- 实际应用中我们可能会以 8 位、16 位的宽度存取数据
- 在传输低宽度数据的时候,我们不希望其它数据线表示的高位数据被录入。
- 如传输 8 位数据的时候,我们只需要 DQ[7:0] 表示的数据,而 DQ[15:8] 数据线表示的数据必须忽略,否则会修改非目标存储空间的内容。
- 所以数据输入输出时,还会使用数据掩码信号线 LDQM 和 UDQM 来配合,它们分别对应低 8 位和高 8 位数据,引脚为高电平时对应的数据会被屏蔽。
- 例如,当“LDQM”为低电平而“UDQM”为高电平时,数据线 DQ[7:0] 表示的数据有效,而 DQ[15:8] 表示的数据无效

23.3 SDRAM 的命令
SDRAM 命令表

表中的 H 表示高电平,L 表示低电平,X 表示任意电平,High-Z 表示高阻态
23.3.1 命令禁止
只要 CS 引脚为高电平,即表示“命令禁止”(COMMAND INHBIT),它用于禁止 SDRAM 执行新的命令,但它不能停止当前正在执行的命令。
23.3.2 空操作
“空操作”(NO OPERATION),“命令禁止”的反操作,用于选中 SDRAM,以便接下来发送命令。
23.3.3 行有效
进行存储单元寻址时,需要先选中要访问的 Bank 和行,使它处于激活状态。该操作通过“行有效”(ACTIVE) 命令实现
- 发送行有效命令时,RAS 线为低电平,同时通过 BS 线(图中使用 BA 线表示)以及 A 线发送 Bank 地址和行地址。

23.3.4 列读写
行地址通过“行有效”命令确定后,就要对列地址进行寻址了。
- “读命令”(READ) 和“写命令”(WRITE) 的时序很相似

通过共用的地址线 A 发送列地址
- 同时使用 WE 引脚表示读/写方向,WE 为低电平时表示写,高电平表示读。
- 数据读写时,使用 DQM 线表示有效的 DQ数据线。
本型号的 SDRAM 芯片表示列地址时仅使用 A[8:0] 线,而 A10 线用于控制是否“自动预充电”,该线为高电平时使能,低电平时关闭。
23.3.5 预充电
SDRAM 的寻址具有独占性,所以在进行完读写操作后,如果要对同一个 Bank 的另一行进行寻址,就要将原来有效(ACTIVE)的行关闭,重新发送行/列地址。
-
Bank 关闭当前工作行,准备打开新行的操作就是预充电(Precharge)。
- 预充电可以通过独立的命令控制,也可以在每次发送读写命令的同时使用“A10”线控制自动进行预充电。
- 预充电是一种对工作行中所有存储阵列进行数据重写,并对行地址进行复位,以准备新行的工作。

-
独立的预充电命令时序见上图。
- 该命令配合使用 A10 线控制,若 A10 为高电平时,所有 Bank都预充电;
- A10 为低电平时,使用 BS 线(图中使用 BA 线表示)选择要预充电的 Bank。
23.3.6 刷新
SDRAM 要不断进行刷新 (Refresh) 才能保留住数据,因此它是 DRAM 最重要的操作。
- 刷新操作与预充电中重写的操作本质是一样的。
- 刷新则是有固定的周期,依次对所有行进行操作,以保证那些久久没被访问的存储单元数据正确。
刷新操作分为两种:“自动刷新”(Auto Refresh)与“自我刷新”(Self Refresh)
- 发送命令后 CKE时钟为有效时 (低电平),使用自动刷新操作,否则使用自我刷新操作。
- 不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。
“自动刷新”
SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动地依次生成行地址
- 每收到一次命令刷新一行。
- 在刷新过程中,所有 Bank 都停止工作,而每次刷新所占用的时间为 N 个时钟周期 (视 SDRAM 型号而定,通常为 N=9),刷新结束之后才可进入正常的工作状态
- 在这 N 个时钟期间内,所有工作指令只能等待而无法执行。
- 一次次地按行刷新,刷新完所有行后,将再次对第一行重新进行刷新操作
- 这个对同一行刷新操作的时间间隔,称为 SDRAM 的刷新周期,通常为 64ms。
- 刷新会对 SDRAM 的性能造成影响,但这是它的DRAM 的特性决定的,也是 DRAM 相对于 SRAM 取得成本优势的同时所付出的代价。
“自我刷新”
主要用于休眠模式低功耗状态下的数据保存,也就是说即使外部控制器不工作了,SDRAM 都能自己确保数据正常。
- 在发出“自我刷新”命令后,将 CKE 置于无效状态 (低电平),就进入自我刷新模式,此时不再依靠外部时钟工作,而是根据 SDRAM 内部的时钟进行刷新操作。
- 在自我刷新期间除了 CKE 之外的所有外部信号都是无效的,只有重新使 CKE 有效才能退出自我刷新模式并进入正常操作状态。
23.3.7 加载模式寄存器
模式寄存器是来管理整个系统的
- 这个寄存器的参数就是通过“加载模式寄存器”命令 (LOAD MODE REGISTER) 来配置的
- 发送该命令时,使用地址线表示要存入模式寄存器的参数“OP-Code”,各个地址线表示的参数

模式寄存器的各个参数介绍如下:
23.3.7.1 Burst Length
Burst Length 译为突发长度,下面简称 BL。
- 突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度。
23.3.7.2 Addressing Mode
模式寄存器中的 Addressing Mode 位用于设置突发模式,突发模式分为顺序 (Sequential) 与间隔(Interleaved) 两种。
- 在顺序方式中,操作按地址的顺序连续执行,如果是间隔模式,则操作地址是跳跃的。
- 跳跃访问的方式比较乱,不太符合思维习惯,我们一般用顺序模式。
23.3.7.3 CAS Latency
模式寄存器中的 CASLatency 是指列地址选通延迟,简称 CL。在发出读命令 (命令同时包含列地址) 后,需要等待几个时钟周期数据线 DQ 才会输出有效数据,这之间的时钟周期就是指 CL
- CL一般可以设置为 2 或 3 个时钟周期

CL 只是针对读命令时的数据延时,在写命令是不需要这个延时的
23.3.7.4 Test Mode
Test Mode 用于配置 SDRAM 的工作模式。
- 当它被配置为“00”的时候表示工作在正常模式
- 其它值是测试模式或被保留的设定。
- 实际使用时必须配置成正常模式。
23.3.7.5 Write Mode
Write Mode 用于配置写操作的突发特性
- 可选择使用 BL 设置的突发长度(Burst write)或非突发模式(single write)。
23.3.7.6 Reserved
模式寄存器的最后几位的被保留,没有设置参数。
23.4 SDRAM 的初始化流程
SDRAM 并不是上电后立即就可以开始读写数据的,它需要按步骤进行初始化,对存储矩阵进行预充电、刷新并设置模式寄存器

流程说明:
(1) 给 SDRAM 上电,并提供稳定的时钟,至少 100us;
(2) 发送“空操作”(NOP) 命令;
(3) 发送“预充电”(PRECHARGE) 命令,控制所有 Bank 进行预充电,并等待 t RP 时间,t RP 表示预充电与其它命令之间的延迟;
(4) 发送至少 2 个“自动刷新”(AUTO REFRESH) 命令,每个命令后需等待 t RFC 时间,t RFC 表示自动刷新时间;
(5) 发送“加载模式寄存器”(LOAD MODE REGISTER) 命令,配置 SDRAM 的工作参数,并等
待 t MRD 时间,t MRD 表示加载模式寄存器命令与行有行或刷新命令之间的延迟;
(6) 初始化流程完毕,可以开始读写数据。
其中t RP 、t RFC 、t MRD 等时间参数跟具体的SDRAM有关
23.5 SDRAM 的读写流程
读写数据,其时序流程见图

CL=2 时,带 AUTO PRECHARGE 的读时序

带 AUTO PRECHARGE 命令的写时序
读时序和写时序的命令过程很类似,下面我们统一解说:
(1) 发送“行有效”(ACTIVE) 命令,发送命令的同时包含行地址和 Bank 地址,然后等待 t RCD时间,t RCD 表示行有效命令与读/写命令之间的延迟;
(2) 发送“读/写”(READ/WRITE) 命令,在发送命令的同时发送列地址,完成寻址的地址输入。
对于读命令,根据模式寄存器的 CL 定义,延迟 CL 个时钟周期后,SDRAM 的数据线 DQ才输出有效数据,而写命令是没有 CL 延迟的,主机在发送写命令的同时就可以把要写入的数据用 DQ 输入到 SDRAM 中,这是读命令与写命令的时序最主要的区别。图中的读/写命令都通过地址线 A10 控制自动预充电,而 SDRAM 接收到带预充电要求的读/写命令后,并不会立即预充电,而是等待 t WR 时间才开始,t WR 表示写命令与预充电之间的延迟;
(3) 执行“预充电”(auto precharge) 命令后,需要等待 t RP 时间,t RP 表示预充电与其它命令之间的延迟;
(4) 图中的标号处的 t RAS ,表示自刷新周期,即在前一个“行有效”与“预充电”命令之间的时间;
(5) 发送第二次“行有效”(ACTIVE) 命令准备读写下一个数据,在图中的标号处的 t RC ,表示两个行有效命令或两个刷新命令之间的延迟。其中 t RCD 、t WR 、t RP 、t RAS 以及 t RC 等时间参数跟具体的 SDRAM 有关,可查阅其数据手册获知,RT1052 的 SEMC 访问时配置需要这些参数。
本文详细阐述了RT1052芯片如何通过SEMC管理SDRAM,包括SDRAM的控制逻辑、地址寻址、命令集如行有效、列读写、预充电和刷新,以及SDRAM的初始化和读写流程,涉及关键参数如CL、BL、tRP等。
756

被折叠的 条评论
为什么被折叠?



