FMC/FSMC/EXMC总线NORFlash/PSRAM接口(异步-复用-不突发/同步-复用-突发)

2023-05-16

请勿转载

目录

1 简介

1.1 框图

1.2 接口定义

1.3 读写时序图、时序配置参数

1.4 PSRAM控制器异步工作模式分类

1.5  PSRAM寄存器配置

1.5.1 控制寄存器BCR

1.5.2  片选时序寄存器BTR

1.5.3  写入时序寄存器BWTR

2 异步复用FPGA接口设计

2.1 实际配置的时序

2.2 接口信号处理

3 同步复用突发模式

3.1 手册中时序及reg配置

3.2寄存器设置、测试代码

3.3 FPGA实际抓取的时序图

4 参考文献


 


1 简介

        使用STM32F4xx系列的 FMC 总线实现与 FPGA 的通信,FMC Flexible Memory Controller 的缩写,译为可变存储控制器。它可以用于驱动包括 SRAMSDRAMNOR、FLASH 以及 NAND FLSAH 类型的存储器。

        FMC 包含五个主要模块: AHB 接口(包括 FMC 配 置 寄 存 器 )、 NOR Flash/PSRAM/SRAM 控制器、NAND Flash/PC 卡控制器、SDRAM 控制器和外部器件接口。 所有的外部存储器共享数据器输出的地址、数据、控制总线,每个外部设备可以通过唯一一 个片选信号加于区分。

1.1 框图

   FMC 的框图、地址分配如下图所示。

   

1.2 接口定义

本设计用到的接口说明。

1.3 读写时序图、时序配置参数

  

若外部连接真是存储器,则参数的配置需要与具体的存储器对应,满足其要求。参数在配置寄存器中设置。

ADDSET=地址建立时间;ADDHOLD=地址保持时间; DATAST=数据建立时间;CLK由HCLK分频得出。

1.4 PSRAM控制器异步工作模式分类

        详见参考文献1的《RM0090 / STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx基于 ARM 内核的 32 位高级 MCU 》第32章。本设计采用的是复用模式

      主要分为扩展模式(ABCD),非扩展模式(1,2),复用模式。其中扩展模式要用到第3个配置寄存器。

1.5  PSRAM寄存器配置

   PSRAM内部分为4块,每一块都有一组3个配置寄存器。

   ABCD的扩展模式要用到第3个寄存器BWTR1..4单独配置写时序参数,其他模式读写都共用第2个寄存器BTR1..4中的参数。

1.5.1 控制寄存器BCR

位 19  CBURSTRW:写入突发使能 (Write burst enable)。

位 15  ASYNCWAIT:异步传输期间的等待信号 (Wait signal during asynchronous transfers)

位 14  EXTMOD:扩展模式使能 (Extended mode enable)。

位 13  WAITEN:等待使能位 (Wait enable bit)。

位 12  WREN:写入使能位 (Write enable bit)。

位 11  WAITCFG:等待时序配置 (Wait timing configuration)。

注:此处没有提及的位,详见参考文献1《RM0090》.

注意:代码移植到GD32F450芯片时,[3:2]存储器类型必须是NOR flash,[12]打开flash写入使能。否则FMC总线时序不正常,没有地址使能。

 

在MemoryType=PSRAM 或NOR Flash时,异步复用模式都可调整总线周转间隔时间BusTurnAroundDuration(两个操作间隔),值越小连续操作越快。

下图中对比两种MTYP、BUSTURN=8  or 15。按手册说明应采用NOR FLASH模式。

下图中为PSRAM,调整BUSTURN=2 OR 4。采样CLK为200M,FMC的HCLK=180M。

1.5.2  片选时序寄存器BTR

1.5.3  写入时序寄存器BWTR

    本设计未用到,详见参考文献1《RM0090》。

2 异步复用FPGA接口设计

2.1 实际配置的时序

2.2 接口信号处理

fpga_cs_ne1   片选,低有效

fpga_wr_nwe  写使能,低有效

fpga_nl_nadv  地址使能,低有效

fpga_rd_noe    读使能,低有效

fpga_db[15:0]  地址数据复用

地址使能有效:

fmc_addr_en = ((!fpga_cs_ne1) &  fpga_nl_nadv);

写使能有效:

wire fmc_wr_en; //写使能

assign fmc_wr_en = ((!fpga_cs_ne1) & (!fpga_wr_nwe) & fpga_nl_nadv);

wire [15:0] Din;//写入的数据,进入各个模块

assign Din  = fpga_db;

读使能有效:

wire fmc_rd_en; //读使能

assign fmc_rd_en = ((!fpga_cs_ne1) & (!fpga_rd_noe) & fpga_nl_nadv);

reg [15:0] rd_data_reg; //读 数据到总线

assign fpga_db = fmc_rd_en ? rd_data_reg : 16'hzzzz;//当读使能=1时,输出数据;为低时,fpga_db为高阻抗,输入数据;

(rd_data_reg 为内部读数据缓存寄存器,用读使能选择是否输出到三态总线)

3 同步复用突发模式

  • 读写可以单独配置同步模式,非同步模式时仍采用时序寄存器的参数。
  • 读写在突发模式时,突发长度固定,读是4个半字,写是2个半字(一个半字16bits)。
  • 突发的地址应为偶数,若为奇数地址则突发写操作会被拆分为两次操作。
  • 软件中要把FMC_CLK的IO脚复用为FMC模式。
  • printf函数不能直接打印64bits数据。

3.1 手册中时序及reg配置

3.2寄存器设置、测试代码

如下图PD3复用为FMC_CLK时钟,否则没有CLK输出。

同步复用突发模式的reg设置:

测试代码编写注意事项:

3.3 FPGA实际抓取的时序图

下图中采样时钟为180M,在FPGA中用FMC_CLK的90M同步处理:

 

下图仅用于观察突发起始地址为奇数地址时的总线时序(写突发拆分为2次操作):

 

4 参考文献

1.《RM0090 / STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx基于 ARM 内核的 32 位高级 MCU 》

2.《WinnerI 双 4 代核开发板 综合实例/   第 11 章 微控制器与 FPGA 的 FMC 通信》

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FMC/FSMC/EXMC总线NORFlash/PSRAM接口(异步-复用-不突发/同步-复用-突发) 的相关文章

  • VIO松耦合和紧耦合对比

    松耦合 xff08 结果级融合 xff09 xff1a 两个独立的运动估计过程中分别处理视觉和惯性测量的信息 xff0c 最终将他们的输出 xff08 位置和姿态 xff09 融合作为结果 紧耦合 xff08 特征级融合 xff09 xff

