💭前言
截至本文发出时,蓝牙最新版本是BT5.4,本文主要梳理各种BLE广播,包括广播机制,相关HCI命令
BLE广播和FM广播一样,目的都是为了传递信息,并且这种传递信息的方式有个特点,即在有效范围内,任何设备都可以接收到,并解析出其内容。
📃目录
⭐️Legacy广播
这里的Legacy是相对于扩展广播而言的
广播Channel
BLE有40个Channel,编号0-39,其中37,38,39用于发送Primary广播,也即Legacy广播
上图的蓝色部分即是3个广播Channel,我们能够看到3个广播Channel并不是挨着的,这样设计的目的是为了避开WIFI的Channel
广播间隔
广播间隔,即多久发一次广播
下图是用Ellisys抓取的广播包截图,它的广播间隔是50ms
这里需要强调,每次广播时,同一个广播包会依次在3个广播channel(37,38,39)中发送!
广播包格式
速率
目前BLE支持1M PHY, 2M PHY, Coded PHY
对于Legacy广播,其只能使用1M的PHY,目的是为了保持兼容性
1M的PHY,即每秒传输1M个Symbol,简单理解就是每秒传输1M个bit,基于此,只要知道一个广播包有多少个bit,就能计算出发送此广播包需要的时间
针对上图的广播包:
Preamble: 1Byte
Access Address: 4Bytes
Header: 2Bytes
Payload: 37Bytes
CRC: 3Bytes
Duration Time = (1 + 4 + 2 + 37 + 3) * 8 * 1us = 376us
Payload格式
上图是广播包Payload的格式,遵循Length,Type,Value格式
具体的AD Tye可以参看Assigned Number文档
在开发BLE外设时,我们会将一些信息按照上面的格式填入广播包中,例如广播名,UUID等
其中用的比较多的是AD Type=0xFF,即厂商自定义数据
对于Legacy广播,提供给上层能够使用的长度是31个字节,由于还有Scan Response,所以通过Legacy广播能够传输的最多数据是62个字节