STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)

1.前言

FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是:

  • 将AHB传输信号转换到适当的外部设备协议
  • 满足访问外部设备的时序要求

所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。

2.FMSC的主要功能

  • 与具有静态存储器接口的器件接口,包括:

─ 静态随机存储器(SRAM)

─ 只读存储器(ROM)

─ NOR闪存

─ PSRAM(4个存储器块)

  • 两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据
  • 16位的PC卡兼容设备
  • 支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM
  • 8或16位数据总线
  • 每一个存储器块都有独立的片选控制
  • 每一个存储器块都可以独立配置
  • 时序可编程以支持各种不同的器件:

─ 等待周期可编程(多达15个周期)

─ 总线恢复周期可编程(多达15个周期)

─ 输出使能和写使能延迟可编程(多达15周期)

─ 独立的读写时序和协议,可支持宽范围的存储器和时序

  • PSRAM和SRAM器件使用的写使能和字节选择输出
  • 将32位的AHB访问请求,转换到连续的16位或8位的,对外部16位或8位器件的访问
  • 具有16个字,每个字32位宽的写入FIFO,允许在写入较慢存储器时释放AHB进行其它操作。

注:[1]如果当前FIFO正在被占用,此时其他的FIFO操作将等待,直到当前的FIFO操作完成

[2]通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持它们的内容不变;当然,也可以在任何时候改变这些设置。

3. FMSC框图

图 FMSC框图

FSMC包含四个主要模块:

● AHB接口(包含FSMC配置寄存器)

● NOR闪存和PSRAM控制器
● NAND闪存和PC卡控制器

● 外部设备接口

4. AHB接口

AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。 AHB操作被转换到外部设备的操作。

当选择的外部存储器的数据通道是16或8位时,在AHB上的32位数据会被分割成连续的16或8位的操作。 AHB时钟(HCLK)是FSMC的参考时钟。

4.1 支持的存储器和操作

  • 一般的操作规则

请求AHB操作的数据宽度可以是8位、16位或32位,而外部设备则是固定的数据宽度,此时需要保障实现数据传输的一致性。 因此,FSMC执行下述操作规则:

● AHB操作的数据宽度与存储器数据宽度相同:无数据传输一致性的问题。

● AHB操作的数据宽度大于存储器的数据宽度:此时FSMC将AHB操作分割成几个连续的较小数据宽度的存储器操作,以适应外部设备的数据宽度。 
● AHB操作的数据宽度小于存储器的数据宽度: 依据外部设备的类型,异步的数据传输有可能不一致。

─ 与具有字节选择功能的存储器(SRAM、ROM、PSRAM等)进行异步传输时,FSMC执行读写操作并通过它的字节通道BL[1:0]访问正确的数据。

─ 与不具有字节选择功能的存储器(NOR和16位NAND等)进行异步传输时,即需要对16位宽的闪存存储器进行字节访问;显然不能对存储器进行字节模式访问(只允许16位的数据传输),因此:

  a. 不允许进行写操作

  b. 可以进行读操作(控制器读出完整的16位存储器数据,只使用需要的字节)。

  • 配置寄存器

FSMC由一组寄存器进行配置

5. 外部设备地址映像

图 FMSC存储BANK

从FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块。

● 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。

● 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。

● 存储块4用于访问PC卡设备 每一个存储块上的存储器类型是由用户在配置寄存器中定义的。

5.1 NOR和PSRAM地址映像

时间: 2024-07-30 22:39:20

STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)的相关文章

31. Flexible static memory controller (FSMC)

31.1 FSMC main features FSMC块能够与同步和异步内存和16位PC存储卡.其主要目的是: 将AHB事务转换为适当的外部设备协议 满足外部设备的访问定时要求 所有外部存储器与控制器共享地址.数据和控制信号.每个外部设备通过一个唯一的芯片选择来访问.FSMC一次只能访问一个外部设备. FSMC具有以下主要特点: 静态内存映射设备接口,包括: 静态随机存取存储器(SRAM) NOR 闪存/OneNAND闪存 PSRAM(4个内存库) 两个 NAND闪存库,带有ECC硬件,可以检

STM32F103X datasheet学习笔记---RCC(reset and clock control)

1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, backup domain reset system reset 系统reset会将所有的寄存器变成reset值(除clock控制寄存器中的标志位及backup domain中的寄存器) power reset //TODO backup domain reset //todo 3. clocks 3.1

STM32F103X datasheet学习笔记---USART

1.前言 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择. 它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作. 它还允许多处理器通信. 使用多缓冲器配置的DMA方式,可以实现高速数据通信. 2.USART主要特性

STM32F103X datasheet学习笔记---Interrupts and events

1.前言 本章主要介绍STM32中断和事件相关的内容 2.NVIC NVIC管理着包括内核异常等中断 主要特性 68个外部中断源(不包含16个内部中断线) 可编程优先级为16级 低延迟异常和中断处理 电源管理控制 系统控制寄存器的实现 嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断 2.1 systick校准值寄存器 系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准.??? 2.2 中断

STM32F103X datasheet学习笔记---GPIOs and AFIOs

1.前言 每个GPIO端口有如下几个寄存器进行操作: 两个32位配置寄存器:GPIOx_CRL, GPIOx_CRH 两个32位数据寄存器:GPIOx_IDR, GPIOx_ODR 一个32位set/reset寄存器:GPOx_BSRR 一个16位reset寄存器:GPIOx_BRR 一个32位锁定寄存器:GPIOx_LCKR 注:GPIO_BRR和GPIO_BSRR支持读写的原子访问 每组GPIO的 port可以配置成如下的IO方式: 2.GPIO基本结构 图 标准GPIO位的基本结构 图 p

ARMV8 datasheet学习笔记5:异常模型

1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架构下IRQ 和Data Abort 异常处理流程图对比. 3.1 IRQ 路由 3.1.1.   AArch32 IRQ 路由 图 AArch32 IRQ 路由 3.1.2.    AArch64 IRQ 路由 图 AArch64 IRQ路由 图 AArch64 IRQ向量查找 3.2.     D

STM32 FSMC学习笔记+补充(LCD的FSMC配置)

STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

java学习笔记之 static

java中的static 说明:这只是本人的学习java的个人心得与见解,分享出来,也算是自己的笔记.(本人小白,有错误的话望大神指出,不喜勿喷.-.-) 静态变量 – 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量 – 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问 – static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的Demo是违反语法的. 1 public class Student{ 2 public v

Ruby on Rails 学习笔记 - 3 Static Page

1. Gemfile source 'https://rubygems.org' gem 'rails', '4.2.0.beta4' gem 'sass-rails', '5.0.0.beta1' gem 'uglifier', '2.5.3' gem 'coffee-rails', '4.0.1' gem 'jquery-rails', '4.0.0.beta2' gem 'turbolinks', '2.3.0' gem 'jbuilder', '2.2.3' gem 'rails-htm