在魔改PLUS-F5280开发板上使用合封qsp iflash

news2024/11/16 6:55:08

文章目录

    • 引言
    • 硬件调整
    • 软件调整
    • 总结

引言

由于目前灵动官网暂未发布正式版的PLUS-F5280开发板,可以使用现有的PLUS-F5270 v1.2开发板(下文简称PLUS-F5270开发版)替换为MM32F5280微控制器芯片,改装为PLUS-F5280开发板。本文记录了使用现有的PLUS-F5270开发板评估MM32F5280微控制器的软硬件调整过程。

硬件调整

PLUS-F5270 开发板上,使用MM32F5270微控制器的qspi接口对接了外置flash存储芯片。PLUS-F5270 板载华邦flash存储芯片的 W25Q64JVSIQ,容量为 8MB (64Mb),3.3V 供电,默认情况下,四线模式处于打开状态。

MM32F5270连接该 QSPI Flash 所使用的引脚号如图1所示:

在这里插入图片描述

图1 PLUS-F5270开发板上的spiflash原理图

MM32F5280微控制器芯片,是在MM32F5270微控制器的基础之上,在芯片内部合封了一块2MB容量的flash,合封flash芯片同MM32F5270的die也是通过qspi接口对接。但当前版本的PLUS-F5270开发板外界flash芯片的qspi引脚同MM32F5280合封内部使用的qspi引脚不相同。见表1所示。

表1 PLUS-F5270和MM32F5280的qspi引脚
qspi functionPLUS-F5270 pinMM32F5280 pin
CSPB10PF6
SCKPG7PG7
D0PG6PG6
D1PA3PF8
D2PB3PF10
D3PG8PG8

MM32F5270微控制器芯片同MM32F5280除了合封qspi接口的引脚未引出,其余引脚完全相同,故改装后的PLUS-F5280可以使用绝大多数原PLUS-F5270开发板的功能,除了少量功能,包括:

  • ADC温感、电位器功能将无法使用
  • 以太网功能将无法使用(原RMII模式连线已弃用)

软件调整

同时,需要在MindSDK为PLUS-F5270开发的样例工程中,修改pin_init.c文件中引脚复用配置。以spiflash_sfud_qspi工程为例。

原PLUS-F5270工程中的pin_init.c源文件:

void BOARD_InitPins(void)
{
    ...

    /* PB10 - QSPI_CS. */
    gpio_init.Pins  = GPIO_PIN_10;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &gpio_init);
    GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_10);

    /* PG7 - QSPI_SCK. */
    gpio_init.Pins  = GPIO_PIN_7;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);

    /* PG6 - QSPI_IO0. */
    gpio_init.Pins  = GPIO_PIN_6;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);

    /* PA3 - QSPI_IO1. */
    gpio_init.Pins  = GPIO_PIN_3;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &gpio_init);
    GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_10);

    /* PB3 - QSPI_IO2. */
    gpio_init.Pins  = GPIO_PIN_3;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &gpio_init);
    GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_10);

    /* PG8 - QSPI_IO3. */
    gpio_init.Pins  = GPIO_PIN_8;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);
}

魔改PLUS-F5280工程中的pin_init.c源文件:

void BOARD_InitPins(void)
{
    ...

    /* PF6 - QSPI_CS. */
    gpio_init.Pins  = GPIO_PIN_6;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOF, &gpio_init);
    GPIO_PinAFConf(GPIOF, gpio_init.Pins, GPIO_AF_10);

    /* PG7 - QSPI_SCK. */
    gpio_init.Pins  = GPIO_PIN_7;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);

    /* PG6 - QSPI_IO0. */
    gpio_init.Pins  = GPIO_PIN_6;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);

    /* PF8 - QSPI_IO1. */
    gpio_init.Pins  = GPIO_PIN_8;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOF, &gpio_init);
    GPIO_PinAFConf(GPIOF, gpio_init.Pins, GPIO_AF_10);

    /* PF10 - QSPI_IO2. */
    gpio_init.Pins  = GPIO_PIN_10;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOF, &gpio_init);
    GPIO_PinAFConf(GPIOF, gpio_init.Pins, GPIO_AF_10);

    /* PG8 - QSPI_IO3. */
    gpio_init.Pins  = GPIO_PIN_8;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_OpenDrain
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);
    GPIO_PinAFConf(GPIOG, gpio_init.Pins, GPIO_AF_10);
}

还要注意,因为新增使用了GPIOF端口,还需要在clock_init.c文件中启用GPIOF端口的总线访问时钟。

void BOARD_InitBootClocks(void)
{
    CLOCK_ResetToDefault();
    CLOCK_BootToHSE120MHz();

    ...
    
    /* GPIOF. */
    RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOF, true);
    RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOF);

    ...
}

总结

魔改之后,可以使用MindSDK中为PLUS-F5270微控制器提供的软件包(启动代码、驱动程序、样例及演示工程),评估MM32F5280微控制器芯片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mybatis源码解析】mapper实例化及执行流程源码分析

文章目录简介环境搭建源码解析基础环境:JDK17、SpringBoot3.0、mysql5.7 储备知识:《【Spring6源码・AOP】AOP源码解析》、《JDBC详细全解》 简介 基于SpringBoot的Mybatis源码解析: 1.如何对mapper实例化bean 在加载BeanDefinition时&a…

哈希表题目:矩阵置零

文章目录题目标题和出处难度题目描述要求示例数据范围进阶解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析解法三思路和算法代码复杂度分析题目 标题和出处 标题:矩阵置零 出处:73. 矩阵置零 难度 3 级 题目描述 要求 给定一个 m…

