首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32-FSMC-NOR FLASH(2)

STM32-FSMC-NOR FLASH(2)

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);        // }
三、例程:STM32读写外NOR FLASH 存储器 39VF1601
1. fsmc_nor..c
/******************** (C) COPYRIGHT 2008 STMicroelectronics
********************
* File Name          : fsmc_nor.c
* Author             : MCD Application Team
* Version            : V2.0.1
* Date               : 06/13/2008
* Description        : This file provides a set of functions needed to drive the *                      M29W128FL, M29W128GL and S29GL128P NOR memories mounted
*                      on STM3210E-EVAL board.
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/ /* Includes ------------------------------------------------------------------*/
继承事业,薪火相传
返回列表