蓝牙4.2:Beacon广播信标(以Google Eddystone为例)

文章内容仅作为学习笔记参考使用

通俗来说,Beacon标准来自于大型供货商或企业集团(如谷歌、苹果)制定的蓝牙应用规范,是一种蓝牙广播标准。

以谷歌指定的Eddystone为例,其含有四种帧格式

图1 Eddystone的四种帧格式

分别为UID、URL、TLM/ETLM、EID

在进行分别阐述前,先了解一下UUID(通用唯一标识符)格式

图2 UUID格式

UUID通常是128个比特,但是在实际开发中,16-32bit也能满足使用条件,一个蓝色方块为16bit宽度,八个方块共同组成UUID。UUID在蓝牙官方注册,若指定某特定机构,请在使用前按需要查表。

图3 UUID编号范围及适用对象

言归正传,让我们重回到标题——广播包

图4 蓝牙4.2协议栈结构

这是蓝牙4.2的协议栈,广播包一般来自于控制器的LL,也就是链路层。那么我们就必须清楚链路层的数据格式是怎么样的。

图5 链路层的结构

如图,数据格式分为广播报头和数据报头。由于我们讨论的是广播信标,故分析广播报头即可。

图6 ESP32广播包格式

广播包(ESP32版本)分析:

前四个字节:固定,表示数据包访问的地址,一般是大端表示,即最左边是高比特位。

头:第一个字节:报头,第二个字节:长度,这里的长度表示后面6-37字节数据的长度

数据(PDU,在上一篇文章L2CAP介绍中出现):最少是六个字节,因为自身地址就是6位,真正有效的数据在有效载荷内,而这个有效载荷中包含的广播数据由多个AD结构体组成,AD结构体也在图中表示了出来,由一个字节表示长度和一个字节表示类型和x个字节的数据构成,这里的x=长度-类型。

CRC:循环冗余检验,这里不赘述,相关过程可参考b站播放量最高的有关于CRC校验的视频。

图7 Eddystone Beacon

Eddystone数据包:即图6中的Adv Data结构,或者是PDU有效载荷的内容,共31个字节,由多个AD结构组成

以第一个AD结构为例:一共是三个字节,其中Len代表类型+数据的长度总和为两个字节,而长度占一个字节,故类型占据一个字节,其中类型赋值为0x01,查表后才能知道代表的具体含义。

接下来就是文章开头提到的Eddystone结构的数据包了

图8 Eddystone frame data

简单认识结构即可,具体实现需要结合ESP32官方代码去学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值