主题中讨论的其他器件:SysConfig、 UNIFLASH
工具与软件:
HII 使用 API 在 NVS 中写入一些数据
NVS_Handle nvsRegion;
NVS_Attrs regionAttrs;
NVS_Params nvsParams;
uint_fast16_t 状态;
uint8_t buffer[16];
uint8_t buffer2[1];
extern uint8_t aesKey[16];
extern uint8_t nvmExecutionFlagarray[1];
extern uint8_t nvmExecutionFlag[1];
uint8标志;
//初始化 NVM
void NVM_INIT (){
//初始化 NVS 驱动程序
NVS_INIT();
//初始化 NVS 参数
NVS_PARAMS_INIT (&N);
//打开 NVS 区域
nvsRegion = NVS_OPEN (CONFIG_NVS_0、&nvsParams);
if (nvsRegion){
//如果无法打开区域、则处理错误
//记录或实施错误处理
返回;
}
//获取 NVS 区域的属性
NVS_getAttrs(nvsRegion,®ionAttrs);
//擦除 NVS 区域的第一个扇区
// status = NVS_ERASE (nvsRegion、0、regionAttrs.sectorSize);
如果(status!= NVS_STATUS_SUCCESS){
//处理擦除失败
//记录或实施错误处理
返回;
}
}
//将 AES 密钥写入 NVM
void NVM_WRITE_AES_KEY ()
{
//将 AES 密钥写入 NVS
STATUS = NVS_WRITE (nvsRegion、0x00、&aesKey、sizeof (aesKey)、NVS_WRITE_POST_VERIFY);
如果(status!= NVS_STATUS_SUCCESS){
//处理写入失败
//记录或实施错误处理
返回;
}
NVS_Close (nvsRegion);
}
//从 NVM 读取 AES 密钥
void NVM_READ_AES_KEY ()
{
//从 NVS 中读取 AES 密钥
STATUS = NVS_READ (nvsRegion、0x00、buffer、sizeof (buffer));
如果(status!= NVS_STATUS_SUCCESS){
//处理读取失败
//记录或实施错误处理
返回;
}
NVS_Close (nvsRegion);
}
//将执行标志写入 NVM
void NVM_WRITE_EXECTION_FLAG()
{
//将执行标志写入 NVS
STATUS = NVS_WRITE (nvsRegion、0x16、&nvmExecutionFlagarray、sizeof (nvmExecutionFlagarray)、NVS_WRITE_POST_VERIFY);
如果(status!= NVS_STATUS_SUCCESS){
//处理写入失败
//记录或实施错误处理
返回;
}
flag=1;
NVS_Close (nvsRegion);
}
//
////从 NVM 读取执行标志
void NVM_READ_EXECTION_FLAG()
{
//从 NVS 读取执行标志
if (flag)
{
STATUS = NVS_READ (nvsRegion、0x16、buffer2、sizeof (buffer2));
}
标志= 0;
if (nvmExecutionFlag[0]== 0xFF)
{
nvmExecutionFlag[0]= 0x00;//将标志设置为0x00
STATUS = NVS_WRITE (nvsRegion、16、nvmExecutionFlag、sizeof (nvmExecutionFlag)、NVS_WRITE_POST_VERIFY);
if (status!= NVS_STATUS_SUCCESS)
{
//处理写入失败
返回;
}
如果(status!= NVS_STATUS_SUCCESS){
//处理读取失败
//记录或实施错误处理
返回;
}
}
NVS_Close (nvsRegion);
}
我已经创建了这个函数写入和读取数据从 NVS 它工作正常,但当电源关闭和再次供电时,它不能读取存储在 NVS 中的数据。
任何建议
我还附加了我完成的 SysConfig 设置。