本文主要是介绍CC2650 SensortTag之SNV操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SNV是什么?
NV就是从内部flash划分出来的一块专用于存储数据的flash。
NV就是Non-Volatile (非易挥发),
CC2650的协议栈用的是SNV(8位ID),而不是NV(16位ID)。
TI在协议栈中提供了两个标准函数用于写入和读取信息的函数,分别是:
uint8 osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf)
uint8 osal_snv_read( osalSnvId_t id, osalSnvLen_t len, void *pBuf)
两个函数的返回值皆为两种情况 SUCCESS 和 NV_OPER_FAILED
这两个宏定义在头文件 comdef.h 中定义
/*** Generic Status Return Values ***/
#define SUCCESS 0x00
#define FAILURE 0x01
#define INVALIDPARAMETER 0x02
#define INVALID_TASK 0x03
#define MSG_BUFFER_NOT_AVAIL 0x04
#define INVALID_MSG_POINTER 0x05
#define INVALID_EVENT_ID 0x06
#define INVALID_INTERRUPT_ID 0x07
#define NO_TIMER_AVAIL 0x08
#define NV_ITEM_UNINIT 0x09
#define NV_OPER_FAILED 0x0A
#define INVALID_MEM_SIZE 0x0B
#define NV_BAD_ITEM_LEN 0x0C
在头文件 bcomdef.h 中定义了用户可以使用的ID范围
// Customer NV Items - Range 0x80 - 0x8F - This must match the number of Bonding entries
#define BLE_NVID_CUST_START 0x80 //!< Start of the Customer's NV IDs
#define BLE_NVID_CUST_END 0x8F //!< End of the Customer's NV IDs
使用例子
1)添加头文件(例 simple_peripheral.c 中)
#include "snv_flash.h"
2)定义一个数据缓存区(例 simple_peripheral.c 中)
// SNV test
static uint8_t Write_data[4] = {0x88,0x55,0x55,0x88};
static uint8_t Read_data[4];
3)添加读写数据代码(simple_peripheral.c 的 SimpleBLEPeripheral_init 函数末尾中)
//SNV test Jan 11th, 2023osal_snv_write(0x82,sizeof(Write_data),Write_data);osal_snv_read(0x82,sizeof(Read_data),Read_data);
操作结果
在读写函数前插入断点,然后进入debug模式,以下运行结果。
snv写入:
snv读取,snv中的信息读取成功
参考文章:
(1)https://blog.csdn.net/farsight_2098/article/details/86626417
(2)https://blog.csdn.net/feilusia/article/details/52223339
这篇关于CC2650 SensortTag之SNV操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!