STM32接口中FSMC/FMC难点问题理解

2020-02-13来源: elecfans关键字: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]。

关键字:STM32接口  FSMC  FMC 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488070.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32中GPIO的这八种配置种类你知道几种?
下一篇:STM32如何实现W25X16的汉字字库存储

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

解决STM32 I2C接口死锁在BUSY状态的方法讨论
关于STM32的I2C接口死锁在BUSY状态无法恢复的现象,网上已有很多讨论,看早几年比较老的贴子,有人提到复位MCU也无法恢复、只有断电才行的状况,那可是相当严重的问题。类似复位也无法恢复的情况是存在的,技术支持矢口否认问题存在,并不是正确面对问题的态度。比如我用这款F439芯片的SDRAM控制器,在错误操作后进入HardFault状态,复位无法恢复,JTAG也无法联机,只能断电重来,官方的Erratasheet里也提到了。如果I2C接口无法可靠工作,那么所做的设计将存在严重隐患,不可能要求用户用断电的方法恢复系统。如果像某些网友提到弃用硬件I2C,转为GPIO模拟I2C时序,那么首先I2C时钟频率不易确定,因为STM32
发表于 2020-02-02
解决STM32 I2C接口死锁在BUSY状态的方法讨论
怎样用STM32CAN总线接口发送和接收数据
,禁止高7位都为隐性,即不能:ID=1111111XXXX。RTR,远程请求位。0,数据帧;1, 远程帧;SRR,替代远程请求位。设置为1(隐性电平);IDE,标识符选择位。0,标准标识符;1,扩展标识符;r0,r1:保留位。必须以显现电平发送,但是接收可以是隐性电平。DLC:数据长度码。0~8,表示发送/接收的数据长度(字节)。IDE,标识符选择位。0,标准标识符;1,扩展标识符;位时序分解为了实现位同步,CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。STM32中的CAN接口STM32的芯片
发表于 2019-11-16
怎样用STM32CAN总线接口发送和接收数据
STM32F103/302 SPI3 接口使用例程
最近在用STM MCU 的SPI3,把一些使用时的注意点给大家记录一下,该注意的几点都注意了:1,开GPIO时种2,开SPI3时钟3,GPIO引脚功能设定4,如果有引脚复用的或与JTAG口有共用的引脚要对GPIO进行remap等代码如下:void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);   // NSS
发表于 2019-10-17
STM32F103/302 SPI3 接口使用例程
基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解1
结束了呢?于是24C256接收到八位后就会返回一个特定的电平,此电平称为应答信  号,如果我们是读的话,自己也要产生一个应答信号发送出去,写的应答信号是24C256产生的(注意区别这2个       应答信号)!下面我们开始程序的设计:第一步;创建一个c文件和一个h文件,我创建的如下图第二步:选择单片机的一个I2C接口!我选择了PB6、PB7,对应SCL和SDA!所以c文件的第一个函数就是初始化这2个接口,程序如下:为了方便之后的程序的简单,我们在c文件里宏定义如下几个功能的函数:1、因为SDA端口是数据传输,所以要有输出、输入的配置,我们宏定义如下:(这里如果不懂可以看我的一篇《寄存器
发表于 2019-08-24
基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解1
STM32之FSMC驱动LCD屏应用
首先,你得稍微了解一下FSMC的基本原理,就是说它是怎么用的,怎么配置,为什么能这么用。这个东西可以看看STM32F4的参考手册。这里不具体说了。FSMC其实就是把芯片内部的数据总线和地址总线引出来了,其实51单片机也是有这个总线外接的。没有说把SRAM读到内部内存再读到CPU,SRAM就是内存,直接读到CPU的寄存器,通过内部的AHB总线传输的。我使用的是野火开发板的屏,因为想用开发板提供的程序直接移植。(小白就只能干这种事)因为买的最小系统板是100脚封装的,所以在使用上有点小问题了。我在网上查了好多关于怎么在100引脚的板子上用FSMC上驱动LCD,没有找到合适的答案,既然自己运气好点,调出来了,那么就分享一下。即使不能帮到
发表于 2020-02-13
STM32之FSMC驱动LCD屏应用
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved