STM32 FSMC总线深入研究

STM32 FSMC总线深入研究

 

由于CPU与FPGA通信的需要,以及对8080总线的熟悉,首选采用了STM32的FSMC总线,作为片间通信接口。FSMC能达到16MHz的写入速度,理论上能写20fps的1024*768的图片哈哈。(当然实际上是不可能的,就算是DMA传输,数据源也跟不上,实际上刷模拟的图片每秒10fps,刷的很high)当然这不是本篇的要点,这里主要研究STM32的FSMC接口,将速度提升到极限。

1. FSMC协议分析

如下为ILI9325的8080接口的协议

wps_clip_image-31672

CS(片选信号):低电平片选有效,高电平失能(默认为高:失能)

RS(数据寄存器):低电平写寄存器,高电平写数据(默认为高:写数据)FSMC默认为低。。。。

RD(读信号) :低电平有效,上升沿写入数据,高电平失能(默认为高,失能)

WR(写信号) :低电平有效,上升沿写入数据,高电平失能(默认为高,失能)

FSMC写SRAM模式如下:

(1)读操作

wps_clip_image-19780

(2)写操作

wps_clip_image-29686

wps_clip_image-8205

wps_clip_image-9397

wps_clip_image-32678

HCLK为系统时钟72MHz

wps_clip_image-26889

综上,分析出FSMC与8080接口协议异同点

(1)同:CS,RS,RD有效电平都一样,单个字节的写入与读取时序完全一样

(2)异:

A:8080 默认RS为高,而FSMC默认RS为低

B:8080接口协议能保持CS,RS等有效,连续写数据,而FSMC以此只能输出一个数据。

C:8080协议没有地址线,而FSMC还有地址线,这使得数据输出不连续。

2. FSMC时序研究

下图为FSMC写命令与数据的时序图,从中根据上图可以分析出FSMC可以实现16M的数据写入。FSMC的信号线翻转非常快,这使得IC或者FPGA时序设计上得非常严谨。FSMC最大实现了72MHz(66.7到100MHz之间,实际为72MHz,HCLK)的翻转速度,这要求外部器件支持那么高的速率。

wps_clip_image-24428

wps_clip_image-16654

寄存器配置(寄存器+数据)

wps_clip_image-30839

连续数据写入(0xBB:写数据开始),命令后,RS默认拉低(FSMC和标准不一样的地方)

wps_clip_image-32061

数据建立很快

wps_clip_image-28180

写数据,然后默认RS拉低

wps_clip_image-23941

wps_clip_image-19205

整体的时序可模拟为:

task task_writecmd;

input [15:0] cmd;

begin

mcu_cs = 0;

mcu_rs = 0;

mcu_data = cmd;

#20;

mcu_we = 0;

#20;

mcu_we = 1;

#15;

mcu_rs = 1;

mcu_cs = 1;

#20;

end

endtask

task task_writedata;

input [15:0] data;

begin

mcu_cs = 0;

mcu_rs = 1;

mcu_data = data;

#20;

mcu_we = 0;

#20;

mcu_we = 1;

#15;

mcu_rs = 1;

mcu_cs = 1;

#20;

end

endtask

3. FSMC接口初始化

wps_clip_image-2557

根据手册,相关参数如下表所示。这里我发现所谓最小值还能设置为最小,但实际速度差不多。FSMC协议时间参数如下所示:

wps_clip_image-17879

有人跟我说,手册是保守的;有人跟我说,在小就是默认值了。我不太理解。感觉速度每提升,应该在小就是默认了。不过,反正我追求速度的极限。

以下是FSMC-SRAM模式下的初始化代码,分享的同时,希望对你有用。

/* Private typedef -----------------------------------------------------------*/
typedef struct
{
  vu16 LCD_REG;
  vu16 LCD_RAM;
} LCD_TypeDef;
#define    LCD_WriteCmd(cmd)    LCD->LCD_REG = cmd
#define    LCD_WriteData(data)    LCD->LCD_RAM = data


/* LCD is connected to the FSMC_Bank1_NOR/SRAM4 and NE4 is used as ship select signal */
#define LCD_BASE    ((u32)(0x60000000 | 0x0C000000))
#define LCD         ((LCD_TypeDef *) LCD_BASE)

void LCD_FSMCConfig(void)
{    
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;

/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 4 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
    //标准
//     p.FSMC_AddressSetupTime = 1;
//     p.FSMC_AddressHoldTime = 2;
//     p.FSMC_DataSetupTime = 2;    
//     p.FSMC_BusTurnAroundDuration = 1;
//     p.FSMC_CLKDivision = 1;
//     p.FSMC_DataLatency = 2;
    
    //超快
  p.FSMC_AddressSetupTime = 0;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 1;    
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;


    
    p.FSMC_AccessMode = FSMC_AccessMode_A;

  /* Color LCD configuration ------------------------------------
     LCD configured as follow:
        - Data/Address MUX = Disable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Enable
        - Asynchronous Wait = Disable */
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;    //2.0
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

  /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}
 
