日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

CC2640 SNV

發布時間:2024/3/26 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CC2640 SNV 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.csdn.net/feilusia/article/details/57374684

一、簡介

本文以SimpleBLEPeripheral工程為例,介紹如何使用SNV


二、實驗平臺

協議棧版本:ble_cc26xx_2_01_00_44423

編譯軟件:IAR Embedded Workbench for ARM Version 7.40

硬件平臺:CC26xxDK開發板

仿真器:XDS100V3(香瓜)

四、實驗前提 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號

[cpp]?view plaincopy
  • //?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”路徑下)

    [cpp]?view plaincopy
  • //******************************************************************************????????????
  • //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”路徑下)

    [cpp]?view plaincopy
  • //******************************************************************************????????????
  • //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設置中添加驅動源文件路徑
    [cpp]?view plaincopy
  • $PROJ_DIR$/../../../Source/Application/GUA????

  • 2、應用層調用

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

    [cpp]?view plaincopy
  • #include?"GUA_SNV.h"???

  • 2)定義一個數據緩存區(simpleBLEPeripheral.c中)

    [cpp]?view plaincopy
  • //數據緩沖區???
  • static?uint8_t?gbGUA_Data[256]?=?{0};???

  • 3)定義一個SNV的測試ID(simpleBLEPeripheral.c中) [cpp]?view plaincopy
  • //SNV使用宏?????????
  • #define?GUA_SNV_TEST_ID?????????0x81????

  • 4)添加測試代碼(simpleBLEPeripheral.c的SimpleBLEPeripheral_Init函數末尾)

    [cpp]?view plaincopy
  • //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數據擦除。


    因此,實驗成功。



    總結

    以上是生活随笔為你收集整理的CC2640 SNV的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。