0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

标签 > FSMC

FSMC简介

  FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用的一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

  STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。通过采用Thumb-2高密度指令集,Cortex-M3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核设计的STM32系列微控制器能够以更优越的性价比,面向更广泛的应用领域。

  STM32系列微控制器为用户提供了丰富的选择,可适用于工业控制、智能家电、建筑安防、医疗设备以及消费类电子产品等多方位嵌入式系统设计。STM32系列采用一种新型的存储器扩展技术——FSMC,在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

FSMC百科

  FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用的一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

  STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。通过采用Thumb-2高密度指令集,Cortex-M3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核设计的STM32系列微控制器能够以更优越的性价比,面向更广泛的应用领域。

  STM32系列微控制器为用户提供了丰富的选择,可适用于工业控制、智能家电、建筑安防、医疗设备以及消费类电子产品等多方位嵌入式系统设计。STM32系列采用一种新型的存储器扩展技术——FSMC,在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

  机制

  FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列中内部集成256 KB以上FlaSh,后缀为xC、xD和xE的高存储密度微控制器特有的存储控制机制。之所以称为“可变”,是由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。FSMC技术优势①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。②支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NOR/PSRAM/NAND存储器的同步突发访问方式。③支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。④支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。⑤支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM。FSMC内部结构STM32微控制器之所以能够支持NOR Flash和NAND Flash这两类访问方式完全不同的存储器扩展,是因为FSMC内部实际包括NOR Flash和NAND/PC Card两个控制器,分别支持两种截然不同的存储器访问方式。在STM32内部,FSMC的一端通过内部高速总线AHB连接到内核Cortex-M3,另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器通信规约的信号,送到外部存储器的相应引脚,实现内核与外部存储器之间的数据交互。FSMC起到桥梁作用,既能够进行信号类型的转换,又能够进行信号宽度和时序的调整,屏蔽掉不同存储类型的差异,使之对内核而言没有区别。FSMC映射地址空间FSMC管理1 GB的映射地址空间。该空间划分为4个大小为256 MB的BANK,每个BANK又划分为4个64 MB的子BANK,如表1所列。FSMC的2个控制器管理的映射地址空间不同。NOR Flash控制器管理第1个BANK,NAND/PC Card控制器管理第2~4个BANK。由于两个控制器管理的存储器类型不同,扩展时应根据选用的存储设备类型确定其映射位置。其中,BANK1的4个子BANK拥有独立的片选线和控制寄存器,可分别扩展一个独立的存储设备,而BANK2~BANK4只有一组控制寄存器。

  

  表1:FSMC映射地址空间

  配置

  FSMC扩展NOR Flash配置SRAM/ROM、NOR Flash和PSRAM类型的外部存储器都是由FSMC的NOR Flash控制器管理的,扩展方法基本相同,其中NOR Flash最为复杂。通过FSMC扩展外部存储器时,除了传统存储器扩展所需要的硬件电路外,还需要进行FSMC初始化配置。FSMC提供大量、细致的可编程参数,以便能够灵活地进行各种不同类型、不同速度的存储器扩展。外部存储器能否正常工作的关键在于:用户能否根据选用的存储器型号,对配置寄存器进行合理的初始化配置。确定映射地址空间根据选用的存储器类型确定扩展使用的映射地址空间。NOR Flash只能选用BANK1中的4个子BANK。选定映射子BANK后,即可确定以下2方面内容:①硬件电路中用于选中该存储器的片选线FSMC_NEi(i为子BANK号,i=1,…,4);②FSMC配置中用于配置该外部存储器的特殊功能寄存器号(如表1所列)。配置存储器基本特征通过对FSMC特殊功能寄存器FSMC_BCRi(i为子BANK号,i=1,…,4)中对应控制位的设置,FSMC根据不同存储器特征可灵活地进行工作方式和信号的调整。根据选用的存储器芯片确定需要配置的存储器特征,主要包括以下方面:①存储器类型(MTYPE)是SRAM/ROM、PSRAM,还是NOR FlaSh;②存储芯片的地址和数据引脚是否复用(MUXEN),FSMC可以直接与AD0~AD15复用的存储器相连,不需要增加外部器件;③存储芯片的数据线宽度(MWID),FSMC支持8位/16位两种外部数据总线宽度;④对于NOR Flash(PSRAM),是否采用同步突发访问方式(B URSTEN);⑤对于NOR Flash(PSRAM),NWAIT信号的特性说明(WAITEN、WAITCFG、WAITPOL);⑥对于该存储芯片的读/写操作,是否采用相同的时序参数来确定时序关系(EXTMOD)。配置存储器时序参数FSMC通过使用可编程的存储器时序参数寄存器,拓宽了可选用的外部存储器的速度范围。FSMC的NORFlash控制器支持同步和异步突发两种访问方式。选用同步突发访问方式时,FSMC将HCLK(系统时钟)分频后,发送给外部存储器作为同步时钟信号FSMC_CLK。此时需要的设置的时间参数有2个:①HCLK与FSMC_CLK的分频系数(CLKDIV),可以为2~16分频;②同步突发访问中获得第1个数据所需要的等待延迟(DATLAT)。对于异步突发访问方式,FSMC主要设置3个时间参数:地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)。FSMC综合了SRAM/ROM、PSRAM和NOR Flash产品的信号特点,定义了4种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数,如表2所列。在实际扩展时,根据选用存储器的特征确定时序模型,从而确定各时间参数与存储器读/写周期参数指标之间的计算关系;利用该计算关系和存储芯片数据手册中给定的参数指标,可计算出FSMC所需要的各时间参数,从而对时间参数寄存器进行合理的配置。3 STM32扩展S29GL系列NOR Flash实例S29GL系列NOR Flash简介Spansion公司的S29GL系列芯片是采用90nm技术制造的高集成度NOR Flash存储芯片,提供16~128 MB可选容量,支持最快25 ns的页访问速度和110 ns的随机访问速度,带有最大64字节的写缓冲区,以提供更快、更高效的编程,是嵌入式系统设计中大容量存储器扩展的理想选择。本文选用的型号为S29GL512P,容量为512×64K字(总容量64 MB),扩展到NOR Flash控制器管理的BANK1的第2个子BANK。STM32与S29GL512P的电路连接S25GL512P可通过控制引脚BYTE选择对芯片的访问单位(字/字节),区别在于:①对于芯片引脚DQ15,字模式时传送最高数据位D15;字节模式时传送最低地址A-1。②字模式时,数据引脚D0~D15上传送数据信号;字节模式时,只有D0~D7上有信号。此处,将BYTE上拉到高电平,选择16位的字访问单位。FSMC数据线FSMC_D[15:0]与S29GL512P的D15~D0对应连接;FSMC地址线FSMC_A[25:0]的低25根与S29GL512P的地址线A[24:0]对应连接。由于S29GL512P芯片映射到BANK1的子BANK2,可确定其片选线应连接FSMC片选控制线FSMC_NE2。S29GL512P的RY/BY引脚连接FSMC的FSMC_NWAIT引脚,提供等待信号。FSMC的配置根据S29GL512P的映射位置,需要对FSMC_BCR2和FSMC_BTR2/BWTR2寄存器进行配置。(1)FSMC_BCR2配置S29GL512P的读/写采用统一时间参数,只需要设置时间寄存器FSMC_BTR2。配置存储器类型为NORFlash,数据总线宽度为16位(字),不采用地址/数据复用,使能BANK1的子BANK2。(2)FSMC_BTR2由表2可知,异步NOR Flash时序模型Mode2/B需要设置时间参数DATAST和ADDSET。根据时序图,两个参数的计算公式如下:式中:Twc和Trc为所选存储芯片的写周期长度和读操作周期长度;Twp为所选存储芯片的写信号持续长度。根据S29GL512P用户手册,可知参数Twc=Trc=130 ns,Twp=35 ns。设STM32微控制器采用72 MHz主频,则HCLK=(1/72×10-6)s。通过上述公式计算,可取值为:DATAST=2,ADDSET=5。为了达到更好的控制效果,还应考虑FSMC自身延迟问题,使用校正公式:式中:TAVQV为所选存储芯片访问过程中,从地址有效至数据有效的时间域;Tsu(Data_NE)为STM32特征参数,从数据有效到FSMC_NE(片选)失效时间域;Ttv(A_NE)为STM32特征参数,从FSMC_NE有效至地址有效的时间域。TAVQV=130 ns,Tsu(Data_NE)+Ttv(A_NE]=36 ns,对DATAST参数进行校正,可得DATAST=3。应用STM32固件对FSMC进行初始化配置ST公司为用户开发提供了完整、高效的工具和固件库,其中使用C语言编写的固件库提供了覆盖所有标准外设的函数,使用户无需使用汇编操作外设特性,从而提高了程序的可读性和易维护性。STM32固件库中提供的FSMC的NOR Flash控制器操作固件,主要包括2个数据结构和3个函数。数据结构FSMC_NORSRAMTimingInitTypeDef对应 时间参数寄存器FSMC_BTR和FSMC_BWTR的结构定义;FSMC_NORSRAMinitTypeDef对应特征配置寄存器FSMC_BCR的结构定义,并包含2个指向对应BANK的FSMC_BTR和FSMC_BWTR寄存器的FSMC_NORSRAMTimingInitTypeDef结构指针。针对上述S29GL512P芯片扩展要求,利用固件库进行的主要初始化操作如下:

  结语

  STM32作为新一代ARM Cortex-M3核处理器,其卓越的性能和功耗控制能够适用于广泛的应用领域;而其特殊的可变静态存储技术FSMC具有高度的灵活性,对于存储容量要求较高的嵌入式系统设计,能够在不增加外部分立器件的情况下,扩展多种不同类型和容量的存储芯片,降低了系统设计的复杂性,提高了系统的可靠性。

  STM32探秘 之FSMC

  STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT.

  一般越是复杂的东西,理解起来就很困难,但是使用上却很方便,如USB.

  不过FSMC也有很诡异的地方。如

  *(volatile uint16_t *)0x60400000=0x0;

  // 实际地址A21=1,而非A22.[注:0x60400000=0x60000000|(1UL《《22) ]

  *(volatile uint16_t *)0x60800000=0x0;

  // 实际地址A22=1,而非A23 [注:0x60800000=0x60000000|(1UL《《23) ]1234

  为什么呢?那时我还以为软件或硬件还是芯片有BUG,

  我就是从上面的不解中开始研究FSMC的…。。

  1.FSMC信号引脚

  STM32的管脚排列很没有规律,而且分布在多个不同端口上,初始化要十分小心。需要用到的引脚都要先初始化成”复用功能推挽输出”模式。(GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP )

  并且开启时钟 (RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); ) 像STM32F103Z(144脚)芯片有独立的地址和数据总线,而STM32F103V(100脚)就没有, 地址和数据总线要像51单片机一样分时复用,而在STM32F103R系列(64脚)就没有FSMC模块。

  复用总线时管脚:

  PD14,//FSMC_DA0

  PD15,//FSMC_DA1

  PD0 ,//FSMC_DA2

  PD1 ,//FSMC_DA3

  PE7 ,//FSMC_DA4

  PE8 ,//FSMC_DA5

  PE9 ,//FSMC_DA6

  PE10,//FSMC_DA7

  PE11,//FSMC_DA8

  PE12,//FSMC_DA9

  PE13,//FSMC_DA10

  PE14,//FSMC_DA11

  PE15,//FSMC_DA12

  PD8 ,//FSMC_DA13

  PD9 ,//FSMC_DA14

  PD10,//FSMC_DA15

  PD11,//FSMC_A16

  PD12,//FSMC_A17

  PD13,//FSMC_A18

  PE3 ,//FSMC_A19

  PE4 ,//FSMC_A20

  PE5 ,//FSMC_A21

  PE6 ,//FSMC_A22

  PE2 ,//FSMC_A23

  PG13,//FSMC_A24//STM32F103Z

  PG14,//FSMC_A25//STM32F103Z

  独立的地址总线管脚:

  [注:总线是16Bit情况下,FSMC通过FSMC_NBL1,FSMC_NBL0,区分高低字节。下面W代表WORD,即16BIT字。]

  PF0 ,//FSMC_A0 //2^1=2W =4 Bytes //144PIN STM32F103Z

  PF1 ,//FSMC_A1 //2^2=4W =8 Bytes//144PIN STM32F103Z

  PF2 ,//FSMC_A2 //2^3=8W= 16 Bytes //144PIN STM32F103Z

  PF3 ,//FSMC_A3 //2^4=16W =32 Bytes//144PIN STM32F103Z

  PF4 ,//FSMC_A4 //2^5=32W =64 Bytes//144PIN STM32F103Z

  PF5 ,//FSMC_A5 //2^6=64W =128 Bytes//144PIN STM32F103Z

  PF12,//FSMC_A6 //2^7=128W =256 Bytes //144PIN STM32F103Z

  PF13,//FSMC_A7 //2^8=256W =512 Bytes //144PIN STM32F103Z

  PF14,//FSMC_A8 //2^9= 512W =1k Bytes//144PIN STM32F103Z

  PF15,//FSMC_A9 //2^10=1kW =2k Bytes//144PIN STM32F103Z

  PG0 ,//FSMC_A10 //2^11=2kW =4k Bytes//144PIN STM32F103Z

  PG1 ,//FSMC_A11 //2^12=4kW =8k Bytes//144PIN STM32F103Z

  PG2 ,//FSMC_A12 //2^13=8kW =16k Bytes//144PIN STM32F103Z

  PG3 ,//FSMC_A13 //2^14=16kW =32k Bytes//144PIN STM32F103Z

  PG4 ,//FSMC_A14 //2^15=32kW =64k Bytes//144PIN STM32F103Z

  PG5 ,//FSMC_A15 //2^16=64kW =128k Bytes//144PIN STM32F103Z

  PD11,//FSMC_A16 //2^17=128kW =256k Bytes

  PD12,//FSMC_A17 //2^18=256kW =512k Bytes

  PD13,//FSMC_A18 //2^19=512kW =1M Bytes

  PE3 ,//FSMC_A19 //2^20=1MW =2M Bytes

  PE4 ,//FSMC_A20 //2^21=2MW =4M Bytes

  PE5 ,//FSMC_A21 //2^22=4MW =8M Bytes

  PE6 ,//FSMC_A22 //2^23=8MW =16M Bytes

  PE2 ,//FSMC_A23 //2^24=16MW =32M Bytes //100PIN STM32F103V MAX

  PG13,//FSMC_A24 //2^25=32MW =64M Bytes //144PIN STM32F103Z

  PG14,//FSMC_A25 //2^26=64MW =128M Bytes //144PIN STM32F103Z

  独立的数据总线管脚:

  PD14,//FSMC_D0

  PD15,//FSMC_D1

  PD0 ,//FSMC_D2

  PD1 ,//FSMC_D3

  PE7 ,//FSMC_D4

  PE8 ,//FSMC_D5

  PE9 ,//FSMC_D6

  PE10,//FSMC_D7

  PE11,//FSMC_D8

  PE12,//FSMC_D9

  PE13,//FSMC_D10

  PE14,//FSMC_D11

  PE15,//FSMC_D12

  PD8 ,//FSMC_D13

  PD9 ,//FSMC_D14

  PD10,//FSMC_D15

  控制信号

  PD4,//FSMC_NOE,/RD

  PD5,//FSMC_NWE,/WR

  PB7,//FSMC_NADV,/ALE

  PE1,//FSMC_NBL1,/UB

  PE0,//FSMC_NBL0,/LB

  PD7,//FSMC_NE1,/CS1

  PG9,//FSMC_NE2,/CS2

  PG10,//FSMC_NE3,/CS3

  PG12,//FSMC_NE4,/CS4

  //PD3,//FSMC_CLK

  //PD6,//FSMC_NWAIT

  2.地址的分配

  地址与片选是挂勾的,也就是说器件挂载在哪个片选引脚上,就固定了访问地址范围和FsmcInitStructure.FSMC_Bank

  //地址范围:0x60000000~0x63FFFFFF,片选引脚PD7(FSMC_NE1),最大支持容量64MB,

  //[在STM32F103V(100脚)上地址范围为A0~A23,最大容量16MB]

  FsmcInitStructure.FSMC_Bank =FSMC_Bank1_NORSRAM1;

  //地址范围:0x64000000~0x67FFFFFF, 片选引脚PG9(FSMC_NE2),最大支持容量64MB

  FsmcInitStructure.FSMC_Bank =FSMC_Bank1_NORSRAM2;

  //地址范围:0x68000000~0x6BFFFFFF,片选引脚PG10(FSMC_NE3),最大支持容量64MB

  FsmcInitStructure.FSMC_Bank =FSMC_Bank1_NORSRAM3;

  //地址范围:0x6C000000~0x6FFFFFFF,片选引脚(PG12 FSMC_NE4),最大支持容量64MB

  FsmcInitStructure.FSMC_Bank =FSMC_Bank1_NORSRAM4;

  12345678910111213

  3.时序测量

  简单原理草图

  原理草图

  写数据的时序

  写数据的时序

  这里写图片描述

  读数据的时序

  这里写图片描述

  1.数据总线设定为16位宽情况下测量FSMC时序,即

  FsmcInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; 1

  使用逻辑分析仪测量(循环执行下面这条语句,下同)的波形

  *(volatile uint16_t *)(0x60002468UL)=0xABCD;

  12

  这里写图片描述

  可以看出NADV下降沿瞬间DATABUS上的数据被锁存器锁存,接着NWE低电平,总线输出0xABCD,数据0xABCD被写入0x1234这个地址。

  *(volatile uint16_t*)(0x60002469UL )=0xABCD;

  12

  这里写图片描述

  what?向这个地址写出现了两次总线操作。

  为了一探究竟,我引出了控制线。

  *(volatile uint16_t*)(0x60000468UL )=0xABCD;

  12

  向0x60000468UL写入0xABCD到底会发什么?

  这里写图片描述

  从时序图中我们可以看到, 向0x60000468UL在地址(在范围:0x60000000~0x63FFFFFF内)写入数据,片选引脚PD7(FSMC_NE1)被拉低。而在这之前,数据总线上先产生0x234,于是在NADV下降沿瞬间,数据被锁存在地址锁存器上(A0~A15),与A16~A25(如果有配置的话,会在NE1下降沿同时送出)组合成完整的地址信号。然而有人会问这个0x234是哪来的,你是否注意到它正好等于0x468/2,难道是巧合吗?不是的,在16位数据总线情况下(NORSRAMInitStrc.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_16b;),

  像这样

  *(volatile uint16_t*)(0x60000000|addr)=0xABCD;

  12

  写入一个值,实际在地址线上产生的值是addr/2(即addr》》2),

  所以如果我们一定要向addrx写入0xABCD则我们要这样写

  *(volatile uint16_t*)(0x60000000|addrx《《1)=0xABCD;1

  NADV为高电平时, NEW被拉低,NOE为高,且NBL1,NBL0为低,随后数据总线线上产生0xABCD于是0xABCD被写进SRAM的地址0x234中

  那如果我们向一个奇数地址像这样

  *(volatile uint16_t*)(0x60000469UL )=0xABCD;写入值会发生什么呢?

  12

  这里写图片描述

  从图中我们可以看到,STM32其实分成了两次字节写的过程,第一次向0x469/2写入0xCD,第二次向0x469/2+1写入0xAB,

  有人会问你为什么这样说,NWE为低时总线上不是0xCDAB吗?没错,但是注意NBL1,NBL0的电平组合,NBL1连接到SRAM的nUB,NBL0连接到SRAM的nLB.第一次NEW为低时NBL1为低,NBL0为高,0xCDAB的高位被写入SRAM的0x234,第二次NWE为低时NBL1为高,NBL0为低,0xCDAB的低位被写入SRAM的0x235.

  当我们查看反汇编时发现,指令是相同的

  0x080036C4 0468 DCW 0x0468

  0x080036C6 6000 DCW 0x6000

  MOVW r0,#0xABCD

  LDR r1,[pc,#420] ; @0x080036C4//r1=0x60000468

  STRH r0,[r1,#0x00]

  0x080036C4 0469 DCW 0x0469

  0x080036C6 6000 DCW 0x6000

  MOVW r0,#0xABCD

  LDR r1,[pc,#420] ; @0x080036C4//r1=0x60000469

  STRH r0,[r1,#0x00]123456789101112

  以上是写入的时序,下面测量读取的时序

  首先我们向SRAM的真实地址0x234,0x235分别写入0x8824,0x6507

  *(volatile uint16_t*)(0x60000000UL |0x234 《《1 )=0x8824;

  *(volatile uint16_t*)(0x60000000UL |0x235 《《1 )=0x6507;

  *(volatile uint16_t*)(0x60000000UL |0x236 《《1 )=0x6735;

  *(volatile uint16_t*)(0x60000000UL |0x237 《《1 )=0x2003;

  *(volatile uint16_t*)(0x60000000UL |0x238 《《1 )=0x6219;12345

  然后读取:

  tmp=*(volatile uint16_t*)(0x60000468UL );

  12

  这里写图片描述

  如图tmp结果为0x8824

  再试

  tmp=*(volatile uint16_t*)(0x60000469UL );

  12

  这里写图片描述

  nUB=nLB=0;按16bit读

  从0x234读得0X8824取高字节”88”作tmp低8位

  从0x235读得0X6507取低字节”07”作tmp高8位

  最终tmp=0x0788

  接下来验证更特殊的

  *(volatile uint8_t*)(0x60000469UL )=0xABCD;

  12

  这里写图片描述

  由于NBL1=0,NBL0=1,0xCD被写入0x234的高地址,

  数据总线上出现的值是0xCDNN, NN是随机数据,不过一般是和高位一样的值

  *(volatile uint8_t*)(0x60000468UL )=0xABCD;

  12

  这里写图片描述

  由于NBL1=1,NBL0=0,0xCD被写入0x234的低地址,

  数据总线上出现的值是0xNNCD,NN是随机数据

  验证字节读取的

  首先我们向SRAM的真实地址0x234,0x235分别写入0x8824,0x6507

  *(volatile uint16_t*)(0x60000000UL |0x234 《《1 )=0x8824;

  *(volatile uint16_t*)(0x60000000UL |0x235 《《1 )=0x6507;12

  然后这样读取

  tmp=*(volatile uint8_t*)(0x60000469UL );//对奇地址的单字节读取,数据总线的高8位被返回 tmp=0x88

  12

  这里写图片描述

  tmp=*(volatile uint8_t*)(0x60000468UL );//对偶地址的单字节读取,数据总线的低8位被返回 tmp=0x24

  12

  这里写图片描述

  还有更特殊的没有,有!

  *(volatile int64_t*)(0x60000468UL)=0XABCDEF1234567890;//0XABCD EF12 3456 7890,如图,分别进行了4次操作才写完:

  12

  这里写图片描述

  *(volatile int64_t*)(0x60000469UL)=0XABCDEF1234567890;//0XABCD EF12 3456 7890,如图,对奇地址写比偶地址多一次操作:

  12

  这里写图片描述

  *(volatile uint16_t*)(0x60000000UL |0x234 《《1 )=0x8824;

  *(volatile uint16_t*)(0x60000000UL |0x235 《《1 )=0x6507;

  *(volatile uint16_t*)(0x60000000UL |0x236 《《1 )=0x6735;

  *(volatile uint16_t*)(0x60000000UL |0x237 《《1 )=0x2003;

  *(volatile uint16_t*)(0x60000000UL |0x238 《《1 )=0x6219;12345

  tmp=*(volatile int64_t*)(0x60000469UL);// tmp=0x1920036735650788

  12

  这里写图片描述

  tmp=*(volatile int64_t*)(0x60000468UL); //tmp=0x2003673565078824

  12

  这里写图片描述

  1.数据总线设定为8位宽情况下测量FSMC时序,即

  FsmcInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;

  *(volatile uint16_t*)(0x60000468UL )=0xABCD;

  12

  这里写图片描述

  *(volatile uint16_t*)(0x60000469UL )=0xABCD;

  12

  这里写图片描述

  *(volatile uint16_t*)(0x60000468UL )=0x3344;

  *(volatile uint16_t*)(0x60000469UL )=0xABCD;

  123

  tmp=(volatile uint16_t)(0x60000469UL ); //tmp=0xabcd

  这里写图片描述

  tmp=*(volatile uint16_t*)(0x60000468UL );

  12

  tmp=0xcd44这里写图片描述

  tmp=*(volatile uint8_t*)(0x60000468UL );

  12

  tmp=0x44

  这里写图片描述

  tmp=*(volatile uint8_t*)(0x60000469UL );

  tmp=0xcd

  123

  这里写图片描述

  *(volatile uint8_t*)(0x60000469UL )=0xABCD;

  12

  这里写图片描述

  *(volatile uint8_t*)(0x60000468UL )=0xABCD;

  12

  这里写图片描述

  tmp=*(volatile uint64_t*)(0x60000468UL );

  tmp=0x2003673565ABCD44

  123

  这里写图片描述

  tmp=*(volatile uint64_t*)(0x60000469UL );//tmp=0x192003673565ABCD

  12

  这里写图片描述

  *(volatile uint64_t*)(0x60000469UL )=0XABCDEF1234567890;

  12

  这里写图片描述

  *(volatile uint64_t*)(0x60000468UL )=0XABCDEF1234567890;

  12

  这里写图片描述

  鼓捣这么多,看得头都大了,先写到这,以后有发现再补充了

查看详情

fsmc知识

展开查看更多

fsmc技术

FPGA与STM32通过FSMC总线通信的实验

FPGA与STM32通过FSMC总线通信的实验

FSMC总线通信简介 FSMC是STM32系列采用的一种新型存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便进行不 同类型...

2024-11-12 标签:FPGA通信STM32 334 0

CKS32F4xx系列FSMC功能简介

CKS32F4xx系列FSMC功能简介

本课讲为大家讲解CKS32F4xx系列产品的FSMC应用实例,FSMC全称是Flexible Static Memory Controller,读作灵活...

2024-04-14 标签:寄存器存储器Nand flash 853 0

STM32F1系列MCU硬件电路FSMC接口设计

STM32F1系列MCU硬件电路FSMC接口设计

FSMC是STM32F1提供的一个静态存储控制器,是MCU用来扩展存储器,可用来驱动SRAM、Nor Flash、NAND Flash。这里先简单讲解下...

2023-09-27 标签:NANDSRAM存储器静态存储控制器 2815 0

使用MM32F3270 FSMC驱动TFT-LCD

使用MM32F3270 FSMC驱动TFT-LCD

使用MM32F3270 FSMC驱动TFT-LCD

2023-09-27 标签:控制器lcdTFT 921 0

使用MM32F3270 FSMC驱动外部NOR Flash

使用MM32F3270 FSMC驱动外部NOR Flash

使用MM32F3270 FSMC驱动外部NOR Flash

2023-09-21 标签:芯片NOR flashFSMC 861 0

使用MM32F3270 FSMC驱动OLED

使用MM32F3270 FSMC驱动OLED

使用MM32F3270 FSMC驱动OLED

2023-09-27 标签:控制器OLED人机界面 885 0

浅析STM32 FSMC操作LCD的过程

浅析STM32 FSMC操作LCD的过程

FSMC称为灵活的静态存储器,它能够与同步或异步存储器和16位PC存储器卡连接,STM32F4的FSMC接口支持包括SRAM、NAND FLASH、NO...

2023-07-22 标签:NAND静态存储器STM32F4 3792 0

基于MM32F5微控制器的FSMC接口外接SRAM存储器的用法

基于MM32F5微控制器的FSMC接口外接SRAM存储器的用法

MM32F5微控制器基于Arm STAR-MC1微控制器,最高主频可达120MHz,集成了FPU单元和DSP扩展指令集,有不错的算力。

2023-07-17 标签:微控制器SRAM存储器FSMC 1403 0

STM32驱动LCD的原理介绍

STM32驱动LCD的原理介绍

TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可...

2023-07-11 标签:STM32薄膜晶体管TFTLCD 1983 0

SystemVerilog的覆盖率建模方式

为了确保验证的完备性,我们需要量化验证目标。SystemVerilog提供了一套丰富的覆盖率建模方式。

2023-06-25 标签:有限状态机FIFO存储FSMC 1085 0

查看更多>>

fsmc资讯

北京革新创展科技有限公司STM32+FPGA异构多核+树莓派扩展综合项目设计开发套件全新发布

北京革新创展科技有限公司STM32+FPGA异构多核+树莓派扩展综合项目设计开发套件全新发布

北京革新创展科技有限公司目前已经拥有基于嵌入式Linux系统的STM32MP157、AM4378、FPGA开发板和异构多核综合创新实验平台。GX-ARM...

2022-03-17 标签:fpga树莓派FSMC 1731 0

为什么可以利用FSMC来使用外部RAM

为什么可以利用FSMC来使用外部RAM呢,首先了解一下STM32里的FSMC。大容量且引脚数在100脚以上的STM32F103芯片都带有FSMC接口。F...

2022-04-28 标签:STM32FSMC伟凌创芯 1908 0

使用MM32F3270单片机FSMC驱动外部NORFlash

在某些应用中,需要较大容量的存储空间用于存储数据;可以通过SPI 外扩NOR Flash,NAND Flash, 或者通过SDIO扩展SD Card或T...

2021-12-07 标签:单片机32位MCUFSMC 785 0

深度解析STM32驱动LCD原理

深度解析STM32驱动LCD原理

TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可...

2021-04-25 标签:lcdSTM32FSMC 7204 0

STM32F1_ FSMC读写外部SRAM

STM32F1_ FSMC读写外部SRAM

STM32F1_FSMC读写外部SRAM

2020-04-08 标签:sramSTM32F10FSMC 5545 0

STM32系列微控制器新型存储器扩展技术--FSMC有什么优点?

STM32系列微控制器新型存储器扩展技术--FSMC有什么优点?

FSMC管理1 GB的映射地址空间。该空间划分为4个大小为256 MB的BANK,每个BANK又划分为4个64 MB的子BANK,如表1所列。FSMC的...

2018-07-19 标签:微控制器存储器fsmc 2918 0

什么是FMSC_STM32_FMSC使用理解

什么是FMSC_STM32_FMSC使用理解

fsmc就是为了扩展内存的,如我们在STM32芯片外添加一个sram芯片,那么我们只需要把 sram芯片的地址线和数据线和STM32连接后,然后将内核规...

2017-11-14 标签:存储器fsmc 7756 0

查看更多>>

fsmc数据手册

相关标签

相关话题

换一批
  • 8K
    8K
    +关注
    8K分辨率是一种实验中的数字视频标准,由日本放送协会(NHK)、英国广播公司(BBC)及意大利广播电视公司(RAI)等机构所倡议推动 。
  • IGZO
    IGZO
    +关注
    IGZO的中文名叫氧化铟镓锌。简单来说,IGZO是一种新型半导体材料,有着比非晶硅(α-Si)更高的电子迁移率。
  • 裸眼3D
    裸眼3D
    +关注
    3d是three-dimensional的缩写,就是三维图形。在计算机里显示3d图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。
  • 三星
    三星
    +关注
    作为全球知名的公司,三星电子在2005 年宣布了“三星五大经营原则”,展现了其对企业社会责任的承诺。这些原则也是三星电子遵守法律与道德准则、履行企业社会责任和全球行为准则的基础。
  • 点阵屏
    点阵屏
    +关注
    点阵屏技术以全彩为例是将192颗LED芯片三色一组封装在一个模块上,由模块组成单元板,由单元板组成显示屏。
  • 国产芯片
    国产芯片
    +关注
  • HT1621
    HT1621
    +关注
  • 天马微电子
    天马微电子
    +关注
    天马微电子股份有限公司成立于1983年,1995年在深交所上市(股票代码000050),是专业生产、经营液晶显示器(LCD)及液晶显示模块(LCM)的高科技企业。经过三十多年的发展,现已发展成为一家集液晶显示器的研发、设计、生产、销售和服务为一体的大型公众上市公司。
  • 8K电视
    8K电视
    +关注
    8K电视具有8K分辨率,8K超高清分辨率(7680×4320)足足比1920×1080分辨率大了16倍,也足足比3840×2160分辨率大了4倍,清晰度将是蓝光版的16倍。
  • 浪涌电流
    浪涌电流
    +关注
  • THD
    THD
    +关注
  • LCP
    LCP
    +关注
      链路控制协议,简称LCP(Link Control Protocol)。它是PPP协议的一个子集,在PPP通信中,发送端和接收端通过发送LCP包来确定那些在数据传输中的必要信息。
  • 3D扫描
    3D扫描
    +关注
  • 车载显示
    车载显示
    +关注
    车载显示器分有两种一种是放置在客车上面观看的电视,实质上就是车载电视一般有两路视频输入,一路可以接车载DVD用,另一路接倒车影像车载摄像头用,有的还带有MP5视频播放和蓝牙功能,能够在汽车同类运动工具上使用的显示器,方便在汽车运动中使用。
  • 智慧照明
    智慧照明
    +关注
    智慧照明又叫智慧公共照明管理平台或智慧路灯,是通过应用先进、高效、可靠的电力线载波通信技术和无线GPRS/CDMA通信技术等,实现对路灯的远程集中控制与管理,具有根据车流量自动调节亮度、远程照明控制、故障主动报警、灯具线缆防盗、远程抄表等功能,能够大幅节省电力资源,提升公共照明管理水平,节省维护成本。
  • TMS320LF2407A
    TMS320LF2407A
    +关注
  • 电子皮肤
    电子皮肤
    +关注
    早在2003年,日本东京大学的研究团队利用低分子有机物——并五苯分子制成薄膜,通过其表面密布的压力传感器,实现了电子皮肤感知压力。研究人员已经打造出一种能够感知疼痛和触感的电子皮肤,包裹这种电子皮肤的假体能够帮助截肢患者避免受到伤害。
  • FRC
    FRC
    +关注
  • 量子点技术
    量子点技术
    +关注
    量子点是一种重要的低维半导体材料,其三个维度上的尺寸都不大于其对应的半导体材料的激子玻尔半径的两倍。量子点一般为球形或类球形,其直径常在2-20nm之间。常见的量子点由IV、II-VI,IV-VI或III-V元素组成。具体的例子有硅量子点、锗量子点、硫化镉量子点、硒化镉量子点、碲化镉量子点、硒化锌量子点、硫化铅量子点、硒化铅量子点、磷化铟量子点和砷化铟量子点等。
  • 柔宇科技
    柔宇科技
    +关注
    柔宇科技是全球柔性电子行业的领航者,致力于让人们更好地感知世界。柔宇通过自主研发的核心柔性电子技术生产全柔性显示屏和全柔性传感器,以及包括折叠屏手机和其他智能设备在内的全系列新一代人机互动产品。
  • iPad2
    iPad2
    +关注
  • LCM模组
    LCM模组
    +关注
  • 亿光
    亿光
    +关注
    亿光电子工业股份有限公司(Everlight Electronics., Ltd.)于1983年创立于台湾台北,在全球LED产业中具有关键性地位。追求卓越品质,我们致力于认证、研发、制造、质量管理、营销及全球顾客服务。
  • 柔性显示屏
    柔性显示屏
    +关注
  • 线性恒流
    线性恒流
    +关注
  • LG Display
    LG Display
    +关注
  • dji
    dji
    +关注
    DJI 大疆创新致力于持续推动人类进步,自 2006 年成立以来,在无人机、手持影像、机器人教育及更多前沿创新领域不断革新技术产品与解决方案,重塑人们的生产和生活方式。DJI 大疆创新与全球合作伙伴携手开拓空间智能时代,让科技之美超越想象。
  • PDP技术
    PDP技术
    +关注
  • 手机面板
    手机面板
    +关注
  • 抬头显示器
    抬头显示器
    +关注
      抬头显示器一般指平视显示器,平视显示器,是指将主要驾驶仪表姿态指引指示器和主要飞行参数投影到驾驶员的头盔前或风挡玻璃上的一种显示设备。

关注此标签的用户(0人)

编辑推荐厂商产品技术软件/工具OS/语言教程专题