【XR806开发板试用】使用FDCM操作Flash记录开机次数

一、寻找系统分配的自定义用户数据地址

(1)XR806的Flash布局
在这里插入图片描述

如图1所示,FLASH的布局有两种:
1、没有开启OTA模式;Image1+Padding+Sysinfo
2、开启OTA模式;Image1+Padding+Sysinfo+OTA area +Image2 +Padding
在这里插入图片描述

在这里插入图片描述

如图2/3,当前工程采用wlan_ble_demo,未开启OTA模式,
查看device/xradio/xr806/xr_skylark/project/demo/wlan_ble_demo/gcc/Makefile文件,Flash的cfg文件为IMAGE_CFG := ./image_wlan_ble.cfg
在这里插入图片描述

(2)查看Sysinfo的地址
Sysinfo区域是一段用于存储用户自定义数据的区域,紧跟在Image1区域后面,通过device/xradio/xr806/xr_skylark/project/demo/wlan_ble_demo/prj_config.h得知Sysinfo的地址和长度

二、使用FDCM操作Sysinfo区域

FDCM模块与SDK中其他模块之间的关系如下图所示。Sysinfo,OTA和IMAGE等模块中都有使用到FDCM模块接口,保存其对应的数据。
在这里插入图片描述

注意:(1)FDCM操作的区域需要与Flash可擦除的Block对齐;
(2)FDCM模块管理的Flash区域不要与其他模块(如Image)使用的Flash区域产生冲突,避免相互影响
(3)用FDCM模块管理的Flash区域必须与Flash可擦除的block对齐,即区域起始地址与Flash擦除Block的边缘对齐,并且区域大小为Flash可擦除最小Block大小的整数倍

三、实现代码

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include "ohos_init.h"
#include "kernel/os/os.h"
#include "sys/fdcm.h"
#include "common/framework/platform_init.h"
#define FLASH_DEVICE_NUM         0
#define IoT_FLASH 1
#define FDCM_FLASH_START_ADDR  (1536*1024)
#define FDCM_SIZE   (4*1024)
static OS_Thread_t g_main_thread;

static void MainThread(void *arg)
{
   fdcm_handle_t *fdcm;
   uint8_t write_buf[100];
   uint8_t read_buf[100];

   fdcm = fdcm_open(FLASH_DEVICE_NUM, FDCM_FLASH_START_ADDR, FDCM_SIZE);
   if (fdcm == NULL) {
	printf("fdcm open fail.\n");
	return ;
   }
   printf("fdcm open success, flash addr:0x%x, flash size:%d\n", FDCM_FLASH_START_ADDR, FDCM_SIZE);
   printf("we can use fdcm to save info to flash.\n");
   fdcm_read(fdcm, &read_buf, sizeof(read_buf));   
   if(strlen(read_buf)==0)
   {
      printf("first power on \r\n");
      sprintf((char *)write_buf,"%d",1);
      fdcm_write(fdcm, &write_buf, sizeof(write_buf));
   }
   else
   {   
       printf("read_buf = %d\r\n",atoi((char *)read_buf));  
       sprintf(write_buf,"%d",atoi((char *)read_buf)+1);
       printf("write_buf = %d\r\n",atoi((char *)write_buf));
       fdcm_write(fdcm, &write_buf, sizeof(write_buf));
   } 
   LOS_Msleep(10);
   fdcm_read(fdcm, &read_buf, sizeof(read_buf));
   LOS_Msleep(20);
   printf("Power-on times:%s\r\n",read_buf);
   fdcm_close(fdcm);
}

