当前位置: 首页 > 科技观察

HarmonyosHi3861NV操作——如何保存数据到开发板,掉电不丢失

时间:2023-03-12 00:58:15 科技观察

更多内容请访问:Harmonyos.51cto.com/#zz在实际的产品开发过程中,我们肯定需要保存一些数据,断电不丢失。比如很多人在使用我之前写的WiFi配网功能后会遇到一个问题:我配置了WiFi账号密码,但是下次要重新配置网络时,是否可以保存WiFi账号密码?,然后我们就实现这个功能:将数据保存到开发板,掉电不丢失。有两种方式:1、使用KV系统——最简单,推荐使用如何保存数据的资料。直接使用kv系统更简单方便。您无需参考本文中的nv操作。本文中的nv操作仅供大家参考。kv系统可以将数据保存到flash中,只需要两个简单的函数://deletekvvoidDeleteKVCache(constchar*key);//addkvvoidAddKVCache(constchar*key,constchar*value,booleanisNew);//获取kv值intGetValueByCache(constchar*key,char*value,unsignedintmaxLen);//清除kvintClearKVCacheInner(void);例如://将ssid写入kvAddKVCache("ssid",ssid,TRUE);//读出kvGetValueByCache("ssid",ssid,sizeof(ssid));可以看到更简单高效~~推荐大家使用2.NV系统-只有hi3861支持首先我们需要使用hi3861的nv操作,它支持我们自定义一些数据保存到出厂参数分区,其实是写到hi3861的flash里面的。但是,此功能使用起来相当复杂。下面以保存wifi账号密码为例。1、修改mss_nvi_db.xml文件,打开vendor\hisi\hi3861\hi3861\tools\nvtool\xml_file\mss_nvi_db.xml文件,在Factory中添加我们的参数:ID为0x0B。截图的内容是这样的:2。修改nv_factory_struct_def.txt文件,添加一个结构体。修改vendor\hisi\hi3861\hi3861\tools\nvtool\h_file\nv\nv_factory_struct_def.txt,增加结构:typedefstruct{hi_u8ssid[50];hi_u8passwd[50];}wal_cfg_ssid;3.写代码,读写数据。一般来说,需要执行hi_nv_init(0xA000,0x2000,0x1000);进行初始化,但是由于系统在启动时已经进行了初始化,所以我们不需要重复进行初始化。//写入工厂区/*NV值写入*/wal_cfg_ssid_mynv;memset(&nv,0,sizeof(wal_cfg_ssid_my));memcpy_s(&nv.ssid[0],sizeof(wal_cfg_ssid_my),ssid,ssid_len);memcpy_s(&nv.passwd[0],sizeof(wal_cfg_ssid_my),passwd,passwd_len);ret=hi_factory_nv_write(NV_ID,&nv,sizeof(wal_cfg_ssid_my),0);if(ret!=HISI_OK){printf("%x\n",ret);}/*再次读取写入的NV值*/ret=hi_factory_nv_read(NV_ID,&nv,sizeof(wal_cfg_ssid_my),0);if(ret!=HISI_OK){printf("%x\n",ret);}printf("nvread:%d,ssid:[%s]psswd[%s]\n",ret,nv.ssid,nv.passwd);附件我提供wifi配网功能升级版源码,支持保存wifi户口密码。完成以上操作后,我们可以发现可以将wifi账号密码写入nv,数据就可以永久保存了。查看开机打印:开机后可以看到ssid和password正确,成功连接wifi热点。我们再看一下这个nv的一些内容:mss_nvi_db.xml文件记录了所有系统参数的默认值,这个文件其实是分组的:可以看到分为Factory和Modem。NV模块用于管理系统的关键配置信息。NV存储在Flash上,分为以下两个区域:●工厂区Factory:仅在工厂使用。●非出厂区Modem:分为以下2个区域:–Keep区:NV项升级后保留原值–Modem区:NV项升级后被新版本值替换。中每一项的描述如下如下:关于说明如下:另外需要注意的是,工厂区的读写操作和非工厂区的读写操作的API是不一样的。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz