在做蓝牙相关的项目的时候,估量许多都猎奇为什么一次最多发送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.
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。