STM32 FSMC的 NOR FLASH B模式模拟LCD 8080时序

STM32 FSMC:FSMC(Flexible Static Memory Controller):翻译为:灵活的静态存储管理器。

可管理的存储类型包括:

  • NOR FLASH 和 SRAM
  • NAND FLASH
  • PC Card(PC卡,不知道是什么东西)

具体功能是将外部的存储设备映射为内部地址,可以用程序访问这些地址,间接地,由 FSMC 自动产生相应时序,从而访问外部的存储设备。

有点像位带操作,但是位带操作主要用于访问外设。

具体映射如下:

 

 

从图中可以看出,FSMC的地址映射的整体范围为:0x6000 0000~0x9FFF FFFF地址单元,共1GB大小。

地址范围根据存储器类型分成4块(Bank1~4),本试验主要将LCD 的  ILI9341 的 GRAM 当成 NOR FLASH 来模拟通信,因此,主要用到用于 NOR/PSRAM 的 Bank1。

用于 NOR/PSRAM 的 Bank1又分成4块,具体用到哪一块需要根据硬件的连接确定(复用的GPIO :FSMC_NEx(x=1~4)。本例中 PD7 复用为FSMC_NE1, 连接了 ILI9341 的片选引脚,因此使用的块为 FSMC Bank1 NOR/PSRAM 1。

 

以下关于这一部分讲解的很好, 引用自:https://www.shuzhiduo.com/A/RnJWPAkv5q/

细心的你肯定还会发现,每个Bank中居然还有4x64MB这种文字,这是什么意思呢?

Bank内部的256MB空间又被分成4个小块,每块64M,各自有相应的控制引脚用于连接片选信号。FSMC_NE[4:1]信号线就分别对应图中的FSMC bank1 NOR/PSRAM4到FSMC bank1 NOR/PSRAM1。当STM32访问0x6C000000-0x6FFFFFFF地址空间时,会访问到Bank1的第4小块区域:FSMC bank1 NOR/PSRAM4相应的FSMC_NE4信号线会输出控制信号(即片选信号),如果这个时候FSMC_NE4处刚好接上IS62WV51216的CS端,那么IS62WV51216就可以任由我们摆布啦。因此,对于你使IS62WV51216来说,一定要注意你的CS端是接的FSMC的哪个FSMC_NE端,这决定你在程序访问哪个地址范围

下面来说一下在stm32F407中SRAM的硬件连接:对于FSMC来说,它已经集成到了单片机内部,它的提供给的管脚已经确定了,是不能改动的,这个可以参考STM32对应芯片的Datasheet。唯一具有灵活性的就是FSMC_NE,具体用哪个FSMC_NE管脚来和你的SRAM相连,当然是你的自由,但是不要忘了,你要找到你选的FSMC_NE所对应的地址范围,不然写程序的时候就搞不清喏!

 

为什么分成四个64M呢?引用自:https://blog.csdn.net/qq_45467083/article/details/109425825

整个Bank1的地址空间被划分为四个子bank,每个子bank的大小为64MB,刚好对应FMC外设的地址总线(FMC_A[0:25])有26条(2^26=64MB)。

 

其他注意事项:

  • FSMC 中,不同存储器类型有不同且相互独立控制寄存器对于 NOR/PSARM 的访问,用专用的控制寄存器,即 FSMC_BCR 和 FSCM_BWTR两种寄存器,这两种寄存器又根据上述的4块(指一个 bank 之中的4块)的划分,每种包括4个。
  • FSMC 属于挂载在 AHB 上的外设,使用的时候需要初始化相应的时钟。

 

由于 FSMC 访问 NOR/SRAM 的B模式的时序与 8080 时序相似程度很高,因此  STM32 的 FSMC 可以用来模拟 8080 时序,达到控制 LCD 的目的:下图是它们的对比。

 

 

 但是我不清楚,为什么访问 ILI9341 的 GRAM 不用地址线(取而代之的是 D/CX 即数据/命令选择线, 本例中,将 PD11 复用为 FSMC_A16,通过将A16置高,表示传输数据; A16置低,表示传输命令)

对于存储器来说,向指定地址写数据,既需要数据,也需要指定地址,但 8080 时序没有地址的概念。

一个猜想是对于 ILI9341 来说,数据之中包含了地址。

 

posted @ 2023-04-03 21:21  FBshark  阅读(333)  评论(0编辑  收藏  举报