首页 > 其他分享 >广播数据包报文格式

广播数据包报文格式

时间:2024-09-18 15:03:45浏览次数:9  
标签:AD 报文格式 数据 报文 地址 广播 数据包 字节

BLE报文由不同的域组成,如果域的长度超过一个字节,就涉及到先传输字节的低位还是高位的问题,这里分字节序和比特序:

字节序:大多数的多字节域都是从低字节开始传输。但是,并不是所有的多字节域都是从低字节开始传输。

比特序:各个字节传输时,每个字节都是从低位开始。

  1. 前导:前导是一个8bit的交替序列,不是01010101就是10101010,取决于接入地址的第一个bit;接收机根据前导的无线信号强度来配置自动增益控制;
  2. 接入地址:广播接入地址和数据接入地址
    1. 广播接入地址:固定为0x8E89BED6,在广播、扫描、发起连接时使用;
    2. 数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的2个设备之间使用。

          对于数据信道,数据接入地址是一个随机值,但要满足以下条件:

      1. 数据接入地址不能超过连续的6个0或1;
      2. 数据接入地址值不能和广播地址一样;
      3. 数据接入地址的4个byte值必须互不相同;
      4. 数据接入地址不能有超过24次的bit翻转(0到1或1到0算一次bit翻转) 
      5. 数据接入地址最后6bit必须有2次bit翻转; 
      6. 符合上面条件的数据接入地址大概有231个。 
  3. 报头:报头的内容取决于该报文是广播报文还是数据报文
    1.   广播报文的包头如下:

      4bit的报文类型,2bit保留,1bit发送地址类型,1bit的接收地址类型 

    2. 广播报文类型:核心规范中定义了7种类型,如图,根据该字段即可分辨出广播报文类型,如该字段为ADV_IND,表示类型为通用广播

       每种广播报文类型都具有不同的数据格式及行为。

    3. 发送地址类型和接收地址类型:发送地址类型和接收地址类型指示了设备使用公共地址(public address)还是随机地址(Random Adress)。公共地址和随机地址都一样,都包含6字节48bit,BLE设置必须拥有这两种地址类型中的一种,当然也可以同时拥有这两种地址类型。

     

  4. 长度
    1. 广播报文:长度域包含6bit,有效值的范围6-37;
    2. 数据报文:长度域包含5bit,有效值的范围0-31;
    3. 广播报文和数据报文的长度域有所不同,主要是因为广播报文除了最多31个字节的数据报文外,还必须包含6个字节的广播设备地址。6+31 = 37,所以需要多6bit的长度域。
  5. 数据(advdata):广播和扫描响应的数据格式如下图所示,由有效数据部分和无效数据部分组成:

     有效数据部分包含N个AD Structure,每个AD Structure 由length, AD Type和 AD Data组成。其中  

    • Length:AD Type 和AD  Data的长度;
    • AD Type:指示AD Data数据的含义;
    • AD Data:数据。
    • AD Structure的结构很重要,对于理解广播数据以及扫描后的数据解析很有帮助。主机扫描到广播后,如何理解广播中包含的数据的意义,逐个解析广播包中的AD Structure来获取对应数据。
    • AD Type及其表示的含义可以通过SIG官网查询,也可以查看Nordic的SDK中的定义:(ble_gap.h文件)

  6. 校验:BLE采用的是24位CRC校验,CRC对包头,长度和数据进行计算,24位CRC的生成多项式为:

     

标签:AD,报文格式,数据,报文,地址,广播,数据包,字节
From: https://www.cnblogs.com/maodoudou/p/18418493

相关文章

  • 原生IP与广播IP的区别
    在计算机网络领域,IP地址是设备在网络中的唯一标识,对于网络通信起着至关重要的作用。原生IP和广播IP是两种不同类型的IP地址,它们在定义、用途、通信方式等方面存在明显的区别。本文将深入探讨这两种IP地址的特性及其在网络设计和应用中的重要性。一、原生IP的定义与特性原生IP,也被称......
  • 广播与组播,超时检测
    目录一.超时检测必要性超时检测的设置方法1. 通过函数自带的参数设置   2. 通过设置套接字属性进行设置3. alarm函数与sigaction函数结合二.广播与组播(broadcast&multicast)1. 广播(udp)理论:发送者接收者2. 组(多)播(udp)理论发送者接收者一.超时检......
  • 每天五分钟深度学习:广播机制(以python语言为例)
    本文重点因为向量化的计算方式导致效率的提升,所以现在很多时候,我们都是用向量化的计算,但是向量化计算有一个问题让人头痛就是维度的问题,本节课程我们将讲解python中的广播机制,你会发现这个机制的优秀之处。代码实例importnumpyasnpa=np.random.randn(3,4)b=np.random.r......
  • BroadcastReceiver 广播-Android四大组件 一文精讲
    目录1.广播用途与机制1.1什么时候用broadcast?1.2原理图解2.注册广播2.1静态注册2.2动态注册2.3二者区别与联系同:异:3.接受广播3.1接收系统广播3.2接收自定义附带值广播4.发送自定义广播4.1发送无序广播4.2发送有序广播4.3发送应用程序内部广播1.广播用途与......
  • android 模拟器 内存修改, 用winshark 抓包,修改数据包
    1.其实我们自己也可以开发软件,对系统线性内存地址做归纳,2.对所有内存系统地址的值,做遍历。(很快,大概32GB2s~5s),如果能找到进程对应内存堆栈,大概100ms就可以查找完毕。参考摆脱八门神器,继续利用CE在安卓游戏做上帝https://zhuanlan.zhihu.com/p/470805411不需要root在Win......
  • 基于Keil软件实现串口收发HEX数据包(江协科技HAL库)
    ​串口收发HEX数据包实验是基于江协科技STM32的HAL库工程模板创建的(可以在作品“基于江科大STM32创建的HAL库工程模板”中的结尾处获取工程模板的百度网盘链接)复制“OLED显示”的工程文件——“4-1 OLED显示屏”,并命名为“9-3 串口收发HEX数据包 ”。打开工程,把下面的程序......
  • 使用广播星历计算卫星坐标(Python)
    前言本代码为GNSS课程设计代码,仅供参考,使用的计算方法与公式均来源于王坚主编的《卫星定位原理与应用(第二版)》。本代码计算结果可以通过下载精密星历进行比照,误差在1-10m左右。实现功能:读取卫星广播星历,并将其计算为WGS-84坐标系下的坐标,每颗卫星,每15分钟输出一次。广播星历......
  • python使用 pyshark 库捕获数据包,附示例
    以下为您提供使用Python的pcap库捕获网络数据包的示例及相关信息:在Python中,可以使用pcap库来实现网络数据包的捕获。例如:importpcap#创建pcap实例pc=pcap.pcap()#设置过滤条件,例如捕获TCP端口为80的数据包pc.setfilter('tcpport80')#开始抓......
  • python使用 pcap 库捕获网络数据包,附示例
    以下为您提供使用Python的pcap库捕获网络数据包的示例及相关信息:在Python中,可以使用pcap库来实现网络数据包的捕获。例如:importpcap#创建pcap实例pc=pcap.pcap()#设置过滤条件,例如捕获TCP端口为80的数据包pc.setfilter('tcpport80')#开始抓......
  • Android wifi主要广播详解
    Androidwifi相关主要广播总结文章目录Androidwifi相关主要广播总结一、前言二、wifi主要广播分析介绍1、简单的广播监听2、wifi广播对应的action字符串:3、广播和接收的相关数据三、广播相关日志:1、wifi扫描广播的日志2、wifi连接、断开的日志(1)第一次连接的日志①......