This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2340R5:NVS 写入和读取

Guru**** 2331900 points
Other Parts Discussed in Thread: SYSCONFIG, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1471942/cc2340r5-nvs-write-and-read

器件型号:CC2340R5
主题中讨论的其他器件:SysConfigUNIFLASH

工具与软件:

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,&regionAttrs);

//擦除 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 设置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Amrendra:

    感谢您联系我们! 我会研究这件事,并在明天结束时回复你!

    此致、

    Tarek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Amrendra:

    我认为看看 SDK 中提供的"nvsinternal"示例会很有用、因为这是使用 NVS API 时非常有用的资源。  它实现对 NVS 的读取和写入。  NVSinternal 。  

    另外、如果您想了解关断的多功能性、请查看 SDK 中也提供的"gpioshutdown"示例。 它演示了如何正确关断以及从关断中唤醒(释放锁存器)。  GPIOSHUTDOWN

    希望这对您有所帮助!

    此致、
    Tarek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已解决关机问题。

     对于读写,我已经完成了示例代码,我可以写和读,但问题是,在断电后,他们没有值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Amrendra:

    您能解释一下如何测试吗? 请记住、通过 Code Composer Studio 进行调试会重新刷写电路板、因此、NVS 会被自动擦除。 要检查存储器地址以确保数据仍然存在、您可以下载 uniflash 并使用其存储器浏览器检查特定位置的数据。 根据您提供的 SysConfig 屏幕截图、数据将从地址0x10000开始。  

    此致、
    Tarek