随机推荐

  • zed2相机运行VINS-mono

    zed2相机标定请参考专栏前面博文 xff01 一 zed2相机运行VINS mono 1 下载VINS mono mkdir p vins ws src cd vins ws src git clone https github com
  • C语言指针笔试题

    1 我们先来看第一段代码和它的输出 span class token keyword int span span class token function main span span class token punctuation spa
  • Gazebo 官网教程学习笔记--Model Editor

    终端打开Gazebo Gui 界面 然后快捷键CTRL 43 M 打开 Model Editor xff0c 或者在edit 下选择model editor 界面如下 1 工具栏 包含用于编辑模型的工具 2 调色板 也称为左面板 有两个选项
  • 《大厂算法面试》小书

    算法面试是大多数小伙伴的弱势 xff0c 但是大厂几乎都会考算法 xff0c 如果在面试过程中不刻意准备一下算法 xff0c 很大概率被挂 其实对于前端和移动端来说 xff0c 算法要求的并不是很高 xff0c 只要把一些常见的算法题刷完
  • ROS通信架构上——Topic和Msg

    Topic 异步通信方式 Node间通过publish subscribe机制通信 相关的命令 xff1a rostopic rostopic list 列出当前所有topicrostopic info topic name 显示某个top
  • Type-C显示器是什么,Type-C显示器的5大优势

    在显示器领域内 xff0c USB Type C接口还处于发展阶段 xff0c 目前已经在新推出的一些高端显示器和旗舰显示器中有配置 USB Type C接口的出现 xff0c 将会形成以显示器为核心的桌面解决方案 xff0c 用户可以把任
  • SLAM综述

    SLAM综述 前言一 概述二 Lidar SLAM激光雷达传感器激光雷达SLAM系统 xff08 Lidar SLAM System xff09 2D SLAM3D SLAM深度学习与激光雷达Feature amp Detection xf
  • VisionPro使用 C# 开发

    VisionPro 常用控件的说明 工具设置窗体 CogPMAlignEditV2 模版匹配设置窗体控件 CogPMAlignEditV2 Subject 工具关联对象 如 xff1a CogPMAlignEditV2 Subject 61
  • rosdep update 失败及解决办法

    一 问题 reading in sources list data from etc ros rosdep sources list d Hit https raw githubusercontent com ros rosdistro m
  • 在STM32上运行ROS节点——rosserial&stm32开发及调试方法

    近期接手了一些ROS机器人项目 xff0c 这里将开发中遇到的问题和解决方法记录下来 stm32强大的外设资源为机器人底层设备控制带来了极大的便利 xff0c 本文简述借助rosserial项目在stm32中运行ROS节点的方法 基本原理
  • 动态存储区、静态存储区、堆和栈的区别

    C c 43 43 程序经过编译连接后形成的二进制映像文件 xff0c 这文件包含 xff1a 栈 xff0c 堆 xff0c 数据段 xff08 只读数据段 xff0c 已经初始化读写数据段 xff0c 未初始化数据段即BBS xff09
  • kubemini-基础使用

    起始 minikube 是一个本地的 k8s 专注于为 k8s 创建一个简单的学习和开发环境 你只需要一个 Docker 或者类似兼容的 容器 xff0c 或者一个虚拟机环境 xff0c k8s 只需要一个单独的命令 xff1a minik
  • 详解信号量和互斥锁之间的区别和联系

    一 xff1a 信号量与互斥锁之间的区别 xff1a 1 xff1a 互斥量用于线程的互斥 xff0c 信号线用于线程的同步 这是互斥量和信号量的根本区别 xff0c 也就是互斥和同步之间的区别 2 xff1a 互斥量值只能为0 1 xff
  • python基础学习(十二)——python中代码的执行顺序以及if __name__ ==‘__main__‘作用和原理

    xff08 1 xff09 代码执行顺序 python程序是顺序执行的 xff0c Python中首先执行最先出现的非函数定义和非类定义的没有缩进的代码 python程序执行时 按照自上而下的顺序 xff1a 首先执行没有缩进的代码 xff
  • c学习--不同c文件中的同名全局变量及同名函数53

    如果在不同的c文件中定义了同名的全局变量 xff0c 则它们会占用相同的内存空间 xff0c 而且编译链接时不会报错 xff01 这可以参考全局变量的内存初始化顺序 对于局部变量而言 xff0c 内存分配的顺序和代码的顺序是一样的 全局变量
  • 基于STM32的FreeRTOS学习之任务基础知识(六)

    记录一下 xff0c 方便以后翻阅 RTOS系统的核心是任务管理 xff0c 初学RTOS系统必须先掌握任务的创建 删除 挂起和恢复等操作 1 什么是多任务系统 玩裸机一般都是在main函数里用while 1 做一个死循环完成所有处理 xf
  • git 推送出现 “fatal: The remote end hung up unexpectedly“ 解决方案

    https blog csdn net qq 41241767 article details 98181952 git 推送出现 34 fatal The remote end hung up unexpectedly 34 解决方案 h
  • 操作系统的设计指导思想——主奴机制

    在学习操作系统的过程中我们会发现一个问题 xff1a 应用程序是应用程序 xff0c 操作系统也是程序 xff0c 操作系统程序凭什么能对应用程序进行组织 管理和协调而不受应用程序损害呢 xff1f 我们认为凭的是特权机制 要想让操作系统做
  • VScode如何配置Git

    注意 xff1a 食用本篇博客的前提是你已经安装好了Git xff0c 并且也有一定的Git基础 因为有些git中比较常用的功能我会略过 第一步 xff1a 配置Git环境变量 右键 我的电脑 xff0c 选择 属性 xff0c 在弹出的对
  • FMC/FSMC/EXMC总线NORFlash/PSRAM接口(异步-复用-不突发/同步-复用-突发)

    请勿转载 目录 1 简介 1 1 框图 1 2 接口定义 1 3 读写时序图 时序配置参数 1 4 PSRAM控制器异步工作模式分类 1 5 PSRAM寄存器配置 1 5 1 控制寄存器BCR 1 5 2 片选时序寄存器BTR 1 5 3