[其他ST产品] STM32学习笔记-FSMC外扩SRAM

[复制链接]
3851|45
 楼主| 4c1l 发表于 2023-6-28 02:13 | 显示全部楼层
2.1、通讯引脚
由于控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多,其中地址线FSMC_A和数据线FSMC_D是所有控制器都共用的
 楼主| 4c1l 发表于 2023-6-28 02:13 | 显示全部楼层
62124649b26b7c355f.png
注:其中比较特殊的FSMC_NE是用于控制SRAM芯片的控制信号线,STM32具有FSMC_NE1/2/3/4号引脚,不同的引脚对应STM32内部不同的地址区域。
 楼主| 4c1l 发表于 2023-6-28 02:14 | 显示全部楼层
2.2、存储器控制器
上面不同类型的引脚是连接到FSMC内部对应的存储控制器中的NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器,不同的控制器有专用的寄存器用于配置其工作模式。

相关控制寄存器
控制SRAM的有FSMC_ BCR 、FSMC_ BTR以及FSMC_BWTR寄存器。每种寄存器都有4个,分别对应于4个不同的存储区域,各种寄存器介绍如下:

FSMC_BCR控制寄存器:可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。
FMC_BTR时序寄存器:用于配置SRAM访问时的各种时间延迟,如数据保持时间、地址保持时间等。
FMC_BWTR写时序寄存器:与FMC_BTR寄存器控制的参数类似,它专门用于控制写时序的时间参数。
 楼主| 4c1l 发表于 2023-6-28 02:15 | 显示全部楼层
2.3、时钟控制逻辑
FSMC外设挂载在AHB总线上,时钟信号来自于HCLK(默认168MHz),控制器的同步时钟输出就是由它分频得到。
例如,NOR控制器的FSMC_CLK引脚输出的时钟,它可用于与同步类型的SRAM芯片进行同步通讯,它的时钟频率可通过FSMC_BTR寄存器的CLKDIV位配置,可以配置为HCLK的1/2或1/3,也就是说,若它与同步类型的SRAM通讯时,同步时钟最高频率为84MHz。
后面示例中的SRAM为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。 78649b273c5e6a7.png
 楼主| 4c1l 发表于 2023-6-28 02:15 | 显示全部楼层
2.4、FSMC地址映射
FSMC连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据。
FSMC访问存储器的方式与I2C EEPROM、SPI FLASH的不一样,后两种方式都需要控制I2C或SPI总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。
而使用FSMC外接存储器时,其存储单元是映射到STM32的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。 30048649b274e84586.png
 楼主| 4c1l 发表于 2023-6-28 02:17 | 显示全部楼层
2.4、FSMC地址映射
FSMC连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据。
FSMC访问存储器的方式与I2C EEPROM、SPI FLASH的不一样,后两种方式都需要控制I2C或SPI总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。
而使用FSMC外接存储器时,其存储单元是映射到STM32的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。 80514649b2793f0375.png FSMC的NOR/PSRAM/SRAM/NAND FLASH以及PC卡的地址被映射到了External RAM地址空间内,使得访问FSMC控制的存储器时,就跟访问STM32的片上外设寄存器一样
FSMC把整个External RAM存储区域分成了4个Bank区域,并分配了地址范围及适用的存储器类型,如NOR及SRAM存储器只能使用Bank1的地址。
97809649b27a321282.png
FSMC地址映射
在NOR及SRAM区域,每个Bank的内部又分成了4个小块,每个小块有相应的控制引脚用于连接片选信号,如FSMC_NE[4:1]信号线可用于选择BANK1内部的4小块地址区域,当STM32访问0x68000000-0x6BFFFFFF地址空间时,会访问到Bank1的第3小块区域,相应的FSMC_NE3信号线会输出控制信号。
 楼主| 4c1l 发表于 2023-6-28 02:18 | 显示全部楼层
3、FSMC时序控制
3.1、FSMC读时序
FSMC外设支持输出多种不同的时序以便于控制不同的存储器,它具有ABCD四种模式,下面我们仅针对控制SRAM使用的模式A进行讲解 63099649b280b48a59.png 注:内核发出访问某个指向外部存储器地址时,FSMC外设会根据配置控制信号线产生时序访问存储器
 楼主| 4c1l 发表于 2023-6-28 02:19 | 显示全部楼层
3.2、FSMC写时序 81191649b2828d7b81.png 注:内核发出访问某个指向外部存储器地址时,FSMC外设会根据配置控制信号线产生时序访问存储器
 楼主| 4c1l 发表于 2023-6-28 02:20 | 显示全部楼层
四、FSMC外扩SRAM实例
配置STM32F407的FSMC以支持驱动IS61LV25616 SRAM芯片的读写

52331649b2855d6346.png
 楼主| 4c1l 发表于 2023-6-28 02:20 | 显示全部楼层
1、CubeMx配置
1.1、串口配置

36514649b287f9f98b.png
 楼主| 4c1l 发表于 2023-6-28 02:21 | 显示全部楼层
1.2、FSMC配置 82334649b28a9a9cbc.png
 楼主| 4c1l 发表于 2023-6-28 02:23 | 显示全部楼层
1.3、时钟配置 15777649b2933e17db.png 55277649b293a1dea6.png
 楼主| 4c1l 发表于 2023-6-28 02:24 | 显示全部楼层
1.4、FSMC参数配置 70227649b294685f25.png
 楼主| 4c1l 发表于 2023-6-28 02:27 | 显示全部楼层
读时序配置分析 45653649b29fc745b5.png 62805649b2a01efb76.png tRC = ADDSET + DATAST
tDOE = DATASET
ADDSET对于SRAM未作要求
FSMC的主频为168M,一个周期约等于6ns
 楼主| 4c1l 发表于 2023-6-28 02:27 | 显示全部楼层
2、代码详解
2.1、初始化 7426649b2a170af4a.png
 楼主| 4c1l 发表于 2023-6-28 02:28 | 显示全部楼层
2.2、配置查看 85837649b2a3d880ac.png
 楼主| 4c1l 发表于 2023-6-28 02:28 | 显示全部楼层
2.3、SRAM地址定义 98730649b2a61a448e.png
 楼主| 4c1l 发表于 2023-6-28 02:29 | 显示全部楼层
2.4、指针指向地址 5751649b2a6c40e56.png
 楼主| 4c1l 发表于 2023-6-28 02:29 | 显示全部楼层
2.5、测试空间
测试空间是否可以正常读写 17942649b2a7794a37.png
万图 发表于 2024-1-23 08:20 | 显示全部楼层

测试负载测试是在特定的测试条件下进行的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部