灵活的静态存储控制器 (FSMC)

1 篇文章 0 订阅
1 篇文章 0 订阅

一、FSMC 主要特性

        FSMC 能够连接同步、异步存储器和 16  PC 存储卡。其主要用途如下:  

  1.  AHB 数据通信事务转换为适当的外部器件协议
  2. 满足外部器件的访问时序要求

        所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。FSMC 一次只能访问一个外部器件。

        FSMC 具有以下主要功能:

        1. 连接静态存储器映射的器件:

                — 静态随机访问存储器 (SRAM)

                — 只读存储器 (ROM)

                — NOR Flash/OneNAND Flash

                — PSRAM(4 个存储区域)

        2. 两个带有 ECC 硬件的 NAND Flash 存储区域,可检查多达 8 KB 的数据

        3. 16 位 PC 卡兼容设备

        4. 支持对同步器件(NOR Flash  PSRAM)的突发模式访问

        5. 8 或 16 位宽的数据总线

        6. 每个存储区域有独立的片选控制

        7. 每个存储区域可独立配置

        8. 可对时序进行编程,以支持各种器件,尤其是:

                — 等待周期可编程(最多 15 个时钟周期)

                — 总线周转周期可编程(最多 15 个时钟周期)

                       — 输出使能和写入使能延迟可编程(最多 15 个时钟周期)

                — 独立的读和写时序和协议,以支持各种存储器和时序

        9. 写使能和字节通道选择输出,可配合 PSRAM  SRAM 器件使用

        10. 将 32 位的 AHB 事务转换为针对外部 16 位或 8 位器件进行的连续 16 位或 8 位访问。

        11. 用于写入的 FIFO2 字长(对于 STM32F42x  STM32F43x,为 16 字长),每个字为

32 位宽,仅用于存储数据,而不存储地址。因此,此 FIFO 仅会缓冲 AHB 批量写事务。

从而可对慢速存储器执行写入操作后能快速释放 AHB,以供其它操作使用。每次仅缓

冲一个突发事务:如果在有操作正在进行时发生一个新的 AHB 突发事务或者一个单独

事务,则 FIFO 将会清空。FSMC 将插入等待周期,直至当前存储器访问已完成)。

        12. 外部异步等待控制

        定义外部器件类型和其特性的 FSMC 寄存器通常在启动时进行设置,并且在下次上电或复位前保持不变。但也可随时更改这些设置。

二、FSMC框图

        FSMC 包含四个主要模块:

      1. AHB 接口(包括 FSMC 配置寄存器)
      2. NOR Flash/PSRAM 控制器
      3. NAND Flash/PC 卡控制器
      4. 外部器件接口

        框图下图所示

        其各个模块的相关控制信号见FSMC数据手册(注:片选信号FSMC_NE[4:1]决定了与哪个外设通信)。

三、外部器件地址映射

3.1、关于外部设备地址映像,从FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块:

        ● 存储块1用于访问最多4NOR闪存或PSRAM存储设备。这个存储区被划分为4NOR/PSRAM区并有4个专用的片选(存储块1用于与FPGA通信)。

        ● 存储块23用于访问NAND闪存设备,每个存储块连接一个NAND闪存。

        ● 存储块4用于访问PC卡设备

        对于每个存储区域,所要使用的存储器类型由用户在配置寄存器中定义,地址范围如下图:

3.2、NOR和PSRAM地址映像

        HADDR[27:26]位用于选择四个存储块之一:

HADDR[27:26]

选择的存储块

00

存储块1 NOR/PSRAM 1

01

存储块1 NOR/PSRAM 2

10(本次使用)

存储块1 NOR/PSRAM 3

11

存储块1 NOR/PSRAM 4

表3-1 NOR/PSRAM存储块选择

        HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而存储器访问不都是按字节访问,因此接到存储器的地址线依存储器的数据宽度有所不同,如下表:

数据宽度

连到存储器的地址线

最大访问存储器空间(位)

8位

HADDR[25:0]与FSMC_A[25:0]对应相连

64M字节 x 8 = 512 M位

16位(本次使用)

HADDR[25:1]与FSMC_A[24:0]对应相连,HADDR[0]未接

64M字节/2 x 16 = 512 M位

32位

HADDR[25:2]与FSMC_A[23:0]对应相连,HADDR[1:0]未接

64M字节/4 x 32 = 512 M位

表3-2 外部存储器地址

3.3、NOR闪存和PSRAM的非对齐访问支持 

        每个NOR闪存或PSRAM存储器块都可以配置成支持非对齐的数据访问。

        在存储器一侧,依据访问的方式是异步或同步,需要考虑两种情况:

                ● 异步模式:这种情况下,只要每次访问都有准确的地址,完全支持非对齐的数据访问。

                ● 同步模式:这种情况下,FSMC只发出一次地址信号,然后成组的数据传输通过时钟CLK顺序进行。

        某些NOR存储器支持线性的非对齐成组访问,固定数目的数据字可以从连续的以N为模的地址读取,典型的N81632,可以通过NOR闪存的配置寄存器设置。此种情况 下,可以把存储器的非对齐访问模式设置为与AHB相同的模式。

        如果存储器的非对齐访问模式不能设置为与AHB相同的模式,应该通过FSMC配置寄存器的相应位禁止非对齐访问,并把非对齐的访问请求分开成两个连续的访问操作。

