【BLE-CC2640】CC2640之SNV
本篇博文最后修改时间:2017年06月02日,06:40。
一、简介
本文以SimpleBLEPeripheral工程为例,介绍如何使用SNV。
二、实验平台
协议栈版本:ble_cc26xx_2_01_00_44423
编译软件:IAR Embedded Workbench for ARM Version 7.40
硬件平台:CC26xxDK开发板
仿真器:XDS100V3(香瓜)
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜BLE之Android群:541462902
香瓜单片机之职场交流群:450154342
暂无
五、基础知识
1、CC2640的SNV是怎么样的?
答:
1)总大小
两页,共4K(协议栈已使用一部分)。
2)可用SNV的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
0x80~0x8F都可以用(包含0x80、0x8F),每个ID号最多一次可写入252字节。
注:实际可以写几个ID取决于所剩余SNV空间,并不是说可以把所有ID号都写满252字节。
3)工程中可选的SNV大小
可在IAR的预编译处写入三种宏:
①OSAL_SNV=0:0个可写SNV页。工程中不使用SNV,由于绑定信息时需要SNV,该操作将导致无法使用绑定功能。
②OSAL_SNV=1:1个可写SNV页,共2K。
③OSAL_SNV=2(默认):2个可写SNV页,共4K。
2、多次“仿真、退出仿真、仿真”的操作,是否会把SNV擦除?
答:实测不会。
注:CC2541使用仿真时会擦除SNV。
3、如果我想写1K字节到SNV,怎么写?
答:可以每个ID写252字节,一共需要4个ID(1000/252=3.96)。
4、为什么有些工程使用不了SNV(比如组网的例程)?
答:因为组网例程所需flash较大,因此该工程的SNV部分被充分利用在了组网部分。
可以看工程的预编译中包含了“OSAL_SNV=0”。
六、实验步骤
1、编写并添加自定义的SNV驱动
1)写一个驱动GUA_SNV.c(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)
//******************************************************************************
//name: GUA_SNV.c
//introduce: SNV驱动
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2017.02.26
//******************************************************************************
#include "GUA_SNV.h"
#include "osal_snv.h"//******************************************************************************
//name: GUA_SNV_Control
//introduce: SNV的读写操作函数
//parameter: nGUA_WriteReadFlag:GUA_SNV_READ or GUA_SNV_WRITE
// npGUA_Data:数据首地址
// nGUA_Len:数据长度
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2017.02.26
//******************************************************************************
GUA_U8 GUA_SNV_Control(GUA_U8 nGUA_SNV_ID, GUA_U8 nGUA_WriteReadFlag, GUA_U8 *npGUA_Data, GUA_U8 nGUA_Len)
{ //读数据 if(nGUA_WriteReadFlag == GUA_SNV_READ) { return osal_snv_read(nGUA_SNV_ID, nGUA_Len, npGUA_Data); } //写数据 else { return osal_snv_write(nGUA_SNV_ID, nGUA_Len, npGUA_Data); }
}
2)写一个驱动头文件GUA_SNV.h(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)
//******************************************************************************
//name: GUA_SNV.c
//introduce: SNV驱动头文件
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2017.02.26
//******************************************************************************
#ifndef _GUA_SNV_H_
#define _GUA_SNV_H_ /*********************宏定义************************/
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif #ifndef GUA_8
typedef signed char GUA_8;
#endif #ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif #ifndef GUA_16
typedef signed short GUA_16;
#endif #ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif #ifndef GUA_32
typedef signed long GUA_32;
#endif #ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif #ifndef GUA_64
typedef signed long long GUA_64;
#endif //SNV使用宏
#define GUA_SNV_READ 0x00
#define GUA_SNV_WRITE 0x01 /*********************外部函数************************/
GUA_U8 GUA_SNV_Control(GUA_U8 nGUA_SNV_ID, GUA_U8 nGUA_WriteReadFlag, GUA_U8 *npGUA_Data, GUA_U8 nGUA_Len);#endif
3)工程中添加GUA_SNV.c
$PROJ_DIR$/../../../Source/Application/GUA
2、应用层调用
1)添加头文件(simpleBLEperipheral.c中)
#include "GUA_SNV.h"
2)定义一个数据缓存区(simpleBLEPeripheral.c中)
//数据缓冲区
static uint8_t gbGUA_Data[256] = {0};
//SNV使用宏
#define GUA_SNV_TEST_ID 0x81
4)添加测试代码(simpleBLEPeripheral.c的SimpleBLEPeripheral_Init函数末尾)
//GUAuint8_t nGUA_Ret = 0;//读nGUA_Ret = GUA_SNV_Control(GUA_SNV_TEST_ID, GUA_SNV_READ, gbGUA_Data, 252);if(nGUA_Ret == NV_OPER_FAILED){//设置缓冲区数值memset(gbGUA_Data, 0x38, sizeof(gbGUA_Data));//出厂设置nGUA_Ret = GUA_SNV_Control(GUA_SNV_TEST_ID, GUA_SNV_WRITE, gbGUA_Data, 252);}//写memset(gbGUA_Data, 0x55, sizeof(gbGUA_Data));nGUA_Ret = GUA_SNV_Control(GUA_SNV_TEST_ID, GUA_SNV_WRITE, gbGUA_Data, 252); //读memset(gbGUA_Data, 0x00, sizeof(gbGUA_Data)); nGUA_Ret = GUA_SNV_Control(GUA_SNV_TEST_ID, GUA_SNV_READ, gbGUA_Data, 252); //GUA
暂无。
八、实验结果
rebuild all,设置断点在测试代码处,仿真并全速运行。
测试可发现如下现象:
1、当该ID之前未写过数据时,读取的返回值为“NV_OPER_FAILED”。
2、一次最多只能对一个ID写252个字节,写多时虽然返回值仍然是“SUCCESS”,但实测读出来的数据是错的。
3、再次仿真时不会将上次写入的SNV数据擦除。
因此,实验成功。
【BLE-CC2640】CC2640之SNV相关推荐
- 【BLE】CC2541之SNV
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍SNV的使用. 二.实验平台 协议栈版本:BLE-CC254x-1.4. ...
- CC2640 SNV
转自:http://blog.csdn.net/feilusia/article/details/57374684 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何使用SNV. ...
- 【BLE】CC2541之Large OAD
本篇博文最后修改时间:2017年05月19日,03:33. 一.简介 本篇以SimpleBLEPeripheral工程为例,介绍如何进行Large OAD升级. 二.实验平台 协议栈版本:BLE-CC ...
- 【BLE】CC2541之SBL
本篇博文最后修改时间:2016年12月23日,13:53. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何使用串口方式下载. 二.实验平台 协议栈版本:BLE-CC254x- ...
- BLE】CC2541之通过RSSI测距
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文介绍如何在SimpleBLEPeripheral工程中,通过RSSI粗略测距. 二.实验平台 协议栈版本:BLE-CC254x ...
- 【BLE】CC2541与CC2540的区别
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文介绍CC2541与CC2540的区别. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8.20 ...
- 【BLE】CC2541之OAD
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何进行OAD升级. 二.实验平台 协议栈版本:BLE-CC254x-1 ...
- 【BLE】CC2541之动态广播加密数据
本篇博文最后修改时间:2017年03月30日,16:33. 一.简介 本文以SimpleBLEPeripheral为例,每5S来动态更新广播一次16字节的加密数据,其中有效数据为1个字节的计数值. 二 ...
- 【BLE】CC2541之通信协议
本篇博文最后修改时间:2016年12月12日,10:51. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何在一个可读.可写.可通知.20字节长的特征值char6基础上,添加一 ...
最新文章
- 东北农业大学农学院程晓非教授荣获植物病毒学国家“优青”资助
- 使用log4jdbc记录SQL信息
- Java初学者习题20道(转)
- 贪心/动态规划 - 买卖股票的最佳时机含手续费
- 代理模式给我们带来的便利
- java事件监听器无效_Java的事件监听器学习心得
- 利用递归求某数的阶乘——C/C++
- TypeError: cannot convert the series to <class ‘float‘>问题解决
- 光信噪比 (OSNR) 的概念及其重要性
- 计算机教师专业知识,小学信息技术教师专业知识考试复习题及答案【精选】.doc...
- restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
- Python天空颜色渐变
- JAVA 实现AES加密解密
- 程序员突然倒地!中软回应称系低血糖引发
- OpenWrt ADSL单线多拨,负载均衡(仅供参考)
- 爪哇国新游记之八----读写文件及数组排序
- 微信小程序全局音频设置,手机上播放不了音频的问题解决方案,微信小程序音频无法播放问题.
- pfamscan 的使用_基础工具-HMMER用法
- 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法
- Pytorch分布式训练/多卡训练(二) —— Data Parallel并行(DDP)(2.2)(代码示例)(BN同步主卡保存梯度累加多卡测试inference随机种子seed)
热门文章
- 什么是Apache,Apache和PHP的关系
- NR, 8个问题全面了解5G关键技术Massive MIMO
- python监控机票价格_喜欢旅行又怕吃土?让Python来爬取最便宜机票吧!
- 某34岁程序员求助:从美团L7跳到阿里P7,涨薪30%,去不去?
- python打字机效果_零基础手把手教你用Python做一个怀旧打字机
- CS224n课程Assignment3参考答案
- dvd转wmv及wmv转flv参数(3M/1min)
- ffmpeg 转换flv压缩大小_ffmpeg转换参数和对几种视频格式的转换分析
- 工程机械设备电子监测仪软件测试研究
- Linux命令lsscsi详解