设备地址

news/2024/9/20 3:57:27/文章来源:https://www.cnblogs.com/maodoudou/p/18418960

设备地址

BLE的设备地址可以使用公共地址(Public Device Adress)或者随机地址(Random Device Address),一个BLE至少使用一种地址类型,当然也可以同时使用两种地址类型。
公共地址和随机地址一样,都是48位(6字节),BLE设备地址关系如下:

  • 公共地址:从IEEE申请(购买),IEEE保证地址的唯一性;
  • 随机静态地址:自己定义,上电初始化完成后不能修改;
  • 随机不可解析私有地址:定时更新地址,蓝牙核心规范建议15分钟更新一次;
  • 随机可解析私有地址:通信双方使用共享的身份解析密钥(IRK:Indentity Resolving Key),生成和解析可解析私有地址。只有一台设备拥有另一台设备的IRK时,才能跟踪该广播设备的活动。

1. 公共地址

公共地址包含2部分:

公共地址能够明确的指示出设备,同时具有唯一性,但安全度不够,不法分子可以通过计数手段跟踪该唯一的公共地址,即可以跟踪到这设备的使用者。
为加强隐私,蓝牙核心规范中提供另外一种地址:随机地址,随机地址是随机产生的,不是固定分配的,随机地址又分为多种类型,以适用不同应用场景对隐私的要求。

2. 随机地址

2.1 随机静态地址
  1. 随机静态地址的定义;随机静态地址是随机生成的48位地址,随即地址必须符合以下要求:
  • 静态地址的最高2位有效位必须是1。
  • 静态地址最高2位有效位之外的其余部分不能全为0。
  • 静态地址最高2位有效位之外的其余部分不能全为1。
  • 一个上电周期内不变。
    静态地址的格式如下图,共48位,最高2位是固定的,必须是1。
  1. 代码中使用随机静态地址的方法
    程序中使用随机静态地址时,可以每次上电时重新设置随机地址,但是初始化完成后,不能修改地址。设置随机静态地址和读取随机静态地址的流程如下图所示。
    从上图中我们可以看到,读写随机静态地址需要用到地址结构体ble_gap_addr_t和两个
    API函数。其中地址结构体ble_gap_addr_t的声明如下。读和写的时候,都需要定义地址结
    构体,读的时候用来保存读取的设备地址和设备地址类型,写的时候用来将待写入的地址传
    递给API函数sd_ble_gap_addr_set().

    读写设备地址使用2个api函数,sd_ble_gap_addr_set() 和 sd_ble_gap_addr_get():


获取广播者使用的蓝牙地址使用该函数sd_ble_gap_adv_addr_get():

  • 写设备地址示例:
    定义地址结构体my_addr,然后设置需要写入的设备地址,并将地址类型设置位随机静态地址(BLE_GAP_ADDR_TYPE_RANDOM_STATIC),注意静态地址最高2位必须都是1.下面代码中使用的静态地址如下所示:

  • 都设备地址示例:
    定义地址结构体my_addr,用来保存读取的设备地址和类型,然后调用API函数sd_ble_gap_addr_get()获取设备地址,读取成功后,设备地址会保存到my_addr.

  • 读取广播PDU中设备地址示例:
    定义地址结构体my_addr,用来保存读取的设备地址和类型,然后调用API函数sd_ble_gap_adv_addr_get()获取设备地址,读取成功后,设备地址会保存到my_addr.

  1. 读取设备出厂时设置的地址:
    Nordic的BLE例子中都没有设置设备地址,原因是芯片出厂时已经设置了48位的地址和地址类型(地址类型为随机静态地址),应用程序可从下面2个寄存器读取设备地址及类型:


    SDK中的BLE例子使用的设备地址是初始化时协议栈从DEVICEADDR[n]寄存器中读
    出来的,DEVICEADDR[n]寄存器中存储的是随机静态地址,所以BLE例子中使用的都是
    随机静态地址。
    由此可见,如果应用程序不设置设备地址的话,设备就会使用协议栈默认从芯片读取的
    设备地址,地址类型为随机静态地址。
2.2 不可解析私有地址
  1. 定义如下:
  • 最高2为必须为0;
  • 其余位不能全0;
  • 也不能全1;
  • 不能和公共地址一样;

不可解析地址,周期性的改变地址,并且是完全随机的,很难被跟踪,安全性高,但是使用不多。
2. 代码使用:
ble_gap_privacy+params_t定义结构体变量,在使用sd_ble_gap_privacy_set()设置

