FSMC配置

FSMC配置
控制一个NOR闪存存储器,需要FSMC提供下述功能:
●选择合适的存储块映射NOR闪存存储器:共有4个独立的存储块可以用于与NOR闪存、SRAM和PSRAM存储器接口,每个存储块都有一个专用的片选管脚。
●使用或禁止地址/数据总线的复用功能。
●选择所用的存储器类型:NOR闪存、SRAM或PSRAM。
●定义外部存储器的数据总线宽度:8或16位。
●使用或关闭同步NOR闪存存储器的突发访问模式。
●配置等待信号的使用:开启或关闭,极性设置,时序配置。
●使用或关闭扩展模式:扩展模式用于访问那些具有不同读写操作时序的存储器。
因为NOR闪存/SRAM控制器可以支持异步和同步存储器,用户只须根据存储器的参数配置使用到的参数。
FSMC提供了一些可编程的参数,可以正确地与外部存储器接口。依存储器类型的不同,有些参数是不需要的。
当使用一个外部异步存储器时,用户必须按照存储器的数据手册给出的时序数据,计算和设置下列参数:
●ADDSET:地址建立时间
●ADDHOLD:地址保持时间
●DATAST:数据建立时间
●ACCMOD:访问模式 这个参数允许 FSMC可以灵活地访问多种异步的静态存储器。共有4种扩展模式允许以不同的时序分别读写存储器。 在扩展模式下,FSMC_BTR用于配置读操作,FSMC_BWR用于配置写操作。(译注:如果读时序与写时序相同,只须使用FSMC_BTR即可。)
如果使用了同步的存储器,用户必须计算和设置下述参数:
●CLKDIV:时钟分频系数
●DATLAT:数据延时
如果存储器支持的话,NOR闪存的读操作可以是同步的,而写操作仍然是异步的。
当对一个同步的NOR闪存编程时,存储器会自动地在同步与异步之间切换;因此,必须正确地设置所有的参数。

 


2. 时序计算
如上所述,对于异步NOR闪存存储器或类似的存储,有不同的访问协议。首先要确定对特定存储器所需要使用的操作协议,选择的依据是不同的控制信号和存储器在读或写操作中的动作。
对于异步NOR闪存存储器,需要使用模式2协议。如果要使用的存储器有NADV信号,则需要使用扩展的模式B协议。
我们将使用模式2操作M29W128FL,不使用任何扩展模式,即读和写操作的时序是一样的。这时NOR闪存控制器需要3个时序参数:ADDSET、DATAST和ADDHOLD。
需要根据NOR闪存存储器的特性和STM32F10xxx的时钟HCLK来这些计算参数。
基于图3和图4的NOR闪存存储器访问时序,可以得到下述公式:
写或读访问时序是存储器片选信号的下降沿与上升沿之间的时间,这个时间可以由FSMC时序参数的函数计算得到:
写/读访问时间 = ((ADDSET + 1) + (DATAST + 1)) × HCLK
在写操作中,DATAST用于衡量写信号的下降沿与上升沿之间的时间参数:
写使能信号从低变高的时间 = tWP = DATAST × HCLK
为了得到正确的FSMC时序配置,下列时序应予以考虑:
●最大的读/写访问时间
●不同的FSMC内部延迟
●不同的存储器内部延迟
因此得到:
((ADDSET + 1) + (DATAST + 1)) × HCLK = max (tWC, tRC)
DATAST × HCLK = tWP
DATAST必须满足:
DATAST = (tAVQV + tsu(Data_NE) + tv(A_NE))/HCLK – ADDSET – 4
二、程序分析

 /*-- FSMC Configuration ----------------------------------------------------*/   p.FSMC_AddressSetupTime = 0x05;     /*ADDSET  地址建立时间*/   p.FSMC_AddressHoldTime = 0x00;    /*ADDHOLD 地址保持时间*/   p.FSMC_DataSetupTime = 0x07;     /*DATAST 数据建立时间*/   p.FSMC_BusTurnAroundDuration = 0x00;   /*BUSTURN 总线返转时间*/   p.FSMC_CLKDivision = 0x00;      /*CLKDIV 时钟分频*/   p.FSMC_DataLatency = 0x00;     /*DATLAT 数据保持时间*/   p.FSMC_AccessMode = FSMC_AccessMode_B;   /*访问模式*/

/*NOR/SRAM的存储块,共4个选项*/

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;   

/*是否选择地址和数据复用数据线*/

  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; 

/*连接到相应存储块的外部存储器类型*/

  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;  

/*存储器数据总线宽度*/

  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; 

/*使能或关闭同步NOR闪存存储器的突发访问模式设置是否使用迸发访问模式(应该就是连续读写模式吧)*/   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;  

/*设置WAIT信号的有效电平*/

  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;  

 /*设置是否使用环回模式*/   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   

/*设置WAIT信号有效时机*/

  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

/*设定是否使能写操作*/

  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; 

/*设定是否使用WAIT信号*/

  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;  

/*使能或关闭扩展模式,扩展模式用于访问具有不同读写操作时序的存储器,设定是否使用单独的写时序*/     

  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; 

/*设定是否使用异步等待信号*/

  FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable; 

/*设定是否使用迸发写模式*/     FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 

 /*设定读写时序*/

  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;    //     

  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;    //                     FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);        //

  /* Enable FSMC Bank1_NOR Bank */   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);        // }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库是ST公司提供的一种嵌入式软件开发库,用于简化硬件的配置和板级支持包的开发。FSMC(Flexible Static Memory Controller)是一种用于外部存储器接口的控制器,可以连接各种静态存储器,如SRAM、NOR Flash和PSRAM等。在HAL库中配置FSMC需要以下步骤: 1. 配置FSMC时钟源:使用RCC(Reset and Clock Control)模块配置FSMC时钟源,可以选择HSI(内部高速时钟)、HSE(外部高速时钟)或PLL(锁相环)。 2. 配置FSMC的时序参数:根据外部存储器的规格书,设置FSMC时序参数,包括读写时钟周期、地址建立时间、数据保持时间等。 3. 配置FSMC控制寄存器:使用FSMC控制寄存器来配置存储器的类型、数据宽度、地址线宽度和存储器模式等。 4. 配置FSMC数据线:将MCU的数据线与外部存储器进行连接,使得MCU能够读写存储器中的数据。可以通过GPIO模块设置相应的引脚功能和模式。 5. 配置FSMC地址线:将MCU的地址线与外部存储器进行连接,使得MCU能够访问存储器中的地址空间。同样可以通过GPIO模块设置引脚功能和模式。 6. 配置FSMC访问模式:根据应用需求,选择适当的FSMC访问模式,如存储器映射模式、端口模式或独立模式等。 7. 初始化FSMC:使用HAL库提供的函数进行FSMC的初始化,将上述配置参数写入相应的寄存器中。 通过以上步骤,我们可以使用HAL库对FSMC进行配置,使得MCU能够与外部存储器进行数据的读写。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值