一个ble设备,地址可以分成2大类
  1、Public Device Address(公共设备地址)
    公共设备地址 Public Device Address是48bits的数字,就和电脑mac地址一样,是全球唯一的,一般传统蓝牙用这种地址。
  2、Random Device Address(随机设备地址)
    不是固定分配,而是设备启动后随机分配,Random Device Address(随机设备地址)又可以分成2类
    1)Static Device Address( 静态设备地址)
      最高2bits为“11”,
      剩余46bits是随机数,不能全0或全1
      在一个上电周期保持不变
      下一次上电可以变也可以不变(可以用随机数发生器产生MAC地址)
    2)Private Device Address(私密设备地址),分为2类
      a、Non-resolvable private address(不可解析私密地址)
        最高2bits为“00”
        剩余46bits是随机数,不能全0或全1
        每隔T_GAP周期更新
      b、Resolvable private address(不可解析私密地址)
        高24bits是随机数,最高2bits为“10”
        低24bits是随机数和IRK进过hash运算得到hash值,hash=ah(IRK,prand)
        对端BLE扫描到该类型地址后,用本地IRK和该地址的prand进行ah运算,如果得到值和该类型地址低24bits一致才进行后续操作。
 
总结下就4中类型地址:
  Public Device Address(公共设备地址)
  Static Device Address( 静态设备地址) 11 —nrf52832默认是用这种
  Non-resolvable private address(不可解析私密地址) 00
  Resolvable private address(不可解析私密地址) 10
 
sdk中相关api:
 获得本地mac地址
[out] p_addr
uint32_t sd_ble_gap_address_get(ble_gap_addr_t *p_addr);
 
ble_gap_addr_t 结构体如下
/**@brief Bluetooth Low Energy address. */
typedef struct{ 
//地址类型 
uint8_t addr_type;                    /**< See @ref BLE_GAP_ADDR_TYPES. */ 
//存放地址的数组 6字节 
uint8_t addr[BLE_GAP_ADDR_LEN];       /**< 48-bit address, LSB format. */
} ble_gap_addr_t;
 
[in]addr_cycle_mode :
/**< Set addresses directly, no automatic address cycling. */
BLE_GAP_ADDR_CYCLE_MODE_NONE      0x00 
/**< Automatically generate and update private addresses. */
BLE_GAP_ADDR_CYCLE_MODE_AUTO      0x01
注意当用他设置成静态随机地址Static Device Address时,地址的最高2bits必须为“11”,否则无效
uint32_t sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const *p_addr);
 
下面是把默认地址+1后设置的函数
void mac_set(void)
{ 
  ble_gap_addr_t addr;  //获得地址 
  uint32_t  err_code = sd_ble_gap_address_get(&addr); 
  APP_ERROR_CHECK(err_code); 
  addr.addr[0] += 1; 
  //写地址 
  err_code = sd_ble_gap_address_set(BLE_GAP_ADDR_CYCLE_MODE_NONE, &addr); 
  APP_ERROR_CHECK(err_code);
}
原文链接:https://blog.csdn.net/loosen17/article/details/98184652

