一、概述

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、抓包数据存档

低功耗蓝牙开发入门概念科普相关推荐

  1. Silicon EFR32BG22低功耗蓝牙开发入门篇

    一 环境搭建 开发环境使用官方提供的Simplicity Studio,在官网即可下载到.silicon 官网:https://www.silabs.com/ 该平台的SDK以及文档全部都可以通过Si ...

  2. 《低功耗蓝牙开发权威指南》——第2章基本概念

    本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第2章基本概念,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号查看 第2章 ...

  3. ble 低功耗蓝牙开发学习 嵌入式交流学习

    ble 低功耗蓝牙开发学习 嵌入式交流学习 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这篇文章教你学会低功耗蓝牙开发,从0到深入,适合自学的学生.初级工程师 前言 随着疫情爆发 ...

  4. 安卓基于BLE的蓝牙开发入门

    BLE蓝牙开发简单入门 BLE背景介绍 引言 BLE简介 Gatt协议以及必备知识 蓝牙开发涉及的API介绍 BLE实战准备 真机调试 权限准备 写两个简单的页面 扫描设备主界面 扫描设备信息界面 实 ...

  5. Android BLE低功耗蓝牙开发

    啦啦啦在上一个项目中有用到BLE低功耗蓝牙开发,当时baidu google了很多资料,但大多数都是千篇一律,英文文档我这种渣渣又看不懂...总之刚开始查的很痛苦.所以要把自己的踩坑之路写下来记录下, ...

  6. 《低功耗蓝牙开发权威指南》——2.2节时间即能量

    本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第2章,第2.2节时间即能量,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号 ...

  7. 【Bluetooth蓝牙开发】一、蓝牙开发入门

    一.蓝牙开发入门 文章目录 一.蓝牙开发入门 1.蓝牙概念 2.蓝牙发展历程 3.蓝牙技术概述 3.1 Basic Rate(BR) 3.2 Low Energy(LE) 4.常见蓝牙架构 4.1 S ...

  8. 《低功耗蓝牙开发权威指南》——第3章低功耗蓝牙的体系结构

    本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第3章低功耗蓝牙的体系结构,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号查 ...

  9. 安卓模拟ibeacon_【首发】联接真实与虚拟世界:Estimote Beacons Developer Kit 低功耗蓝牙开发套件...

    [首发]联接真实与虚拟世界:Estimote Beacons Developer Kit 低功耗蓝牙开发套件 2014-03-24 11:18:43 58点赞 229收藏 105评论 小编注:此篇文章 ...

最新文章

  1. 一个研发团队是如何坚持7年技术分享的?
  2. 遗传算法c语言程序,遗传算法c语言代码.doc
  3. with as 用法
  4. python 转 exe -- py2exe库实录
  5. 一般处理程序使用Session报错(未将对象引用设置到对象实例)
  6. mongo中的游标与数据一致性的取舍
  7. Django之ORM使用以及模板语言
  8. 基于文本挖掘的企业隐患排查质量分析模型
  9. SAP Spartacus breakpoint的决定逻辑
  10. WebAPI 2参数绑定方法
  11. Kubernetes网络策略,这一篇就够了
  12. 《HTML5 开发实例大全》——1.32 在表单中使用 object 元素插入一个Flash
  13. Python基础知识详解(十)小结,用python实现教师信息管理系统
  14. bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
  15. 《多元统计分析与R语言》实验2【因子分析】
  16. PMP®第十三章 项目干系人管理
  17. python-画3D图
  18. PHP防止vip视频被下载
  19. 灵动MM32 MindSPIN系列MCU —— 无刷电机驱动的得力伙伴
  20. Java14发布,16大新特性,代码更加简洁明快

热门文章

  1. Python 的七大就业方向,总有一个适合你!
  2. Linux系统重设开机秘码-------忘记linux开机密码
  3. 叠氮功能化硫铟铜量子点CuInS Qds-N3|炔基修饰碲化镉/硫化硒量子点 CdTe/CdSe Qds-Alkyne科研试剂
  4. python图像轮廓识别_Python+OpenCV图像处理(十六)—— 轮廓发现
  5. 计算机视觉sci需要什么水平论文,计算机视觉论文在哪些sci期刊发表
  6. java 秒表_JAVA计时器秒表程序代码
  7. 使用 FileReader进行文件读取
  8. 学术论文写作1——abstract,句型
  9. 【servlet】登陆验证之验证码模板
  10. 戏剧专业毕业论文题目