Renesas R7FA8D1BH (Cortex®-M85) Data Flash程序功能实现

目录

概述

1 Data Flash空间

2 FSP配置参数

3 源代码介绍

3.1 源代码

 3.2 中断函数

3.3 源代码文件

4 测试

4.1 测试实现

4.2 测试


概述

本文主要介绍使用FSP提供的库函数操作Renesas R7FA8D1BH (Cortex®-M85) Data Flash的方法,笔者使用FSP配置参数,并生成工程文件,然后实现测试函数,以验证操作Flash的功能。

1 Data Flash空间

Renesas R7FA8D1BH (Cortex®-M85) Data Flash的数据快闪存储器的数据区被划分为64字节块,每个字节块作为一个擦除单元。数据闪存的映射关系如下图所示:

2 FSP配置参数

 1)使用FSP创建Stack

2) 配置Stack的参数

3 源代码介绍

3.1 源代码

1)应用函数代码

代码118行:打开Flash操作端口

代码122行:擦除Flash

代码127行: 判断是否查出完成

代码134行:检查擦除Flash空间的是否完成

代码144:写数据

代码149行:读取数据

 3.2 中断函数

代码14~22行: 定义中断函数中使用的变量

代码25~51行: 判断中断状态

3.3 源代码文件

 创建 bsp_vm_flash.c文件,编写如下代码

 /*FILE NAME  :  bsp_vm_flash.cDescription:  vm flash interfaceAuthor     :  tangmingfei2013@126.comDate       :  2024/09/22*/
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "r_ospi_b.h"
#include "bsp_vm_flash.h"
#include "hal_data.h"bool               interrupt_called;
flash_event_t      flash_event;volatile bool flash_erase_complete_flag = false;
volatile bool flash_write_complete_flag = false;
volatile bool flash_event_not_blank = false;
volatile bool flash_event_blank = false;
volatile bool flash_event_error = false;
volatile flash_event_t flash_event_error_type;void g_flash_callBack (flash_callback_args_t * p_args)
{interrupt_called = true;flash_event      = p_args->event;if (FLASH_EVENT_ERASE_COMPLETE == flash_event){flash_erase_complete_flag = true;}else if (FLASH_EVENT_WRITE_COMPLETE == flash_event){flash_write_complete_flag = true;}else if (FLASH_EVENT_BLANK == flash_event){flash_event_blank = true;}else if (FLASH_EVENT_NOT_BLANK == flash_event){flash_event_not_blank = true;}else{flash_event_error = true;flash_event_error_type = flash_event;}
}#if 1#define FLASH_DF_BLOCK                     0x27000000  /*   64 B:  0x27000000 - 0x2700004F */
#define FLASH_DATA_BLOCK_SIZE              64
#define FLASH_HP_EXAMPLE_WRITE_SIZE        64#define  TRANSFER_LENGTH                   256uint8_t        g_dest[TRANSFER_LENGTH];
uint8_t        g_src[TRANSFER_LENGTH];
flash_result_t blank_check_result;void r_flash_hp_basic_test(void)
{/* Initialize p_src to known data */for (uint32_t i = 0; i < TRANSFER_LENGTH; i++){g_src[i] = (uint8_t) ('A' + (i % 26));}/* Open the flash hp instance. */fsp_err_t err = R_FLASH_HP_Open(&g_flash_ctrl, &g_flash_cfg);assert(FSP_SUCCESS == err);/* Erase 1 block of data flash starting at block 0. */err = R_FLASH_HP_Erase(&g_flash_ctrl, FLASH_DF_BLOCK, 1);assert(FSP_SUCCESS == err);if (true == g_flash_cfg.data_flash_bgo){while (!flash_erase_complete_flag);flash_erase_complete_flag = false;}memcpy( g_dest, FLASH_DF_BLOCK, FLASH_HP_EXAMPLE_WRITE_SIZE);/* Check if block 0 is erased. */err = R_FLASH_HP_BlankCheck(&g_flash_ctrl, FLASH_DF_BLOCK, FLASH_DATA_BLOCK_SIZE, &blank_check_result);assert(FSP_SUCCESS == err);/* Verify the previously erased area is blank *///assert(FLASH_RESULT_BLANK == blank_check_result);/* Write 32 bytes to the first block of data flash. */err = R_FLASH_HP_Write(&g_flash_ctrl, (uint32_t) g_src, FLASH_DF_BLOCK, FLASH_HP_EXAMPLE_WRITE_SIZE);assert(FSP_SUCCESS == err);memcpy( g_dest, FLASH_DF_BLOCK, FLASH_HP_EXAMPLE_WRITE_SIZE);assert(0 == memcmp(g_src, (uint8_t *) FLASH_DF_BLOCK, FLASH_HP_EXAMPLE_WRITE_SIZE));}#endif 

4 测试

4.1 测试实现

功能介绍:

1)选取BLOCK_0:   0x27000000  /*   64 B:  0x27000000 - 0x2700004F */

