BLE中 sign countersign是干啥的

本篇博文最后修改时间:2017年01月06日11:06。

1、在进行本文步骤前请先阅读以下博文:

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

答:TI的BLE协议栈使用到大量的回调函数函数名末尾带“CB”的通常都是回调函数,它是指“call back”在状态有改变时会调用此函数。

1、定义一个“成员为函数指针”的结构体


2、写一个回调函數并完成注册

注:实际上此时simpleBLECentralEventCB在第二步结束时,即可直接通过操作结构体来调用这个回调函数了

数据手册上说有2048个字节大小那麼osal 的 NV ID号最大可以定义多大?一条NV ID可以存几个字节

  • 恩,这个我找到了这里边定义的每个NV ID 都可以直接写入255个字节吗?

    但是之前我从一位代悝商技术支持那获知每个NV ID只能存16个字节的数据。

    还有就是假设现在定义了两个NV ID假如第一个NV ID没写满255个字节,那么第二个NV ID它是另取一行吗即第一个NV ID 和第二个NV ID之间是不是有空闲的可写入的存储空间?

  • 我没测过看代码对长度的定义是unsigned char,因此认为可以写255,你可以实测一下忘了┅点需要4字节对齐,所以最大应该是252

  • 注意下面的表述也就是说2K,1K存数据另1K是做备份。

  • 恩也就是说另外1K是不能被使用的咯。好的非瑺感谢!这个信息非常重要!

  • 怎样把存储空间扩大到10k呢,求赐教

本篇博文最后修改时间:2017年01月06日11:06。

1、在进行本文步骤前请先阅读以下博文:

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

NV就是从内部flash划分出来的一块专用于存储数据的flash

NV就是Non-Volatile (非易挥发),香瓜在文档中看到的都是NV很长一段时间困惑为什么大家都叫它SNV。

2541的协议栈用的是SNV(8位ID)而不是NV(16位ID)。

由这个线索将我心中的各种百度不到的SNV的疑问也都迎刃而解了。

注:详细了解SNV后才发现我低估它了并不像多数SNV资料中写的那么简单,因此本篇增加了大篇幅来解析SNV是怎么一回事

在第8块BANK的末尾分出了一块flash,用于NV

上面这段代码说明NV的起始地址是0x7E800,终止地址是0x7F7FF两个数值之间有4096个字節,也就是4K(注释部分为8192字节,也就是8K)

这个NV大小我们可以根据需要来改变当然NV的flash大了、放代码的flash就小了。

2)在TI的技术论坛看到这么┅句话也印证了上述说法:

3、SNV的接口资料哪里有

4、使用SNV有什么需要注意的?

在OSAL API.pdf的文档中提到了几个注意点:

1)写SNV会耗时百毫秒级尽可能在写的时候关闭中断。

2)尽可能地少写SNV因为它耗时耗电。

3)如果SNV的存储结构改变或者协议栈版本升级了,有必要重新擦除和初始化SNV內存数据否则读写时会出错。

4)尽量不要把SNV的代码放到中断函数里

香瓜也补充一个很重要的注意点:

IAR的debug仿真时默认是全片擦除,因此會擦除flash中的code、NV

所以经常有群友来回仿真调试时发现自己写的掉电保存数据没了,不知所以然问题就出在这里。


(具体我也不知道该怎麼填大家自行百度或实验吧)

5、SNV的哪些ID是可以用的?

在bcomdef.h中已经定义了一些我们不能用的SNV的ID:

实际上上面的ID所在的区域本来就不是我们該使用的,我们适合用的ID是在0x80~0xFE:


注:这张表要看OSAL API.pdf的第十一章的SNV别看错到第十章的NV。

//未保存过设置出厂数据

1、当写入252字节到SNV、并读出252字節SNV时,读写正常


2、当写入253字节到SNV、并读出253字节SNV时,读写异常

实验结果如上,一次性写入最多252字节当需要写大于252字节时则需要分包,依次写到不同ID中

我要回帖

更多关于 countersign 的文章

 

随机推荐