STM32接口FSMC/FMC难点的理解

一,FSMC简

          FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,

STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。


二,FSMC存储块

STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图

如图:
    FSMC分为4块,每块256M字节又被划分为4*64,即四个片选
    NOR / PSRAM使用块1,共256M
    NAND闪存使用块2,3,共512M
    PC卡使用块4,共256M

三,存储块1(Bank1)寄存器

       STM32 的 FSMC 存储块 1(Bank1)被分为 4 个区,每个区管理 64M 字节空间,每个区都
有独立的寄存器对所连接的存储器进行配置。Bank1 的 256M 字节空间由 28 根地址线
(HADDR[27:0])寻址。
      这里 HADDR 是内部 AHB 地址总线,其中 HADDR[25:0]来自外部存储器地址
FSMC_A[25:0],而 HADDR[26:27]对 4 个区进行寻址。



我们要特别注意 HADDR[25:0]的对应关系:
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]对应 FSMC-A[24:0]。
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]对应FSMC_A[25:0]。


比如外部存储器接到FMC_NE1上面,那么外部存储器的地址为HADDR[26:27] +FMC_A[25:0]=0x60000000+FMC_A[25:0]。

注:不论外部接 8  位/16  位宽设备,FSMC_A[0] 永远接在外部设备地址 A[0] 。

 HADDR[25:0] 位包含外部存储器地址,由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,

实际向存储器发送的地址也将有所不同,如图:


一个地址对应一个字节的数据,所以64M字节的地址量,就可以表示64x8=512M的数据,也就是说外部储存器的最大容量为512M.


当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]对应 FSMC-A[24:0]。

:一个地址就可以操作一个字(16位)的数据那么就不需要26根地址线了,HADDR[0]就没有用到,所以: HADDR[25:1] = FMC _A[24:0] 。

即:
             0000对应FSMC_A[0]=0   (2字节)
             0010对应FSMC_A[0]=1   (2字节)

             0100对应FSMC_A[1]=1   (2字节)


        所以对应关系需要除以2,内部右移一位对齐
        此时最低位没用,访问最低位需要使用UB/LB


当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]对应 FSMC_A[25:0]。

:一个地址正好可以操作一个字节(8位)的数据,需要26根地址线:那么 HADDR[25:0] = FMC _A [25:0] 。


  • 29
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值