oracle单库重建undo表空间步骤

前言:undo表空间不足可直接增加空间; alter tablespace UNDOTBS1 add datafile /data/oradata/datafile/UNDOTBS102.dbf size 30g autoextend off; 注:单次增加最大不得超过32G 回收空间 缩小表空间直接可以resize命令缩小&#xff1b…

webpack(高级)--创建自己的loader 同步loader 异步loader loader参数校验

webpack 创建自己的loader loader是用于对模块的源代码进行转换(处理) 我们使用过很多loader 比如css-loader style-loader babel-loader 我么如果想要自己创建一个loader 首先创建webpack环境 pnpm add webpack webpack-cli -D 之后创建loader模块…

Hadoop初步理解

产生原因 在之前,数据量小,增长速度慢,且数据基本都是文件。储存和处理这些数据并不麻烦,单个存储单元和处理器组合就可以。 之后随着互联网发展,产生了大量多种形式的数据。 非结构化数据:邮件、图像、音…

盘点3个.Net开发的WMS仓库管理系统

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 仓库管理系统在企业中,重要性越来越高,不仅可以提高效率,还能降低企业的压力,企业通过协调和优化资源使用和物料流动,能极大程度地提升了管理效率&…

中国500强|长虹控股集团携手契约锁,推动采购-人事业务电子签

四川长虹电子控股集团(以下简称“长虹控股集团”)是国内知名的电器制造商之一,拥有六家上市公司、一家新三板的公众公司,入选世界品牌500强、中国企业家协会发布的中国500强企业榜单。此次,长虹控股集团携手契约锁打造…

数据分析与SAS学习笔记3

SAS在最新的展示图,表现力比较丰富。 SAS的处理流程: 数据步 过程步: ETL是数据分析非常重要的步骤。70%-90%花在收集数据以及整理数据,数据分析数据的时间不是很多的。 一个完整的数据步和过程步: 数据步基本语句总…

新手学习node.js基础,node.js安装过程,node.js运行环境及javascript运行环境.

学习node.js1.什么是node.js?2.node.js中的javaScript运行环境3.node.js可以做什么?4. node.js学习思路5.node.js环境的安装6.如何在node.js中执行JavaScript代码1.什么是node.js? node.js是一个基于Chrome v8 引擎的JavaScript运行环境(后端) node.js官网 &…

Flutter for Android

将 Flutter 添加到现有应用程序 在 Flutter 中一次重写整个应用程序是不切实际的。 对于这些情况,Flutter 可以作为库或模块逐步集成到您现有的应用程序中。 然后可以将该模块导入到您的 Android 或 iOS(当前支持的平台)应用程序中&#xff…

GEE学习笔记 八十六:分类中的特征重要性分析

之前在GEE中做随机森林分类时候,很多人都在问如何做特征重要性分析?但是在GEE之前并没有相关API可以做特征重要性分析,最新的API更新后GEE也可以做特征重要性分析了。 1、目前常用的包含特征重要信息分析的分类方法包括: &#…

基础篇:03-SpringCloud工程部署启动

目录 1.工程搭建部署 方案一:完整工程导入 方案二:从零开始搭建 1.工程与module创建 2.数据库导入 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 4.服务远程调用 时序图说明 服务远程调用实现 注入RestTemplate Res…

自学web前端觉得好难,可能你遇到了这些困境

好多人跟我说上学的时候也学过前端,毕业了想从事web前端开发的工作,但自学起来好难,快要放弃了,所以我总结了一些大家遇到的困境,希望对你会有所帮助。 目录 1. 意志是否坚定 2. 没有找到合适自己的老师 3. 为了找…

论文阅读【PAMI_2022】FSGANv2: Improved Subject Agnostic Face Swapping and Reenactment

论文阅读【PAMI_2022】FSGANv2: Improved Subject Agnostic Face Swapping and Reenactment论文的缩写全拼一、摘要(问题,贡献,效果)二、引言(idea)三、方法(FSGAN)1.Detection and tracking2.Generator ar…

node学习-3:服务器渲染和客户端渲染

1. 概念 一.服务端渲染,后端嵌套模板,后端渲染模板,SSR(后端把页面组装好) 做好静态页面,动态效果 把前端代码提供给后端,后端则把静态html以及里面的假数据给删除掉 通过模板进行动态生成h…

8个让你收入翻倍的高质量免费网站

毕业几年了,如果你的月薪不到1w,还是做着重复机械的动作,现在马上往下看,今天分享6个资源网站让你的收入暴增,尤其是最后一个。每天花一个小时,让你工资翻倍,从此在职场横着走,再也不…

GEE学习笔记 八十三:【GEE之Python版教程十三】几何图形

遥感分析中用到的数据主要就是这两大类:矢量数据和栅格数据。在Google Earth Eninge中,它为我们讲这两类数据封装成为了以下几类数据。 下面几节内容我会依次讲解相关内容的详细信息,这一节先讲一下几何图形ee.geometry。 学习任何新的东西首…

设计模式之抽象工厂模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、抽象工厂模式是什么? 抽象工厂模式是一种创建型的软件设计模式,该模式相当于升级版的工厂模式。 如果…

采集知乎评论

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! excel保存效果图: 首先我们找一个评论比较多的帖子,如下图所示有874条评论 点击评论…

算法刷刷刷| 回溯篇| 组合问题大集合

77.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 输入:n 4, k 2 输出: [[2,4], [3,4], [2,3], [1,2], [1,3], [1,4],] import java.util.ArrayList; import java.util.List;clas…