void FlashTestMain(void)
{
	printf("FDCM Flash Test \r\n");
	if (OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL,
			    OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {
		printf("[ERR] Create MainThread Failed\n");
	}
}

SYS_RUN(FlashTestMain);

四:实验现象展示

====================================================================
	Hello! OpenHarmony!
	System tag : OpenHarmony 1.1.2_LTS
====================================================================
	
use default flash chip mJedec 0x0
[FD I]: mode: 0x10, freq: 96000000Hz, drv: 0
[FD I]: jedec: 0x0, suspend_support: 1
mode select:e

wlan information ===================================================
firmware:
    version : R0-XR_C07.08.52.65_02.84 May 27 2021 11:41:33-Y02.84 
    buffer  : 8
driver:
    version : XR_V02.05
mac address:
    in use        : cc:6e:48:3e:0d:01
    in use        : cc:6e:48:3e:0d:02
====================================================================

wlan mode:a
[VFS INF] LittleFS mount success.

platform information ===============================================
XR806 SDK v1.2.0  Jan 23 2022 09:49:52

heap space [0x223230, 0x24bc00), size 166352

cpu  clock 160000000 Hz
HF   clock  40000000 Hz

sdk option:
    XIP           : enable
    INT LF OSC    : enable
    SIP flash     : enable

mac address:
    efuse         : 80:74:84:05:bb:f9
    in use        : cc:6e:48:3e:0d:01
====================================================================

FDCM Flash Test 
Wifi Test Start

console init success
fdcm open success, flash addr:0x180000, flash size:4096
hiview init success.hello world!
we can use fdcm to save info to flash.
read_buf = 8
write_buf = 9
Power-on times:9
hello world!
====================================================================
	Hello! OpenHarmony!
	System tag : OpenHarmony 1.1.2_LTS
====================================================================
	
use default flash chip mJedec 0x0
[FD I]: mode: 0x10, freq: 96000000Hz, drv: 0
[FD I]: jedec: 0x0, suspend_support: 1
mode select:e

wlan information ===================================================
firmware:
    version : R0-XR_C07.08.52.65_02.84 May 27 2021 11:41:33-Y02.84 
    buffer  : 8
driver:
    version : XR_V02.05
mac address:
    in use        : cc:6e:48:3e:0d:01
    in use        : cc:6e:48:3e:0d:02
====================================================================

wlan mode:a
[VFS INF] LittleFS mount success.

platform information ===============================================
XR806 SDK v1.2.0  Jan 23 2022 09:49:52

heap space [0x223230, 0x24bc00), size 166352

cpu  clock 160000000 Hz
HF   clock  40000000 Hz

sdk option:
    XIP           : enable
    INT LF OSC    : enable
    SIP flash     : enable

mac address:
    efuse         : 80:74:84:05:bb:f9
    in use        : cc:6e:48:3e:0d:01
====================================================================

FDCM Flash Test 
Wifi Test Start

console init success
fdcm open success, flash addr:0x180000, flash size:4096
hiview init success.hello world!
we can use fdcm to save info to flash.
read_buf = 9
write_buf = 10
Power-on times:10
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
====================================================================
	Hello! OpenHarmony!
	System tag : OpenHarmony 1.1.2_LTS
====================================================================
	
use default flash chip mJedec 0x0
[FD I]: mode: 0x10, freq: 96000000Hz, drv: 0
[FD I]: jedec: 0x0, suspend_support: 1
mode select:e

wlan information ===================================================
firmware:
    version : R0-XR_C07.08.52.65_02.84 May 27 2021 11:41:33-Y02.84 
    buffer  : 8
driver:
    version : XR_V02.05
mac address:
    in use        : cc:6e:48:3e:0d:01
    in use        : cc:6e:48:3e:0d:02
====================================================================

wlan mode:a
[VFS INF] LittleFS mount success.

platform information ===============================================
XR806 SDK v1.2.0  Jan 23 2022 09:49:52

heap space [0x223230, 0x24bc00), size 166352

cpu  clock 160000000 Hz
HF   clock  40000000 Hz

sdk option:
    XIP           : enable
    INT LF OSC    : enable
    SIP flash     : enable

mac address:
    efuse         : 80:74:84:05:bb:f9
    in use        : cc:6e:48:3e:0d:01
====================================================================

FDCM Flash Test 
Wifi Test Start

console init success
fdcm open success, flash addr:0x180000, flash size:4096
hiview init success.hello world!
we can use fdcm to save info to flash.
read_buf = 10
write_buf = 11
Power-on times:11

五:遗留问题

(1)Image的max_size为1532K,设置FDCM的起始地址为(15321024)时,本次开机的写入读取未报错,但是数据未保存;FDCM的起始地址改为(15361024),则正常。
(2)如有错误,请回复指正
六:参考
(1)https://harmonyos.51cto.com/posts/8225
(2)《XR806_FDCM中间件_开发指南》
(3)《XR806_Flash布局方案_开发指南》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智算中心“火”了?引领算力发展新潮流

去年大模型的空前发展&#xff0c;人工智能也终于迎来了属于自己的“文艺复兴”&#xff0c;众多的模型相继发布&#xff0c;继而催生了整个行业对于智能算力需求的激增。 市场需求与技术驱动仿佛现实世界的左右脚&#xff0c;催动着世界文明的齿轮向前滚动。在全球经济角逐日…

django中的cookie与session

获取cookie request.COOKIE.GET 使用cookie response.set-cookie views.py from django.http import HttpResponse from django.shortcuts import render# Create your views here. def cookie_test(request):r HttpResponse("hello world")r.set_cookie(lan, py…

AQ6360 横河 光谱分析仪精华帖,收藏保存

AQ6360是一款由日本横河&#xff08;YOKOGAWA&#xff09;生产的光谱分析仪&#xff0c;其主要技术参数包括波长范围、波长精度和波长线性度等。AQ6360的波长范围为1200~1650nm &#xff0c;具有较高的波长精度&#xff0c;在1520~1580nm范围内为0.02nm&#xff0c;在1580~1620…

Colab/PyTorch - 001 PyTorch Basics

Colab/PyTorch - 001 PyTorch Basics 1. 源由2. PyTorch库概览3. 处理过程2.1 数据加载与处理2.2 构建神经网络2.3 模型推断2.4 兼容性 3. 张量介绍3.1 构建张量3.2 访问张量元素3.3 张量元素类型3.4 张量转换&#xff08;NumPy Array&#xff09;3.5 张量运算3.6 CPU v/s GPU …

从0开始学习python(六)

目录 前言 1、循环结构 1.1 遍历循环结构for 1.2 无限循环结构while 总结 前言 上一篇文章我们讲到了python的顺序结构和分支结构。这一章继续往下讲。 1、循环结构 在python中&#xff0c;循环结构分为两类&#xff0c;一类是遍历循环结构for&#xff0c;一类是无限循环结…

【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用

背景 在开发 Web 应用的过程中&#xff0c;作为开发人员&#xff0c;为了确认接口的性能能够达到要求&#xff0c;我们往往需要一个接口压测工具&#xff0c;帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中&#xff0c;我们通常会用 Postman 等图形化…

气死!又被数据骗了!

做数据分析的人做的久了&#xff0c;就会自然而然产生一种想法&#xff0c;认为数据展示出来的东西一定是正确的。毕竟如果连我们自己都质疑数据分析的权威性和说服力&#xff0c;那我们数据分析人的工作不就成了白费功夫了嘛。 一开始&#xff0c;我也认为这是一条不可撼动的…

JVM认识之垃圾收集算法

一、标记-清除算法 1、定义 标记-清除算法是最基础的垃圾收集算法。它分为标记和清除两个阶段。先标记出所有需要回收的对象&#xff08;即垃圾&#xff09;&#xff0c;在标记完成后再统一回收所有垃圾对象。 2、优点和缺点 优点&#xff1a;实现简单缺点&#xff1a; 可能…

C++类和对象详解(一)

目录 面向过程和面向对象初步认识类的引入类的定义类的两种定义方式声明和定义全部放在类体中 声名定义分离 类的作用域成员变量命名规则建议访问限定符 类的封装类的实例化类对象模型类的对象大小的计算扩展 结构体内存对齐规则 感谢各位大佬对我的支持,如果我的文章对你有用,…

Linux系统一步一脚印式学习

Linux操作系统具有许多特点和优势。首先&#xff0c;它是开放源代码的&#xff0c;也就意味着任何人都可以对源代码进行查看和修改。其次&#xff0c;可以同时支持多个用户且可以同时执行多个任务&#xff0c;此外&#xff0c;Linux操作系统也非常稳定和安全。相对于其他操作系…

MyBatis认识

一、定义 MyBatis是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java O…

关于zabbix简介及zabbix服务端的部署

文章目录 一、zabbix概念1、zabbix简介2、zabbix主要特点3、zabbix运行机制4、zabbix应用场景5、zabbix监控原理6、zabbix的子程序7、zabbix监控的架构模式7.1 server-client架构7.2 server-proxy-client架构7.3 master-node-client 二、部署zabbix1、服务器配置2、服务器环境3…

ruoyi-nbcio 基于flowable规则的多重并发网关的任意跳转

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

认识下MapReduce

&#x1f50d; 什么是MapReduce&#xff1f; MapReduce是一种分布式计算模型&#xff0c;最初由Google提出&#xff0c;用于处理大规模数据集的并行计算。它将数据处理任务分解成独立的Map和Reduce两个阶段&#xff0c;以实现分布式计算和并行化处理。Map阶段负责将输入数据映…

自然语言处理(NLP)技术有哪些运用?

目录 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 二、Python进行文本的情感分析 1、NLTK库: 2、TextBlob库: 三、错误排除 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 自然语言处理&#xff08;NLP&#xff09…

DAY 3

1. #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->resize(540,415);this->setFixedSize(540,415);//窗口标题this->setWindowTitle("盗版QQ");//窗口图标this->setWindowIcon(QIcon("E:\\qq\\pictrue\\pi…

520情人节送什么礼物?五款好物分享,情侣必看!

在浪漫的520情人节&#xff0c;为心爱的人挑选一份特别的礼物是每对情侣表达爱意的重要方式。市场上琳琅满目的选择让人眼花缭乱&#xff0c;究竟什么样的礼物能触动TA的心弦&#xff1f;本篇分享将为您精选五款既实用又充满情意的好物&#xff0c;无论是甜蜜的开始还是长久的陪…

linux上go项目打包与部署

1.第一步把项目打包 1.确保本地goland的操作系统为linux go env找到GOOS如果为window就修改为Linux 修改命令为 go env -w GOOSlinux2.打包 在项目根目录下输入 go build main.go然后项目根目录下会出现一个mian的二进制文件 3.上传包 将 main 程序包放到服务的目录下&…

图像质量评价方法简介与Python实现

图像质量评价方法简介与Python实现 在图像处理和计算机视觉领域&#xff0c;评价图像质量的准确性是一项重要任务。评价图像质量的方法可以分为主观评价和客观评价两种。主观评价是通过人类观察者进行评价&#xff0c;而客观评价则是通过计算机算法来评价。本文将介绍图像质量…

PMP课程知识点很多,无法入手,该如何学习?

回顾整个学习过程&#xff0c;我花费了不少时间&#xff0c;但也学到了系统的项目管理知识&#xff0c;考试结果也让我感到满意。在学习过程中&#xff0c;我认为以下几点非常重要&#xff1a; 1、需要对课本进行整体阅读&#xff0c;以便对内容有一个整体印象&#xff1b; 2…