【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

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
1)《 CC2541之SNV 》: http://blog.csdn.net/feilusia/article/details/50190859
2)《SWRU393_CC2640_BLE_Software_Developer's_Guide》(第3.10.4章节):C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Documents(协议栈路径)

2、在进行本文步骤前,请先 实现以下博文:

暂无


五、基础知识

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个ID1000/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



4)在IAR设置中添加驱动源文件路径
$PROJ_DIR$/../../../Source/Application/GUA  

2、应用层调用

1)添加头文件(simpleBLEperipheral.c中)

#include "GUA_SNV.h" 

2)定义一个数据缓存区(simpleBLEPeripheral.c中)

//数据缓冲区 
static uint8_t gbGUA_Data[256] = {0}; 

3) 定义一个SNV的测试ID(simpleBLEPeripheral.c中)
//SNV使用宏       
#define GUA_SNV_TEST_ID         0x81  

4)添加测试代码 (simpleBLEPeripheral.c的SimpleBLEPeripheral_Init函数末尾)

//GUA
  
  uint8_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数据擦除。


因此,实验成功。




### 回答1: BLE-CC254x是一种蓝牙低功耗(BLE)芯片,在物联网(IoT)和智能家居等领域应用广泛。BLE-CC254x安装包是为了让开发者可以更方便地使用这种芯片并进行软件开发而设计的。 BLE-CC254x安装包通常包含了一些必要的软件工具、驱动程序、开发文档以及一些示例代码等,这些都能够帮助开发者更快速地上手和进行开发。 在安装BLE-CC254x安装包之前,首先需要确定自己的电脑系统是否和该安装包兼容,并且需要按照安装包中的说明进行操作。安装完成后,开发者就可以开始使用BLE-CC254x芯片进行软件开发了。 需要注意的是,虽然BLE-CC254x安装包提供了很多便利,但如果开发者想要充分发挥出BLE-CC254x芯片的性能优势,还需要进行深入的学习和研究,以掌握相关的知识和技能。 ### 回答2: BLE-CC254x是一款蓝牙低能耗芯片,安装包则是指针对该芯片开发的软件安装包。 BLE-CC254x安装包主要是由一些驱动程序、固件升级文件、应用程序等组成,可以协助用户完成对该芯片的控制以及使用。安装包可以用于开发BLE相关的应用程序,支持不同的操作系统,如Windows、Linux等。 使用BLE-CC254x安装包,用户不仅可以轻松地配置芯片工作模式和参数,还能够进行调试和测试,以保证应用程序的正确运行。安装包提供了丰富的API和例程,使开发者能够快速上手开发,同时还支持多种开发环境,如Keil、IAR等。 总的来说,BLE-CC254x安装包是一款能够提高开发效率和开发质量的工具,它为开发者提供了方便、快捷的开发环境和丰富的开发资源。如果您正在开发BLE相关的应用程序,使用BLE-CC254x安装包一定会为您的工作带来很大的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值