2.3 可解析私有地址

定义:

  • 最高两位必须是0和1;
  • 其余不能全为0;
  • 其余不能全为1;
  • 不能和公共地址一样。

代码只用和不可解析私有地址类似。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扫码详见阳子公众号

https://mp.weixin.qq.com/mp/qrcode?scene=10000004&size=102&__biz=MzkwNzc0MjQ1MA==&mid=2247484006&idx=1&sn=43425e98c08a3887b090c927d89cbe40&send_time= 或直接扫码:

使用Addressables+SpriteAtlas打包产生冗余

1)使用Addressables+SpriteAtlas打包产生冗余2)使用SBP打AssetBundle脚本引用丢失3)Unity构建后处理(IPostprocessBuildWithReport等接口)抛出异常后,构建不会停止4)Unity 2022.3.0版本使用Occlusion,PC运行良好但是安卓手机无效这是第400篇UWA技术知识分享的推送,精选…

如何编制一份数据分析报表?这篇文章告诉你重点

在当今数据驱动的时代,数据分析报表成为了企业决策中不可或缺的工具。它不仅可以帮助我们清晰地展现数据,还能揭示数据背后的趋势与问题,为管理者提供有力的支持。那么,如何编制一份高效、准确的数据分析报表呢?本文将从数据分析报表的分类、制作原则以及具体步骤来为你详…

centos7下安装Python3.7

centos7默认安装的是python2.7,然而python2基本上要淘汰了,所以有必要安装最新的python3 python,g++这些工具一般安装在/usr/bin目录里 通过指令ll python*可以看到python指向的是python2.7我们要安装python3,使python指向python3 下面开始具体步骤(参考其他大佬的方法,也…

wpf简单自定义控件

用户控件(User Control)和自定义控件(Custom Control)的区别: UserControl: 将多个WPF控件(例如:TextBox,TextBlock,Button)进行组合成一个可复用的控件组; 由XAML和Code Behind代码组成; 不支持样式/模板重写; CustomControl 自定义控件,扩展自一个已经存在的控件,并…

应用AI技术的销售进化论

该文章聚焦AI技术在销售行业中的实际应用,解读销售人员如何利用先进技术及工具突破传统限制,增强业务能力帮助销售人员保持竞争优势,提升工作效率与业绩。 1、AI如何重塑销售规则 1.1 AI在销售领域的应用:不只是数字游戏 在销售领域,AI技术的引入正在重塑传统的销售模式,…

yum报错

参考这篇文章:https://www.cnblogs.com/kohler21/p/18331060Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not re…

STM32H723+DMA+ADC多通道 问题记录

出现的问题1: ADC当开启扫描模式、DMA开始连续模式的时候,依然只能读出第一个通道的ADC的值,后面通道的AD值不更新。 尝试过将buf 固定在RAM_D3中也没有用。 实际最后问题在于,用STM32CubeMX配置工具生成代码的时候,ADC初始化的函数放在了DMA初始化的前面导致的问题。 出现…

改变您的HTTP服务器的缺省banner

原文链接:https://www.cnblogs.com/zmbhfly/p/10510594.html改变您的HTTP服务器的缺省banner 针对 IIS Asp.net,改变您的HTTP服务器的缺省banner引自:https://www.cnblogs.com/felixnet/p/6344613.html测试可以用,但仅仅是修改的应用程序,http://localhost不起作用 https:…

Paper Reading: Deep forest auto-Encoder for resource-Centric attributes graph embedding

本文设计了一种基于深度森林的embedding 学习方法 GraphDF,该方法可以实现以资源为中心的加权属性图的属性和拓扑信息的嵌入。提出的图预处理器包括基于自注意机制的潜在隐含特征挖掘、基于相似性和模块化相关转换对潜在隐含关系特征的深度一般信息挖掘。使编码器所提取的原始…

Hadoop(十五)项目考核 WordCount案例

一、需求分析需求:在给定的文本文件中统计输出每一个单词出现的总次数 SEVENTEEN.txt文本内容如下:say the name seventeen hello we are seventeen nice to meet you you very nice按照MapReduce编程规范,分别编写Mapper,Reducer,Driver1、Mapper (1)将MapTask传过来的…

和之大题解

1111... = 2^n-1长度为n的都是1的二进制数 = 2的n次方-1思路:对于每个数只有选或不选(1或0)的二进制,剩余见代码点击查看代码 #include<bits/stdc++.h> using namespace std; long long f[20]; int main(){freopen("202409C.in","r",stdin);freo…