四、外部存储器接口信号

        PSRAM外部存储器接口信号。(与FPGA通信时相当于PSRAM存储器)

FSMC信号名称 

信号方向

功能

CLK

输出

时钟(同步突发模式使用)

A[25:0]

输出

地址总线

D[15:0]

输入/输出

双向数据总线

NE[x]

输出

片选,x = 1...4 (PSRAM称其为NCE(Cellular RAMCRAM),低有效

NOE

输出

输出使能,低有效

NWE

输出

写使能,低有效

NL(=NADV)

输出

地址有效(存储器信号名称为:NADV),低有效

NWAIT

输入

PSRAM要求FSMC等待的信号,低有效

NBL[1]

输出

高字节使能(存储器信号名称为:NUB),低有效

NBL[0]

输出

低字节使能(存储器信号名称为:NLB),低有效

表5-1   PSRAM

注:PSRAM存储器是按16位的字寻址,最大容量达64兆字节(26条地址线)

        FSMC 会为每个存储区域输出唯一的片选信号 NE[4:1]。所有其它信号(地址、数据和控

制)均为共享信号。

        对于同步访问,FSMC 只有在读/写事务期间才会向所选的外部器件发出时钟 (CLK)HCLK

时钟频率是该时钟的整数倍。每个存储区域的大小固定,均为 64 MB

        每个存储区域都通过专用的寄存器进行配置。

        存储器的可编程参数包括访问时序(请参见表 5.1)和对等待管理的支持(用于在突发模式

下访问 NOR Flash  PSRAM)。

参数

功能

访问模式

单位

最小值

最大值

地址建立

地址建立阶段的持续时间

异步

AHB 时钟周期

(HCLK)

0

15

地址保持

地址保持阶段的持续时间

异步,复用I/O

AHB (HCLK) 时钟周期

1

15

数据建立

数据建立阶段的持续时间

异步

AHB 时钟周期

(HCLK)

1

256

总线周转

总线周转阶段的持续时间

异步和同步读取

AHB (HCLK) 时钟周期

0

15

时钟分频比

构建一个存储器时钟周期 (CLK) 所

需的 AHB 时钟周期 (HCLK) 数量

同步

AHB 时钟周期

(HCLK)

2

16

数据延迟

在发出突发的第一个数据前向存储器发出的时钟周期数量

同步

存储器时钟周

期 (CLK)

2

17

5.1 NOR/PSRAM 的可编程访问参数

五、时序控制

本次与FPGA通信主要用到模式A,模式A读写时序如下:

六、FPGA逻辑关于FSMC总线的控制

input   wire[25:0]  lb_addr             ,//26位地址

inout   wire[15:0]  lb_dio              ,//16位数据

input   wire       lb_noe             ,//读出FPGA使能

input   wire        lb_nwe             ,//写入FPGA使能

input   wire        lb_nbyte_l          ,//低字节使能

input   wire        lb_nbyte_h          ,//高字节使能

assign  lb_dio  = (lb_noe) ? 16'hzzzz : lb_rddata;//将FPGA中的数据读到FSMC的数据总线上

always @(posedge lb_clk or posedge lb_rst)//将FSMC总线上的数据写到写到FPGA中

begin

        if(lb_rst)

                lb_wrdata    <= #U_DLY 16'h0000;

        else if(lb_nwe == 1'b0)

                lb_wrdata    <= #U_DLY lb_dio;

        else

                lb_wrdata    <= #U_DLY lb_wrdata;

end

input   wire[25:0]  lb_addr             ,//26位地址

inout   wire[15:0]  lb_dio              ,//16位数据

input   wire       lb_noe             ,//读出FPGA使能

input   wire        lb_nwe             ,//写入FPGA使能

input   wire        lb_nbyte_l          ,//低字节使能

input   wire        lb_nbyte_h          ,//高字节使能

assign  lb_dio  = (lb_noe) ? 16'hzzzz : lb_rddata;//将FPGA中的数据读到FSMC的数据总线上

always @(posedge lb_clk or posedge lb_rst)//将FSMC总线上的数据写到写到FPGA中

begin

        if(lb_rst)

                lb_wrdata    <= #U_DLY 16'h0000;

        else if(lb_nwe == 1'b0)

                lb_wrdata    <= #U_DLY lb_dio;

        else

                lb_wrdata    <= #U_DLY lb_wrdata;

end

七、更多关于FSMC总线设计参见手册

        更多关于FSMC总线设计请参考FSMC数据手册,如需要参考FPGA通过FSMC总线与单片机通信的Verilog设计可私信我。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值