低功耗蓝牙开发入门概念科普

一、概述

1、缘起
低功耗蓝牙起源于Bluetooth4.0版本,至今已发展到5.3

4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型,后面版本主要退出新特性和扩展特性,同时保证和4.0的原生兼容性
4.1 multi role(主从一体),自动回连
4.2 data length extend,le secure connections pair ecdh密钥交换,(legacy pair)
5.0 2M phy,codeed phy(long range),扩展广播(31——>255)
5.1 增加方位和角度(用于定位,厘米级),比如apple tag
5.2 增加ble audio,
5.3 定期广播增加,加密密钥大小控制增加,亚速率连接(更快的更新连接参数),信道分类增强(从设备翻身做主,可对主机发出的信道策略提出更正)

二、架构

1、H-C设计(分层分工设计)

1.1、soc

在这里插入图片描述

soc设计是嵌入式开发中较为常见的开发设计方式,即controller和host在一颗芯片中搞定,典型如nordic,ti cc2640 2541,esp32等等

1.2、双芯片

在这里插入图片描述

双芯片就是host和controller分别放在一颗芯片中设计

2、controller

负责链路层及其以下的部分

链路层: 链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的详细定义,也规定了发现其他设备的流程、广播的数据、连接建立、连接管理以及连接中的数据传输。

phy层: 物理层,底层基带信号调制(理解为二进制信号流即可)

看着事少,确是一切的基石

3、host

l2cap: 逻辑链路控制和适配器
在这里插入图片描述

在这里插入图片描述

ATT: 属性协议(蓝牙服务中的最小原子单位,可理解为军队中具体的一个士兵)
GATT: 属性协议配置规范
SM: 安全管理
GAP: 通用访问规范
应用层: 这是开发者大展拳脚的地方

4、hci

全称是host controller interface

VHCI:soc设计中典型方式(可理解为massage queue)
UART: H4,H5(不带流控,SLIP分包)
USB
SPI
SDIO

5、总体层次图

在这里插入图片描述

三、连接

1、广播与扫描

广播通道
在这里插入图片描述

1.1、广播事件

在这里插入图片描述

1.2、广播类型

可连接非定向广播(最常用)
可连接定向广播
不可连接非定向广播
不可连接可扫描广播

1.3、广播包数据结构

广播包有两种(广播包,广播响应包)
两种包数据结构相同,最大长度31(5.0->255),数据采用LTV格式来组织
L:length 1byre
T:type 1byre
V:value length-1byre
在这里插入图片描述

1.4、扫描

扫描分两种类型
主动扫描和被动扫描
在这里插入图片描述
在这里插入图片描述

2、连接

当扫描设备扫描到自己感兴趣的广播设备,即可再广播通道的广播事件锚点发出连接申请(connection indication),双方即可各种进入连接状态,准备交互数据

连接申请中包含的内容很丰富,挑几样来说

①初始连接参数
②通道选择算法和通道图(用于沟通初始通道和后续跳频)
③双方mac地址
④crc初始值
⑤传输窗口等等
在这里插入图片描述

3、状态转换关系

在这里插入图片描述

4、连接事件及连接参数

在这里插入图片描述

最小连接间隔
最大连接间隔
slave latency
super timeout

四、数据通讯

1、数据包格式

在这里插入图片描述

是不是感觉和自己定的串口通讯协议很像,前导码类似于AA55这种用来表示蓝牙数据包起始
在这里插入图片描述

以前感觉串口前面加的AA55这种很土,现在觉得很亲切很自然,因为连续的0101是最理想数字编码数据,连续多bit0和连续多bit1是最差的(容易误码)
在这里插入图片描述
蓝牙实际的抓包,空中包也确实是这个样子的

2、attribute

在这里插入图片描述

在这里插入图片描述

attribute table 中的最小单位,组成包括

attribute handle
attribute type(uuid)
attribute value
attribute permissions

在这里插入图片描述
实例

在这里插入图片描述

3、character

特征,几个attribute组成一个character,可以理解为一个attribute小组,小组中往往只有一个attribute是起数据通讯只用,其它attribure基本是对改主要attribute的辅助
在这里插入图片描述

4、service

服务,几个character组成一个service,可以理解为一个attribute部门,该部门持有几个character共同提供某一服务,不如A501,A502,A503,A508等共同组成我们公司的A5服务

5、profile

规范(规则),1个或者几个服务组成一个profile,可以理解为一个attribute 事业部,几个不同的子部门共同来支持这个事业部,比如穿戴事业部由系统部,应用部等等组成

6、profile示意图

在这里插入图片描述

7、数据发送方式

角色:server or client

注意:设备可以即是client又是server,典型的比如我们的手表或者苹果手机,苹果手机在作为client访问我们手表server数据的同时,它又同时作为server为我们提供了ams,ancs等服务(手表作为client)

上行:一般指server往client发数据
下发:一般指client往server发数据

上行数据方法

notify:无确认包,但保证交付
indicate:保证交互,且又明确的确认包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意client想后续收到server的notify和indication,必须要先打开对应的配置(使能)

在这里插入图片描述

下发数据方法
write with rsp:保证交付,且有明确的结果返回
write without rsp:保证交互,没有明确的结果返回(正确对应ATT_WRITE_REQ,错误对应ATT_ERROR_RSP)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

截取一些错误码,完整错误码请参考 core spec

8、提高数据发送速率及其原理

1、改变连接参数
在这里插入图片描述

在这里插入图片描述

连接参数来源,主机,主机,还是主机(扫描广播,并发起连接的设备)影响方法

①初始connection 包
②gap profile中的Peripheral Preferred Connection Parameters characteristic
③主机主动下发改变通知(有可能中途随机下发,450ota曾因此引发ota变慢的bug)
④从设备主动申请update,等待主机执行(从机也就只能吹吹枕边风,主机有可能直接拒绝(典型霸道如ios手机,需要满足公式,可参考苹果开发者手册),或者欣然接受,随后通过上面的方法3来具体下发生效的值)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从机申请更新连接参数,实例抓包

2、改变mtu和dle(两者配合)
dle <= 251
mtu <= 512
建议mtu <= (dle - 4)

3、使用2M phy(大于等于5.0版本)
传输速度直接翻倍
秘诀是啥?改变波特率(参考串口通讯,把9600改成115200)
1M phy(强制):1bit长度1us
2M phy(可选):1bit长度0.5us

4、问题来了,这些参数综合起来究竟如何影响数据传输速度?
连接间隔一定是越小越快?
mtu越大越好?
为啥实际数据传输速率达不到官方号称的1M or 2M?

五、ellisys抓包实战

1、准备硬件

硬件包括ellisys,待测设备(蓝牙主机,从机),电源插电,usb线插电脑

2、开启抓包

点击界面record开启盲抓(ellisys很强大)

在这里插入图片描述

3、开启过滤

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、设备广播

在这里插入图片描述

5、操作设备

在这里插入图片描述

6、结束抓包并分析

在这里插入图片描述

7、抓包数据存档

在这里插入图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值