FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

目录

1 简介

1.1 框图

1.2 接口定义

1.3 读写时序图、时序配置参数

1.4 PSRAM控制器异步工作模式分类

1.5  PSRAM寄存器配置

1.5.1 控制寄存器BCR

1.5.2  片选时序寄存器BTR

1.5.3  写入时序寄存器BWTR

2 FPGA接口设计

2.1 实际配置的时序

2.2 接口信号处理

3 参考文献


1 简介

        使用STM32F4xx系列的 FMC 总线实现与 FPGA 的通信,FMC Flexible Memory Controller 的缩写,译为可变存储控制器。它可以用于驱动包括 SRAMSDRAMNOR、FLASH 以及 NAND FLSAH 类型的存储器。

        FMC 包含五个主要模块: AHB 接口(包括 FMC 配 置 寄 存 器 )、 NOR Flash/PSRAM/SRAM 控制器、NAND Flash/PC 卡控制器、SDRAM 控制器和外部器件接口。 所有的外部存储器共享数据器输出的地址、数据、控制总线,每个外部设备可以通过唯一一 个片选信号加于区分。

1.1 框图

   FMC 的框图、地址分配如下图所示。

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)   FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

1.2 接口定义

本设计用到的接口说明。

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

1.3 读写时序图、时序配置参数

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)  FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

若外部连接真是存储器,则参数的配置需要与具体的存储器对应,满足其要求。参数在配置寄存器中设置。

ADDSET=地址建立时间;ADDHOLD=地址保持时间; DATAST=数据建立时间;CLK由HCLK分频得出。

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

1.4 PSRAM控制器异步工作模式分类

        详见参考文献1的《RM0090 / STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx基于 ARM 内核的 32 位高级 MCU 》第32章。本设计采用的是复用模式

      主要分为扩展模式(ABCD),非扩展模式(1,2),复用模式。其中扩展模式要用到第3个配置寄存器。

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

1.5  PSRAM寄存器配置

   PSRAM内部分为4块,每一块都有一组3个配置寄存器。

   ABCD的扩展模式要用到第3个寄存器BWTR1..4单独配置写时序参数,其他模式读写都共用第2个寄存器BTR1..4中的参数。

1.5.1 控制寄存器BCR

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

位 19  CBURSTRW:写入突发使能 (Write burst enable)。

位 15  ASYNCWAIT:异步传输期间的等待信号 (Wait signal during asynchronous transfers)

位 14  EXTMOD:扩展模式使能 (Extended mode enable)。

位 13  WAITEN:等待使能位 (Wait enable bit)。

位 12  WREN:写入使能位 (Write enable bit)。

位 11  WAITCFG:等待时序配置 (Wait timing configuration)。

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

注:此处没有提及的位,详见参考文献1《RM0090》.

1.5.2  片选时序寄存器BTR

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

1.5.3  写入时序寄存器BWTR

    本设计未用到,详见参考文献1《RM0090》。

2 FPGA接口设计

2.1 实际配置的时序

FMC/FSMC总线应用于PSRAM接口(异步、复用、不突发,无WAIT)

2.2 接口信号处理

fpga_cs_ne1   片选,低有效

fpga_wr_nwe  写使能,低有效

fpga_nl_nadv  地址使能,低有效

fpga_rd_noe    读使能,低有效

fpga_db[15:0]  地址数据复用

地址使能有效:

fmc_addr_en = ((!fpga_cs_ne1) &  fpga_nl_nadv);

写使能有效:

wire fmc_wr_en; //写使能

assign fmc_wr_en = ((!fpga_cs_ne1) & (!fpga_wr_nwe) & fpga_nl_nadv);

wire [15:0] Din;//写入的数据,进入各个模块

assign Din  = fpga_db;

读使能有效:

wire fmc_rd_en; //读使能

assign fmc_rd_en = ((!fpga_cs_ne1) & (!fpga_rd_noe) & fpga_nl_nadv);

reg [15:0] rd_data_reg; //读 数据到总线

assign fpga_db = fmc_rd_en ? rd_data_reg : 16'hzzzz;//当读使能=1时,输出数据;为低时,fpga_db为高阻抗,输入数据;

(rd_data_reg 为内部读数据缓存寄存器,用读使能选择是否输出到三态总线)

3 参考文献

1.《RM0090 / STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx基于 ARM 内核的 32 位高级 MCU 》

2.《WinnerI 双 4 代核开发板 综合实例/   第 11 章 微控制器与 FPGA 的 FMC 通信》