目前STM32F407开发板上使用的SRAM型号是IS62WV51216。
它的内部框图如下:



SRAM 的控制比较简单,只要控制信号线使能了访问,从地址线输入要访问的地址,即可从 I/O数据线写入或读出数据。
存储器矩阵图:

上图可以看成一张表格,每个单元格就是存储单元,数据就填在上面,和表格查找一样,指定行地址和列地址,就能定位到目标数据,这就是SRAM寻址的原理。
地址译码器的工作原理是,把N根地址线转换成2的N次方跟信号线,每根信号线对应一行或一列存储单元,这样就能通过地址线寻址。如果存储阵列较大,地址线会分为行和列地址线,或者行列分时复用同一根地址线,访问数据时先访问行地址线再访问列地址线也能实现寻址。我们用的SRAM较小,没有列地址线,它的数据宽度是16位,即一个行地址对应2字节空间。由上图可知,SRAM由19根行址信号 ,2的19次方=5242688/1024=512K ,所以它一共能访问512K*16bits大小的空间。
访问时,使用 UB# 或 LB# 线控制数据宽度,例如,当要访问宽度为 16 位的数据时,使用行地址线指出地址,然后把 UB# 和 LB# 线都设置为低电平,那么 I/O0-I/O15 线都有效,它们一起输出该地址的 16 位数据 (或者接收 16 位数据到该地址);当要访问宽度为 8 位的数据时,使用行地址线指出地址,然后把 UB# 或 LB# 其中一个设置为低电平, I/O 会对应输出该地址的高 8 位和低 8 位数据,因此它们被称为数据掩码信号。
利用 CS2 或CS1# 片选信号,可以把多个 SRAM 芯片组成一个大容量的内存条。 OE# 和 WE# 可以控制读写使能,防止误操作。
SRAM的读写流程


读写流程比较类似,统一说,1.主机使用地址信号线发出要访问的存储器目标地址;2.控制片选信号 CS1# 及 CS2# 使能存储器芯片;3.若是要进行读操作,则控制读使能信号 OE# 表示要读数据,若进行写操作则控制写使能信号WE# 表示要写数据;4.使用掩码信号 LB# 与 UB# 指示要访问目标地址的高、低字节部分;5.若是读取过程,存储器会通过数据线向主机输出目标数据,若是写入过程,主要使用数据线向存储器传输目标数据。
在读写时序中,有几个比较重要的时间参数,在使用 STM32 控制的时候需要参考:
