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)是一个轻量级的,基于文本的,跨语言的数据交换 ...
随机推荐
- docker安装并运行mysql
docker拉取mysql镜像: [mall@VM_0_7_centos ~]$ sudo docker pull mysql:5.7 5.7: Pulling from library/mysql ...
- Python3入门(十三)——连接数据库
以Mysql为例: 要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection: 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结 ...
- SpringBoot中日志配置
背景 由于一些框架中还使用log4j-1.x系列陈旧的日志框架,调试过程中有一些错误信息不能在控制台显示,增加了调试成本.以下配置方法 将帮助你获得log4j-1.x日志在控制台显示. 解决方法: 使 ...
- 【Leetcode_easy】867. Transpose Matrix
problem 867. Transpose Matrix solution: class Solution { public: vector<vector<int>> tra ...
- svn服务器端—管理员分配权限
1.SVN服务器搭建和使用 下载地址:http://subversion.apache.org/packages.html 滚动到浏览器底部,下载并安装:VisualSVN服务器端和tortoiseS ...
- 欧姆龙PLC_CP1H_CRC校验
1.简介 欧姆龙CP1H PLC的CRC校验.CP1H没有CRC校验指令或者功能块,在串口自由协议通信中,如果涉及到CRC校验,需要手动计算CRC值,本程序是一个输入数据,自动计算CRC校验码的程序. ...
- [计算机视觉][ARM-Linux开发] Ubuntu14.04安装OpenCV3.2中遇到的问题的解决方案
2. ubuntu下,opencv3.x安装一直downloading这个包,要看超时信息里的下载路径,把它放到下载路径中,比如我的opencv3.2.0源文件路径为/home/han/softwar ...
- iOS 13 DeviceToken获取发生变化
问题描述: iOS 13 通过[deviceToken description]获取到的内容已经变了,这段代码运行在 iOS 13 上已经无法获取到准确的DeviceToken字符串了, NSStri ...
- LeetCode 94. 二叉树的中序遍历(Binary Tree Inorder Traversal)
94. 二叉树的中序遍历 94. Binary Tree Inorder Traversal 题目描述 给定一个二叉树,返回它的 中序 遍历. LeetCode94. Binary Tree Inor ...
- Fiddler使其在HttpURLConnection下正常抓包
像陌陌这样使用HttpURLConnection进行通讯的APP还是无能为力 还需要对fiddler进行如下设置: 点击"Rules->CustomizeRules"; 在这 ...