低功耗蓝牙开发入门概念科普
一、概述
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、抓包数据存档
低功耗蓝牙开发入门概念科普相关推荐
- Silicon EFR32BG22低功耗蓝牙开发入门篇
一 环境搭建 开发环境使用官方提供的Simplicity Studio,在官网即可下载到.silicon 官网:https://www.silabs.com/ 该平台的SDK以及文档全部都可以通过Si ...
- 《低功耗蓝牙开发权威指南》——第2章基本概念
本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第2章基本概念,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号查看 第2章 ...
- ble 低功耗蓝牙开发学习 嵌入式交流学习
ble 低功耗蓝牙开发学习 嵌入式交流学习 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这篇文章教你学会低功耗蓝牙开发,从0到深入,适合自学的学生.初级工程师 前言 随着疫情爆发 ...
- 安卓基于BLE的蓝牙开发入门
BLE蓝牙开发简单入门 BLE背景介绍 引言 BLE简介 Gatt协议以及必备知识 蓝牙开发涉及的API介绍 BLE实战准备 真机调试 权限准备 写两个简单的页面 扫描设备主界面 扫描设备信息界面 实 ...
- Android BLE低功耗蓝牙开发
啦啦啦在上一个项目中有用到BLE低功耗蓝牙开发,当时baidu google了很多资料,但大多数都是千篇一律,英文文档我这种渣渣又看不懂...总之刚开始查的很痛苦.所以要把自己的踩坑之路写下来记录下, ...
- 《低功耗蓝牙开发权威指南》——2.2节时间即能量
本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第2章,第2.2节时间即能量,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号 ...
- 【Bluetooth蓝牙开发】一、蓝牙开发入门
一.蓝牙开发入门 文章目录 一.蓝牙开发入门 1.蓝牙概念 2.蓝牙发展历程 3.蓝牙技术概述 3.1 Basic Rate(BR) 3.2 Low Energy(LE) 4.常见蓝牙架构 4.1 S ...
- 《低功耗蓝牙开发权威指南》——第3章低功耗蓝牙的体系结构
本节书摘来自华章社区<低功耗蓝牙开发权威指南>一书中的第3章低功耗蓝牙的体系结构,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区"华章社区"公众号查 ...
- 安卓模拟ibeacon_【首发】联接真实与虚拟世界:Estimote Beacons Developer Kit 低功耗蓝牙开发套件...
[首发]联接真实与虚拟世界:Estimote Beacons Developer Kit 低功耗蓝牙开发套件 2014-03-24 11:18:43 58点赞 229收藏 105评论 小编注:此篇文章 ...
最新文章
- 一个研发团队是如何坚持7年技术分享的?
- 遗传算法c语言程序,遗传算法c语言代码.doc
- with as 用法
- python 转 exe -- py2exe库实录
- 一般处理程序使用Session报错(未将对象引用设置到对象实例)
- mongo中的游标与数据一致性的取舍
- Django之ORM使用以及模板语言
- 基于文本挖掘的企业隐患排查质量分析模型
- SAP Spartacus breakpoint的决定逻辑
- WebAPI 2参数绑定方法
- Kubernetes网络策略,这一篇就够了
- 《HTML5 开发实例大全》——1.32 在表单中使用 object 元素插入一个Flash
- Python基础知识详解(十)小结,用python实现教师信息管理系统
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
- 《多元统计分析与R语言》实验2【因子分析】
- PMP®第十三章 项目干系人管理
- python-画3D图
- PHP防止vip视频被下载
- 灵动MM32 MindSPIN系列MCU —— 无刷电机驱动的得力伙伴
- Java14发布,16大新特性,代码更加简洁明快
热门文章
- Python 的七大就业方向,总有一个适合你!
- Linux系统重设开机秘码-------忘记linux开机密码
- 叠氮功能化硫铟铜量子点CuInS Qds-N3|炔基修饰碲化镉/硫化硒量子点 CdTe/CdSe Qds-Alkyne科研试剂
- python图像轮廓识别_Python+OpenCV图像处理(十六)—— 轮廓发现
- 计算机视觉sci需要什么水平论文,计算机视觉论文在哪些sci期刊发表
- java 秒表_JAVA计时器秒表程序代码
- 使用 FileReader进行文件读取
- 学术论文写作1——abstract,句型
- 【servlet】登陆验证之验证码模板
- 戏剧专业毕业论文题目