STM32CubeIDE SRAM

随言:

单刀直入!看不懂就看后面的理论部分。

 

参考文档:

《AN2784 Application note Using the high-density STM32F10xxx FSMC peripheral to drive external memories.pdf》

下载链接:https://www.stmcu.org.cn/document/detail/index/id-200186

 

官方程序:

..\STM32Cube\Repository\STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Examples\FSMC\FSMC_SRAM
 

本文源码:https://download.csdn.net/download/sudaroot/12567052

 

硬件:

STM32F407ZG + IS62WV51216BLL-55TLI(时序55ns)

SRAM挂在了bank1的第三个地址映射区,即SRAM的地址从0X68000000开始。

STM32CubeIDE SRAM_第1张图片

 

时序计算:

官方例程中芯片是STM32F1,SRAM配置计算如下:

STM32CubeIDE SRAM_第2张图片

STM32CubeIDE SRAM_第3张图片

 

由于我使用的是STM32F407ZG,则稍稍有些区别,计算过程:

HCLK = 168MHz

tHCLK = 1s / 168 MHZ = 6ns

t su(Data_NE)  +  t v(A_NE) = 2 * tHCLK + 25 = 37ns

 

因此,以下等式:

(ADDSET + (DATAST + 1)) × t HCLK  >= max (t WC )   
DATAST × t HCLK >= t PWE1     

注意:如果使用不同读写时序,读写的都满足上面的公式,唯一不同的是在写时序

里面DATAST × t HCLK >= 的是写信号拉低时间,对应的读时序是>= 读信号拉低时间 。

使用同一时序,写时序比读时序长,故以时间长的为标准。

 

对于取访问,DATASET必须验证:

DATAST  >=  (t AA + t su(Data_NE) + t v(A_NE) )/t HCLK – ADDSET – 4

STM32CubeIDE SRAM_第4张图片

结果得:

ADDSET = 5;

DATAST  = 7;

 

STM32CubeIDE配置:

STM32CubeIDE SRAM_第5张图片

STM32CubeIDE SRAM_第6张图片

 

Write operation:是否允许写入操作。FSMC 在存储区域内禁止了写入操作,如果进行写操作将报告 AHB 错误。

Address setup time in HCLK clock cycles:   即ADDSET, 等于5。

Data setup time in HCLK clock cycles:   即DATAST, 等于7。

Bus turn around time in HCLK clock cycles: :总线周转阶段的持续时间,即由 NEx 高电平变为 NEx 低电平最短时间,填1即可。

 

最后生成代码。

 

代码测试:

往外部SRAM前1024个字节写入0~1023,再读出数据并打印,看数据是否正确。

#define	EX_SRAM_BASE       0X68000000

int main(void)
{
	uint16_t i = 0;
	uint16_t* temp = NULL;

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_FSMC_Init();
  printf("Sudaroot\r\n");
  
  // 向外部SRAM前1024写入数据0 ~ 1023
  temp = (uint16_t*)EX_SRAM_BASE;
  for(i = 0; i < 1024; i++)
  {
	  temp[i] = i;
  }

  // 把SRAM前1023数据读出并打印
  temp = (uint16_t*)EX_SRAM_BASE;
  for(i = 0; i < 1024; i++)
  {
	  printf("temp[%d] = %d\r\n", i, temp[i]);
  }

  while (1)
  {

  }
}

 

测试:

STM32CubeIDE SRAM_第7张图片

 

 

 

 

 

 

 

 

 

 

下面是理论

 

 

SRAM简介:

       静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失(被称为volatile memory),这与在断电后还能储存资料的ROM或闪存是不同的。 最重要的是SRAM成本比SDRAM高。

 

 

 

 

STM32F4  FSMC 之 SRAM控制器简介:

以下内容出自《STM32F4xx中文参考手册.PDF》

STM32CubeIDE SRAM_第8张图片

上图是:FSMC的SRAM引脚功能定义。

 

STM32CubeIDE SRAM_第9张图片

