SRAM内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是SRAM芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为存储矩阵。
6.3 地址译码器、列IO和IO数据电路
地址译码器把N根地址线转换成2N根信号线,每根信号线对应一行或一列存储单元,通过地址线找到具体的存储单元,实现寻址。本实例中的使用的SRAM比较小,没有列地址线,它的数据宽度为16位,即一个行地址对应2字节空间,框图中左侧的A0-A18是行址信号,18根地址线一共可以表示218=28x1024=512K行存储单元,所以它一共能访问512Kx16bits大小的空间。访问时,使用UB#或LB#线控制数据宽度。
6.4 控制电路
控制电路主要包含了片选、读写使能以及上面提到的宽度控制信号UB#和LB#。利用CS2或CS1#片选信号,可以把多个SRAM芯片组成一个大容量的内存条。OE#和WE#可以控制读写使能,防止误操作。
七 、SRAM读写流程
对SRAM读数据流程
对SRAM写数据流程
读写时序的流程很类似,过程如下:
(1) 主机使用地址信号线发出要访问的存储器目标地址;
(2) 控制片选信号CS1#及CS2#使能存储器芯片;
(3) 若是要进行读操作,则控制读使能信号OE#表示要读数据,若进行写操作则控制写使能信号WE#表示要写数据;
(4) 使用掩码信号LB#与UB#指示要访问目标地址的高、低字节部分;
(5) 若是读取过程,存储器会通过数据线向主机输出目标数据,若是写入过程,主要使用数据线向存储器传输目标数据。
八、FSMC案例-扩展SRAM
//1个HCLK时钟周期1/72M=0.138*10^-8s=13.8ns
//写时序时间要求
//1.(ADDSET+1)+(DATAST+1)>55ns 13.8+41.4=55.2ns>55ns
//2.(DATAST+1)>40ns 2+1=41.4ns
//3.(ADDSET+1)>0ns 0+1=13.8ns//读时序时间要求
//1.(ADDSET+1)+(DATAST+1)+2HCLK>55ns
//2.(DATAST+1)>25ns 1+1=27.6ns
//3.(ADDSET+1)>0ns 0+1=13.8ns
SRAM.H
#ifndef __SRAM_H
#define __SRAM_H
#define SRAM_BASE_ADDR (0X68000000)
#define SRAM_SIZE (1*102481024)
#define SRAM_End_ADDR (SRAM_BASE_ADDR+SRAM_SIZE)
//A0-F0
#define FSMC_A0_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A0 GPIO_Pin_0
#define FSMC_A0 GPIOF
//A1-F1
#define FSMC_A1_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A1 GPIO_Pin_1
#define FSMC_A1 GPIOF
//A2-F2
#define FSMC_A2_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A2 GPIO_Pin_2
#define FSMC_A2 GPIOF
//A3-F3
#define FSMC_A3_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A3 GPIO_Pin_3
#define FSMC_A3 GPIOF
//A4-F4
#define FSMC_A4_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A4 GPIO_Pin_4
#define FSMC_A4 GPIOF
//A5-F5
#define FSMC_A5_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A5 GPIO_Pin_5
#define FSMC_A5 GPIOF
//A6-F12
#define FSMC_A6_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A6 GPIO_Pin_12
#define FSMC_A6 GPIOF
//A7-F13
#define FSMC_A7_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A7 GPIO_Pin_13
#define FSMC_A7 GPIOF
//A8-F14
#define FSMC_A8_CLK RCC_APB2Periph_GPIOF
#define FSMC_GPIO_A8 GPIO_