OpenHarmony Neptune开发板FLASH操作 记录开机次数 原创
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的FLASH接口 记录开机次数
1、环境准备
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git
2、材料准备
1、Neptune HarmonyOS物联网 IOT模组
3、相关基础知识介绍
openHarmony IoT硬件子系统提供了一些外设相关的接口,目录位于:
base/iot_hardware/peripheral/interfaces/kits
FLASH相关接口,接口头文件为iot_flash.h,其中FLASH写入数据API:
unsigned int IoTFlashWrite(unsigned int flashOffset, unsigned int size,const unsigned char *ramData, unsigned char doErase);
接口参数介绍:
flashOffset:
写入数据的闪存的地址
size:
写入的数据的长度
ramData
指向用于将数据写入的RAM的指针
doErase:
指定是否自动擦除现有数据(此参数与HI3861有关与Neptune无关,可写入随意数字)
其中FLASH读取数据API
unsigned int IoTFlashRead(unsigned int flashOffset, unsigned int size, unsigned char *ramData);
接口参数介绍:
flashOffset:
读取数据的闪存的地址
size:
读取的数据的长度
ramData:
指向用于将数据读取的RAM的指针
4、W800 FLASH区说明
参考官方文档《WM_W800_寄存器手册_V2.1》,W800 的地址空间部分分布图如下:
W800 flash在系统中地址从 0x0800 0000 开始,可以直接对该地址空间进行读操作(W800 flash 为2M)。
flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失。
参考官方文档《WM_W800_QFLASH布局说明_V1.0》W800 的FLASH分布情况:
从图中可以看出内部FLASH的区域划分,至于本次写入FLASH的区域我选择User Area(用户参数区)来存放数据。
6.编写代码
有了以上知识,我们就可以编写代码了,关键代码如下:
#define IoT_FLASH 1
#define FLASH_ADDR 0x1F0303 //0x800 0000 +0x1F0303(这是偏移地址)
#define FLASH_BUF_SIZE 1024
static void Flash_Demo_Entry(void)
{
uint8_t write_buf[FLASH_BUF_SIZE];
uint8_t read_buf[FLASH_BUF_SIZE];
IoTFlashRead(FLASH_ADDR,FLASH_BUF_SIZE,read_buf);
if(strlen(read_buf)==0)
{
sprintf(write_buf,"%d",0);
IoTFlashWrite(FLASH_ADDR,sizeof(write_buf),write_buf,IoT_FLASH);
}
else
{
sprintf(write_buf,"%d",atoi(read_buf)+1);
IoTFlashWrite(FLASH_ADDR,sizeof(write_buf),write_buf,IoT_FLASH);
}
osDelay(10);
IoTFlashRead(FLASH_ADDR,FLASH_BUF_SIZE,read_buf);
osDelay(20);
printf("Power-on times:%s",read_buf);
}
7、编译、烧录,并测试最后的完成效果。
按RST键可看到开机次数增加。
简洁明了,厉害!