嵌入式ARM芯片存储控制器FMC 功能分析

578 阅读3分钟

1 FMC STM32芯片特性

1.1 STM32F4xx 系列

  • STM32 控制器芯片内部有一定大小的 SRAM 及 FLASH 作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在 STM32 芯片的外部扩展存储器了。扩展内存时一般使用 SRAM 和 SDRAM 存储器,但 STM32F407 系列的芯片不支持扩展SDRAM(STM32F429 系列支持),它仅支持使用 FSMC 外设扩展 SRAM。 image.png

image.png

  • 下图是 Cortex-M4 内核的存储空间分配,右侧是 STM32 FSMC 外设的地址映射。可以看到FSMC 的 NOR/PSRAM/SRAM/NAND FLASH 以及 PC 卡的地址都在 External RAM 地址空间内。正是因为存在这样的地址映射,使得访问 FSMC 控制的存储器时,就跟访问 STM32 的片上外设寄存器一样 (片上外设的地址映射即图中左侧的“Peripheral”区域)。 image.png
  • FSMC 把整个 External RAM 存储区域分成了 4 个 Bank 区域,并分配了地址范围及适用的存储器类型,如 NOR 及 SRAM 存储器只能使用 Bank1 的地址。在每个 Bank 的内部又分成了 4 个小块,每个小块有相应的控制引脚用于连接片选信号,如 FSMC_NE[4:1] 信号线可用于选择 BANK1 内部的 4 小块地址区域,当 STM32 访问 0x68000000-0x6BFFFFFF 地址空间时,会访问到Bank1 的第 3 小块区域,相应的 FSMC_NE3 信号线会输出控制信号image.png

1.2 STM32H743xx 系列

  • STM32H743xx 系列芯片都带有 FMC 接口,即可变存储存储控制器,能够与同步或异步存储器、SDRAM 存储器和 NAND FLASH 等连接,STM32H743 的 FMC 接口支持包括 SRAM、SDRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器 image.png image.png
  • STM32H743 的 FMC 支持 8/16/32 位数据宽度,我们这里用到的 LCD 是 16 位宽度的,所以在设置的时候,选择 16 位宽就 OK 了
  • FMC 总共管理 1.5GB 空间,拥有 6 个存储块(Bank),STM32H743 的 FMC 存储块 (Bank1)被分为 4 个区,每个区管理 64M 字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。 image.png image.png image.png

2 FMC SRAM 原理

  • IS62WV51216 的 SRAM 芯片内部结构框图如下: image.png image.png image.png
  • IS62WV51216BLL-55ns 型号 SRAM 的时间参数 image.png image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2.1 计算读时序

image.png

image.png

2.2 计算写时序

image.png

image.png

2.3 外设开发

image.png image.png image.png image.png image.png image.png

3 FMC SDRAM 扩展

3.1 SDRAM 的信号线

image.png image.png

  • SDRAM 的驱动需要用到一些命令 image.png image.png image.png

3.2 H7 数据手册

image.png image.png image.png

3.3 FMC时序开发

image.png image.png image.png image.png image.png image.png image.png image.png

3.4 计算读时序

image.png

3.5 计算写时序

image.png

3.6 SDRAM读写时序参数设置

  • tRCD image.png image.png image.png image.png
  • 其他时序参数设置 image.png image.png image.png image.png

3.7 SDRAM初始化参数设置

image.png image.png image.png image.png image.png image.png image.png image.png

3.8 HAL库时序开发

image.png image.png

3.8 库函数时序开发

  • 参数配置方法
  • 1.初始化FMC及SDRAM
  • 2.使用指针直接访问 SDRAM映射的地址
  • 3.使用编译器强制指定变量定义的地址(必须定义为全局变量)
  • 4.使用sct文件实现自动分配变量的地址到SDRAM image.png image.png image.png image.png image.png image.png image.png image.png image.png

3.8 SDRAM使用

image.png image.png image.png

4 FMC 8080 LCD扩展