原文:
http://group.chinaaet.com/116/48112
  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32F407的FSMC(Flexible Static Memory Controller)总线应用是指将FSMC用于连接外部存储器或外设的数据交换。FSMC是一个灵活的高性能静态存储器控制器,可以与各种存储器类型和外设相连接。 STM32F407的FSMC总线应用有以下几个方面: 1. 外部存储器扩展:通过FSMC总线,可以将外部存储器,如SRAM(静态随机存储器)或 NOR Flash(并行闪存),连接到STM32F407微控制器。这样可以扩展STM32F407的存储容量,适用于需要大容量内存的应用,如图像处理、音频处理等。 2. 外设连接:FSMC还可以用于连接外部设备,如LCD液晶显示屏。通过FSMC总线,可以将STM32F407与LCD控制器相连接,实现彩色图像的实时显示。此外,FSMC还可以连接其他外设,如触摸屏控制器、摄像头模块等。 3. 并行接口:FSMC总线是一个高速的并行接口,支持多种总线协议。除了SRAM和NOR Flash之外,FSMC还可以连接其他外部存储器,如PSRAM(伪静态随机存储器)、NAND Flash(并行闪存)等。通过FSMC的并行接口,可以实现高速数据传输和存取。 4. DMA支持:FSMCSTM32F407的DMA(直接存储器访问)控制器相结合,可实现高效的数据传输。DMA可以直接从外部存储器读取数据或向外部存储器写入数据,减轻了CPU的负担,提高了数据传输的效率。 总之,STM32F407的FSMC总线应用广泛,可以连接各种外部存储器和外设,具有灵活性和高性能。它在大容量存储、图像处理、音频处理等应用中发挥着重要作用,同时通过DMA支持提供了高效的数据传输解决方案。 ### 回答2: STM32F407的FSMC(Flexible Static Memory Controller)总线可以用于处理与外部静态存储器的通信。它提供了多种接口和功能,方便与不同类型的存储器进行连接,包括SRAM、NOR Flash和PSRAM等。 在SRAM应用中,FSMC总线可以为外部SRAM提供直接访问功能。通过配置FSMC控制寄存器和时序寄存器,可以实现读取和写入SRAM中的数据。这种方式可以扩展MCU的内存空间,提高数据处理能力。 在NOR Flash应用中,FSMC总线可以实现对外部闪存的读取和写入。通过配置FSMC的控制寄存器和时序寄存器,可以设置访问闪存的时序和模式。这种方式可以用于存储嵌入式应用程序代码和数据,提高系统的运行速度和效率。 在PSRAM应用中,FSMC总线可以连接并访问外部并行存储器。通过配置FSMC的控制寄存器和时序寄存器,可以实现对PSRAM的读取和写入。这种方式可以提供高速存储器的访问能力,适用于对存储速度要求较高的应用场景。 总之,STM32F407的FSMC总线应用广泛,能够满足不同类型的外部存储器的连接和通信需求。它提供了灵活的接口和丰富的功能,可以大幅拓展内存空间,提高系统性能和效率。 ### 回答3: STM32F407的FSMC(Flexible Static Memory Controller)总线是一种用于连接外部存储器设备的接口。它提供了与静态存储器(SRAM和NOR闪存)、NAND闪存、SDRAM等设备进行高速数据传输的功能。FSMC总线的应用范围广泛,包括但不限于以下几个方面: 首先,FSMC总线可以连接静态存储器设备,例如SRAM和NOR闪存。SRAM是一种快速且易于访问的存储器,适用于对读写速度要求较高的应用场景。NOR闪存则在数据存储方面提供了非常大的存储容量,适用于嵌入式系统中的代码存储需求。 其次,FSMC总线还可以连接NAND闪存,这是一种使用较多的闪存存储设备,适用于对存储容量要求较高的应用场景。NAND闪存不仅具备较大的存储容量,还具备良好的擦除和写入性能。 另外,FSMC总线还支持连接SDRAM,这是一种用于动态存储的存储器设备。SDRAM具备较大的存储容量和高速的数据传输速度,适用于对存储容量和数据读写性能要求较高的应用场景,如图像处理、音频处理等。 总之,STM32F407的FSMC总线广泛应用于嵌入式系统中需要连接外部存储器设备的场景。通过高速、稳定的数据传输,实现了对静态存储器(SRAM和NOR闪存)、NAND闪存和SDRAM等存储设备的有效控制和访问,为嵌入式系统的数据存储和处理提供了良好的支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值