-

2)   在该区间写入如下数据:

    /* Initialize p_src to known data */
    for (uint32_t i = 0; i < TRANSFER_LENGTH; i++)
    {
        g_src[i] = (uint8_t) ('A' + (i % 26));
    }

-

3) 比较数据

准备数据

读写数据和比较数据

4.2 测试

1)准备数据

2)初始化和擦除Flash

 3)读写和比较数据

写入的数据:

读到的数据:

 

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

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

相关文章

计算机组成原理知识点汇总,零基础入门到精通,收藏这篇就够了

计算机发展历程 计算机硬件的发展 计算机的四代变化 1946年世界上第一台电子数字计算机&#xff08;Electronic Numerical Integrator And Computer, ENIAC&#xff09; 1&#xff09;第一代计算机&#xff08;1946-1957&#xff09;电子管时代。特点&#xff1a;逻辑元件采…

动态规划——01背包问题

目录 零、背包问题 一、01背包 二、分割等和子集 三、目标和 四、最后一块石头的重量II 零、背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问题。 问题可以描述为&#xff1a;给定一组物品&#xff0c;每种物品都有自己的重量和价格&#xff0c;在限定的总…

30.2 不得不谈的lsm:分层结构和lsm数据结构

本节重点介绍 : LSM树核心特点LSM树的核心结构 MemTableImmutable MemTableSSTable LSM树的Compact策略 size-tiered 策略leveled策略 LSM树(Log-Structured-Merge-Tree) LSM树的名字往往会给初识者一个错误的印象&#xff0c;事实上&#xff0c;LSM树并不像B树、红黑树一样…

宏观经济学笔记

【拯救者】宏观经济学速成 国民生产总值GNP: GNP 衡量一国(地区)成员在一定时期内运用生产要素所生产的全部最终产品和服务的市场价值。凡是本国国民所 创造的收入&#xff0c;不管生产要素是否在国内&#xff0c;都计入本国GNP中。 GDP本国居民在本国创造的价值外国居民在本国…

模块二:central cache实现

一、central cache介绍 结构也是一个哈希桶&#xff0c;大小划分和 thread cache哈希桶一样&#xff0c;区别在于挂的不是自由链表而是 span 链表&#xff0c;里面连接了许多 span 二、span介绍 1、实现思路 span 就是 central cache 向 page cache 申请的大块内存&#xff…

D-FINE:在DETRs模型中将回归任务重新定义为细粒度分布优化

晚上回家看到一篇新颖的研究内容&#xff0c; 也是目标检测相关的《D-FINE: REDEFINE REGRESSION TASK IN DETRS AS FINE-GRAINED DISTRIBUTION REFINEMENT》 &#xff0c;原文地址在这里&#xff0c;如下所示&#xff1a; 如果想进一步了解相关的研究工作建议移步阅读原英文论…

数据结构 ——— 链式二叉树oj题:单值二叉树

目录 题目要求 手搓一个单值二叉树 代码实现 题目要求 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false 手搓一个单值二叉树 代码演示&#xff1a; // 数据类…

使用Windbg排查C++软件安装包安装时被安全防护软件拦截导致安装线程堵塞卡住的问题

