在做蓝牙相关的项目的时候,估量许多都猎奇为什么一次最多发送20Byte的数据,话不多说,先上图,下图为蓝牙数据发送的包结构。赤色部分为最终咱们发送的数据包巨细(Notify状态下)。
在开始之前先提一下Octet与Byte的差异,虽然两个都可以翻译成字节。 Octet 为 八比特组。 在TCP/IP发展初期有些系统结构运用的Byte是10位.
播送包简介
播送包头部
报头部分
- 头部主要有1个octet。
- PDU类型
- RFU为保留
- TxAdd 发送地址段
- RxAdd 承受地址段
长度部分
- 长度主要有1个octet。
- 6octet为长度,取值为6-37(播送包最终有6octet设备地址,所以最少是6位)。
对于这里的37字节,我的猜测是这样的,不知道是否正确,为了兼容数据PUD中5位长度为31octet的数据,再加上6octet必须要加的设备地址。
播送数据部分
数据分为有用数据和无效数据(用0填充)+6octet设备地址。有用数据结构如下
- 有用数据部分由多个AD Structure组成
- 1个AD Structure 由 1个octct的长度和数据(Length)组成
- data 由 AD type(n个octct) 和 AD data(Length – n)组成
数据PDU
头部
- Length 为5位 0-31octct,最大31octet
- 减去 4octet的MIC 31-4 = 27 octet 为Payload长度。
链路层 L2CAP
27 – 2 – 2 = 23 octet
notify
23 – 1 – 2 = 20 octet.