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

发布时间 2023-04-03 21:27:11作者: FBshark

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。

FSMC 中,不同存储器类型有不同且相互独立控制寄存器对于 NOR/PSARM 的访问,用专用的控制寄存器,即 FSMC_BCR 和 FSCM_BWTR两种寄存器,这两种寄存器又根据上述的4块的划分,每种包括4个。

另外,需要注意的是,FSMC 属于挂载在 AHB 上的外设,使用的时候需要初始化相应的时钟。

 

 

 

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

 

 

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

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

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