NORDIC BLE MAC ADDR的更多相关文章

  1. nrf51822-提高nordic ble数据发送速率

    讲解2点: 为什么 nordic的4.0协议栈中ble只能发送20字节的应用负载数据. 大量数据发送时如何提高发送速率 1:为何上层应用负载每次最多20字节 首先了解 4.0中链路层的包格式如下: P ...

  2. NORDIC BLE升级

    NRF52832 SDK15.3.0 概述: 所谓DFU(Device Firmware Update),就是设备固件升级的意思,而OTA是DFU的一种类型,准确说,OTA的全称应该是OTA DFU, ...

  3. NORDIC ble RSSI

    static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context) { ret_code_t err_code; sw ...

  4. BLE Hacking:使用Ubertooth one扫描嗅探低功耗蓝牙

    0×00 前言 低功耗蓝牙(Low Energy; LE),又视为Bluetooth Smart或蓝牙核心规格4.0版本.其特点具备节能.便于采用,是蓝牙技术专为物联网(Internet of Thi ...

  5. Linux系统下用C语言获取MAC地址

    最近在做一个小程序,需要用到在linux系统里编写C程序从而获取MAC地址,从网上搜了一遍,想总结一下.如果你就只需要单个功能的程序,可以采用方法一,见代码1,一般最好能够封装起来,写成获取MAC地址 ...

  6. 基于TI CC2650的IPv6 over BLE(BLEach) demo

    虽然BLE 5.0协议理论上已经开始支持IPv6了,但是目前市面上还没有可用的实现IPv6通信的BLE产品. 最近在网上看到一个开源的基于contiki系统,在CC2650上实现的IPv6 over ...

  7. nRF52832添加微信硬件接入服务AirSync

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA OS: FreeRTOS 10.0.0 测试APP:AirSyncDebugger  https://iot.w ...

  8. 极路由2(极贰)ROOT并刷了OpenWrt

    绕过官方的ROOT 查了一下root教程, 如果还需要保留保修, 则需要自己想办法回退版本, 下载搜狐插件到sd卡, 找个linux系统修改sd卡上程序的执行权限, 然后才能开启ssh, 具体的方法可 ...

  9. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

随机推荐

  1. Spring Boot使用JDBC方式连接MySQL

    首先去spring官网下载一个名为test的Spring Boot项目模板:https://start.spring.io/ 然后在mysql中的testdb数据库中新建一张名为test_user的表 ...

  2. charles 高级批量请求

    本文参考:charles 高级批量请求 这个我感觉有点鸡肋,真正的批量请求,推荐使用JMter charles 高级批量请求就是下面这种简单的设置的 简单的使用还是可以的; 比如简单的测试下,向某一个 ...

  3. 零基础python之列表的简单介绍

    你点击关注,就分你小鱼干 一.概念:列表,由一系列按特定顺序排列的元素组成. 在 python 中,用 [ ] 方括号来表示列表,并用逗号来分割其中的元素. 二.访问列表因素 列表是有序集合,如要访问 ...

  4. git merge仓

    git merge --no-ff branch 合并指定代码 如果有冲突 git mergetool   可视化解决冲突, qa! 全退出 如果修复失败 git checkout branch -f ...

  5. CentOS系统安装启动tomcat

    我们可以通过xftp工具将tomcat文件上传至CentOS系统指定文件夹中 一.安装tomcat 进入tomcat存放目录解压: tar -zxf apache-tomcat-9.0.2.tar.g ...

  6. kibana发音 logstash发音 ElasticSearch发音 音标 翻译

    kibana [kɪbana] 剋吧那 kei ba na == 扩展 logstash [lɔɡ] [stæ:ʃ] 楼个四die吃 == ElasticSearch [ɪˈlæstɪk] [sɜːt ...

  7. 人机交互技术 Week 1_人机交互概述

    HCI Week 1_Introduction 18-19学年春夏学期选修了计院万华根老师的人机交互技术课程,老师由于知识产权相关原因不能提供课件,故尽可能对课程内容做详尽的课堂笔记以供复习,如有不妥 ...

  8. python学习-26 函数作用域

    举例说明: 1. name = 'john' def foo(): name = 'xiaomming' def bar(): print(name) return bar a=foo() print ...

  9. Python——类和对象(一)

    一.定义类 在面向对象的程序设计中有两种重要概念: 类:可以理解为一个种类,一个模型,是一种抽象的东西. 实例.对象:可以理解为一种具体制作或者存在的东西. 定义类的语法格式如下: class 类名: ...

  10. Android 卸载应用程序

    最近工作中接触Android应用实现卸载自身的逻辑,踩了一些坑之后整理下来.使用的方法是Intent.ACTION_DELETE,这里没有什么好说的. MainActivity.java : pack ...