目录 1、问题描述 2、初步分析 3、将Windbg附加到安装包进程上进行分析 4、在Windbg中查看相关变量的值&#xff0c;并设置断点进行动态调试 4.1、在Windbg中查看相关变量的值 4.2、在Windbg中使用bp命令设置断点进行动态调试 5、腾讯电脑管家已经退出&#xff0c;但其…

一键直达Windows11精简版下载地址:附快速安装教程!

许多用户想知道Windows11精简版下载地址在哪里&#xff1f;这里系统之家小编将给大家分享最新的Windows11精简版系统下载地址&#xff0c;方便大家下载与安装。该版本系统删除大量不必要的组件和功能&#xff0c;让系统运作速度变得更快更流畅&#xff0c;但没有过度精简&#…

Mesh网格

Mesh(网格) 定义&#xff1a;Mesh 是一个包含顶点、三角形、顶点法线、UV坐标、颜色和骨骼权重等数据的对象。它定义了3D模型的几何形状。 功能&#xff1a; 顶点&#xff08;Vertices&#xff09;&#xff1a;构成3D模型的点。 三角形&#xff08;Triangles&#xff09;&…

【机器学习】28. 强化学习(Bellman, Q-learning, DQN, 优先级经验回放)

强化学习 定义强化学习的核心要素马尔可夫决策过程价值函数Bellman 方程Q Learning深度Q学习算法 &#xff08;DQN&#xff09;DQN 的核心思想DQN 的工作流程经验回放&#xff1a;&#xff08;随机抽样&#xff09;目标网络&#xff1a;损失函数 优先级经验回放&#xff08;Pri…

大数据-217 Prometheus 安装配置 启动服务 监控服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

利用RANSAC算法拟合平面并生成包围框的点云处理方法,点云聚类、质心坐标、倾斜角度、点云最小外接矩形

该代码用于分析和处理点云数据&#xff0c;通过对点云数据进行裁剪、平面拟合和生成包围框来提取特定区域的特征并发布结果。主要使用了RANSAC算法来识别并拟合平面&#xff0c;从而提取平面的法向量&#xff0c;接着根据该平面计算出该区域的最小矩形包围框&#xff08;Boundi…

算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝

大佬们好呀&#xff0c;这一次讲解的是二叉树的深度搜索&#xff0c;大佬们请阅 1.前言 ⼆叉树中的深搜&#xff08;介绍&#xff09; 深度优先遍历&#xff08;DFS&#xff0c;全称为DepthFirstTraversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的⼀种…

深入解析DHCP带来了什么功能,服务器回应到底是用广播还是单播呢?

前言 不知道大家在看到这个图的时候第一时间想到的是什么&#xff0c;【好复杂】【看不懂】【终端数好多】&#xff0c;这里不看整体的结构怎么样&#xff0c;来看看终端数量都非常的多&#xff0c;终端要与网络中进行通信&#xff0c;势必需要IP地址&#xff0c;从最开始学习到…

<项目代码>YOLOv8 棉花识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

知乎日报前三周总结

目录 前言 首页 网络请求 上拉加载 详情页 加载WebView 左右滑动 主页与详情页同步更新 总结 前言 在这几周进行了知乎日报的仿写&#xff0c;这篇博客来总结一下前三周仿写的内容 首页 首页的界面如图所示&#xff0c;其实就是一个导航栏和一个数据视图组成的&#…

小白快速上手 labelimg:新手图像标注详解教程

前言 本教程主要面向初次使用 labelimg 的新手&#xff0c;详细介绍了如何在 Windows 上通过 Anaconda 创建和配置环境&#xff0c;并使用 labelimg 进行图像标注。 1. 准备工作 在开始本教程之前&#xff0c;确保已经安装了 Anaconda。可以参考我之前的教程了解 Anaconda 的…

【算法】【优选算法】二分查找算法(上)

目录 一、二分查找简介1.1 朴素二分模板1.2 查找区间左端点模版1.3 查找区间右端点模版 二、leetcode 704.⼆分查找2.1 二分查找2.2 暴力枚举 三、Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1 二分查找3.2 暴力枚举 四、35.搜索插⼊位置4.1 二分查找4.2 暴力枚…