BLE 广播格式定义
低功耗蓝牙两类报文 : 广播报文 和 数据报文。
本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等
蓝牙设备通过广播表明自己的存在,等待被连接, 就好象一个人站在接口大喊“我要脱单,我要脱单,快来牵手...”。
BLE 考虑功耗, 使用了3个广播信道,顺序广播。
两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。 从机广播中包含设备的相关信息,比如设备名称,设备具有的服务uuid 等。
广播包类型
- 广播包 (Advertising Data)
- 响应包 (Scan Response)
主机主动扫描的情况下, 发送扫描请求给从机, 从机返回扫描响应数据。
广播数据包格式

每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。
有效数据部分
包含若干个广播数据单元,称为 AD Structure 。如图所示,AD Structure 的组成是:- 长度 Len ,表示这个 AD Structure 的长度(除去 len本身 1)
- 类型 AD Type
标记这段广播数据代表什么, 比如设备名, uuid 等。 - 数据 AD data
无效数据部分
广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的。
Flags
对于低功耗蓝牙设备, 广播中需要包括的一个 Structure, 包含一个byte 的标记, 标记设备
Flags used over the LE physical channel are:
- Limited Discoverable Mode
- General Discoverable Mode
- BR/EDR Not Supported
- Simultaneous LE and BR/EDR to Same Device Capable (Controller)
- Simultaneous LE and BR/EDR to Same Device Capable (Host)
广播设备的服务uuid
假如蓝牙设备有心率等profile, 可以在广播中添加那对应的服务uuid ,这样其他设备可以通过广播直接了解设备具备的功能。
GAP 和 GATT 服务的 UUID 不应该出现在广播中, 这对于每个设备都是具有的。
广播中包含服务uuid 包括六种类型, 对应不同程度 uuid 和列表完整性(complete 和 incomplete)
- 16-bit Bluetooth Service UUIDs
- 32-bit Bluetooth Service UUIDs
- Global 128-bit Service UUIDs
complete 和 incomplete 的区别
比如, 我设备有两个服务对应的 16 bit uuid 分别是 0x1122 和 0x 2233。
- 如果我只想广播其中一个
| value | note |
|---|---|
| 0x03 | len |
| 0x02 | Incomplete List of 16-bit Service Class UUIDs |
| 0x22 | uuid_L |
| 0x11 | uuid_H |
- 如果我两个都广播
| value | note |
|---|---|
| 0x05 | len |
| 0x03 | Complete List of 16-bit Service Class UUIDs |
| 0x22 | uuid1_L |
| 0x11 | uuid1_H |
| 0x22 | uuid2_L |
| 0x33 | uuid2_H |
广播中的厂商信息
这个一段的广播标记时 0XFF, 对应用于标记设备的生产商和其他信息。
数据前两个字节时厂商ID, 其他自定义。
具体其他广播数据段类型详见 参考。
官方提供例子
| Value | Notes |
|---|---|
| 0x02 | Length of this Data |
| 0x01 | Flags |
| 0x06 | 广播标记头 |
| 0x06 | Length of this Data |
| 0x09 | Complete Local Name |
| 0x50 | 'P' |
| 0x68 | 'h' |
| 0x6F | 'o' |
| 0x6E | 'n' |
| 0x65 | 'e' |
| 0x05 | Length of this Data |
| 0x03 | Complete list of 16-bit Service UUIDs, 列出所有服务uuid ,否则使用imcomplete |
| 0x15 | PANU service class UUID |
| 0x11 | |
| 0x1F | Hands-free Audio Gateway service class UUID |
| 0x11 | |
| 0x01 | Length of this data |
| 0x05 | Complete list of 32-bit Service UUIDs |
| 0x01 | Length of this data |
| 0x07 | Complete list of 128-bit Service UUIDs |
| 0x00 | End of Data (Not transmitted over the air) |
参考
BLE 广播格式定义的更多相关文章
- 蓝牙4.0 BLE 广播包解析
在使用EN-Dongle捕获和解析广播包之前,我们先了解一下BLE报文的结构,之后,再对捕获的广播包进行分析.在学习BLE的时候,下面两个文档是极其重要的,这是SIG发布的蓝牙的核心协议和核心协议增补 ...
- 蓝牙BLE: 蓝牙4.0 BLE广播数据解析(转)
BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 1. 广播模式 BLE 中有两种角色 Central 和 Per ...
- android BLE Peripheral 模拟 ibeacon 发出ble 广播
Android对外模模式(peripheral)的支持: 从Android 5.0+开始才支持. api level >= 21 所以5.0 之前设备,是不能向外发送广播的. Android中心 ...
- Vue + Element UI 实现权限管理系统 前端篇(九):接口格式定义
接口请求格式定义 前台显示需要后台数据,我们这里先把前后端交互接口定义好,没有后台的时候,也方便用mock模拟. 接口定义遵循几个规范: 1. 接口按功能模块划分. 系统登录:登录相关接口 用户管理: ...
- 标准JSON格式定义与解析注意点
标准JSON格式定义与解析注意点 在JS.IOS.Android中都内置了JSON的序列化.反序列化SDK.JEE中也可以使用第三方的JSON解析库,如GSON.虽然在JSON格式被定义出来的时候并没 ...
- android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE. android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新 ...
- BLE 广播数据解析
从上一篇GATT Profile 简介中提到过,BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 广播模式 BLE ...
- BLE广播数据的抓包解析
前言: 报文由数据字节组成同时是按比特传输的,这就免不了牵涉到字节序的问题. 对于各个字节的传输,总是从最低位开始传输.如0x80是按00000001发送的,0x01是按10000000发送的. 同时 ...
- (The application/json Media Type for JavaScript Object Notation (JSON))RFC4627-JSON格式定义
原文 http://laichendong.com/rfc4627-zh_cn/ 摘要 JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换 ...
随机推荐
- C++11智能指针之std::unique_ptr
C++11智能指针之std::unique_ptr uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...
- DELPHI (VCL及FMX[Firemonkey])启动时的欢迎窗口实现代码
VCL里面的的实现 program ZhouFamily; uses Vcl.Forms, Winapi.Windows, FrmZhouFamilyMainU in 'FrmZhouFamilyMa ...
- 把github代码自动部署到服务器
一.参考文献 https://developer.github.com/webhooks/ https://docs.gitlab.com/ee/user/project/integrations/w ...
- 原生JavaScript常用本地浏览器存储方法三(UserData IE Only)
UserData的应用范围 serData是微软为IE专门在系统中开辟的一块存储空间,所以说只支持Windows+IE的组合,实际测试在2000(IE5.5).XP(IE6.IE7),Vista(IE ...
- Eureka客户端源码流程梳理
前面梳理了Eureka服务端的流程,现在整理下客户端的流程. 1.在这个包(spring-cloud-netflix-eureka-client)里面寻找客户端启动入口相关配置,关键配置文件sprin ...
- Terence’s Stuff: Why do we do research?
This sound like a question best answered via a survey conducted by a body such as Vitae, an internat ...
- Ubuntu18.04 root 登录
默认安装Ubuntu18.04都是不允许以root用户进行登录的,想要以root用户进行登录需要进行一些操作,主要是以下几个步骤:第一步:以普通用户登录系统,创建root用户的密码在终端输入命令:su ...
- va_start(),va_end()函数应用
原理解释: VA_LIST 是在C语言中解决变参问题的一组宏,在<stdarg.h>头文件下. VA_LIST的用法: (1)首先在函数里定义一具VA_LIST型的变 ...
- context.xml文件配置
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml& ...
- 解决Ubuntu14.04不能打正确拼音--无法选择第二个拼音
这时候 我们回到桌面 按"ctrl"+"Alt"+"T",打开系统终端,在终端里面输入ibus-daemon -drx并回车 Ref: ht ...