SRAM:分成4个块,每个块大小最大64MB,共256MB。

STM32CubeIDE SRAM_第10张图片

地址映射关系:由硬件决定NEx引脚决定了使用哪个块地址映射。

 

STM32CubeIDE SRAM_第11张图片

STM32如果SRAM是数据宽度是16位,那么STM32的地址将会右移一位对齐。

 

STM32CubeIDE SRAM_第12张图片

什么是扩展模式:

扩展模式即读时序和写时序不使用一个时序。原因就是有些芯片的读时序与写时序差异较大。

例如读时序比写时序快一倍,用同一个时序的话,那么读时序的速度就要降低到和写时序一样

慢。若使用扩展模式,读时序和写时序分开设置,这样能最大保证运行的效率。

 

不使用扩展模式的情况下,SRAM使用的时序是模式1.

使用扩展模块的情况下,SRAM可选择模式A D.

STM32CubeIDE SRAM_第13张图片

STM32CubeIDE SRAM_第14张图片

在SRAM写入数据的时候,数据建立时间DATAS要加1。包括模式1 模式A 模式D.

 

 

IS62WV51216BLL:

使用的是55ns时序的芯片,容量为512K * 16bit 即 1MB的SRAM.

STM32CubeIDE SRAM_第15张图片

引脚功能:

STM32CubeIDE SRAM_第16张图片

A0-A18 :地址输入信号线。
I/O0-I/O15 :数据输出\输入信号线。
CS1, CS2 :芯片片选。CS1低电平使能,CS2高电平使能,。
OE :读数据信号使能,低电平有效。
WE :写数据信号使能,低电平有效。
LB: 低字节控制信号。l (I/O0-I/O7)
UB: 高字节控制信号。 (I/O8-I/O15)

 

分析SRAM读时序:

STM32CubeIDE SRAM_第17张图片

STM32CubeIDE SRAM_第18张图片

 

说一下比较重要的一些时序(看上图)

tRC(读周期时间):这是1个读周期地址线信号稳定(有效)后的保持时间,即1次读操作时间。

tAA(地址建立时间):MCU外部控制地址设置完成后,芯片内部获取(建立)地址的时间。

tDOE(数据建立时间):当读信号使能时,芯片输出稳定数据需要的时间。

tOHA:地址失效后数据还需稳定保持时间,主要用于保证数据正确性。

tACE1\tACE2:片选使能后到芯片输出稳定数据需要的时间。

tHZCS1\tHZCS2:片选失能后数据保持稳定时间。

 

 

分析SRAM写时序:

STM32CubeIDE SRAM_第19张图片

由于写时序有4种对应不用的控制时序:

1、WRITE CYCLE NO. 1 (1,2) (CS1 Controlled, OE = HIGH or LOW)

2、WRITE CYCLE NO. 2  (WE Controlled: OE is HIGH During Write Cycle)

3、WRITE CYCLE NO. 3  (WE Controlled: OE is LOW During Write Cycle)

4、WRITE CYCLE NO. 4  (UB/LB Controlled)

 

看FSMC SRAM的写时序 WE (写使能)拉低,OE(读使能)拉高,故选择第2种芯片时序。

STM32CubeIDE SRAM_第20张图片

tWC:(写周期时间)这是1个写周期地址线信号稳定(有效)后的保持时间,即1次写操作时间。

tAW:地址有效到数据有效时间。

tSA(地址建立时间):地址有效后WE写信号才能有效时间,芯片内部获取(建立)地址。

tPWE(数据建立时间):有效数据写入时间,即等待数据稳定时间。

tHA:写信号或者片选信号失效后,地址的保持时间。

tHD:写信号或者片选信号失效后,数据的保持时间。

 

 

全篇完。

 

本人是一个嵌入式未入门小白,博客仅仅代表我个人主观见解方便记录成长笔记。 若有与大神大大见解有冲突,我坚信大神大大见解是对的,我的是错的。 若无法下载源码,可私聊私发。 感谢~!

 

 

你可能感兴趣的:(STM32)