蓝牙学习1

介绍
最近实验室安排了一个动物智能耳标的开发项目,沟通需求之后选择用低功耗蓝牙芯片CH579来做,因为是第一次接触BLE,所以记录一下完整的学习过程,当作笔记,这也是我第一次写博客,希望多多指点。

CH579协议栈
协议栈由 Host(主机协议层)和 Controller(控制协议层)组成,结构如下:


链路层(Link Layer)
RF 控制器。它控制设备处于准备(standby)、广播(advertising)、监听/扫描(scanning)、初始化(initiating)、连接(connected)这五种状态中一种。围绕这几种状态,BLE 设备可以执行广播和连接等操作,链路层定义了在各种状态下的数据包格式、时序规范和接口协议。

物理通道

BLE设备有3个广播通道,37个数据通道
广播信道分别分布于前中后三个不同的段,避免广播扫描过程中相邻信道干扰。

链路层操作的5个状态描述:

准备就绪状态(Standby State):不接收和发送任何数据
广播状态(Advertising State):发出广播通道包
扫描状态(Scanning State):监听其它设备发出的广播包
初始化状态(Initiating State):监听连接过的设备的广播包,同时做出回应从而开始连接
连接状态(Connection State):从Initiating State进入此状态为主,从Advertising State进入此状态为从

链路层只能处于上述状态中的一种。

BLE Packet格式
preamble(前导帧)为1个字节,为交替的0 1格式,根据Access Address第一个Bit,有两种取值情况:0x55或者0xAA(纯PHY层行为)

Access Address用来标示接收者ID或者空中包身份,如前所示,BLE只有一种packet格式,根据Access Address的不同,又区分两种Packet类型:广播包和数据包:

广播包Access Address: 固定为0x8E89BED6,广播包只能在广播信道(channel)上传输,即只能在37/38/39信道上传输(注:从蓝牙5.0开始广播包可以在其它信道上传输)。广播包发送给附近所有的observer(扫描者)。

数据包Access Address:为一个32bit的随机值,由Initiator生成。数据包,其实是数据信道上的空中包的简称,数据包只在数据信道上传输,即除37/38/39之外的其余37信道(BLE总共占用40个信道)。每建立一次连接,重新生成一次Access address。数据包是给连接通信使用的,即用于master和slave之间通信的。

蓝牙广播包
Advertising Header:长度为一个字节
PDU Type为3bit,定义了广播类型
TxAdd/RxAdd,各占1bit,表示随后的Device Address字段代表的蓝牙MAC地址类型,值0代表Public地址,值1代表Random地址。

Payload length定义如下所示,所以广播包PDU最长37个字节。

Device Address,广播包中的强制字段,俗称蓝牙MAC地址,如果是广播包,则是advertiser的MAC地址;如果是scan包或者连接请求包,则是scanner的MAC地址。蓝牙device address为6个字节,这样Advertising data最长为:37-6 = 31B,这就是广播包数据最长只能31个字节的由来。如前所述,device address分public和random两种,定义如下所示:

Random device address又有三种类型,定义如下所示:

如下为一个完整的真实的广播包示例,注意:BLE空中包采用小端模式。
AAD6BE898E600E3B75AB2A02E102010504FF5900538EC7B2

AA – 前导帧(preamble)
D6BE898E – 访问地址(access address)
60 – LL帧头字段(LL header)
0E – 有效数据包长度(payload length)
3B75AB2A02E1 – 广播者设备地址(advertiser address)
02010504FF590053 – 广播数据
8EC7B2 – CRC24值
1
2
3
4
5
6
7
蓝牙数据通道空中包(数据包)

蓝牙数据包是蓝牙数据信道空中包的简称,表示空中包只在蓝牙数据信道上传输,即除37/38/39之外的其他37信道。从格式上来说,蓝牙数据包又分空包(empty packet)和普通数据包(data packet)两种。

空包

普通数据包
一个完整的真实的数据包示例,注意:BLE空中包采用小端模式。

AAAB5D65501E08040004001B130053D550F6

AA – 前导帧(preamble)
0x50655DAB – 访问地址(access address)
1E – LL帧头字段(LL header)
08 – 有效数据包长度(payload length)
04000400 – ATT数据长度,以及L2CAP通道编号
1B – notify command
0x0013 – 应用数据handle
0x53 – 真正要发送的应用数据
0xF650D5 – CRC24值
1
2
3
4
5
6
7
8
9
通用访问规范(Generic Access Profile)
BLE 设备内部功能对外接口层。它规定了三个方面:GAP 角色、模式和规程、安全问题。主要管理蓝牙设备的广播,连接和设备绑定。

参考(https://blog.csdn.net/XG_2013/article/details/80864527)

1、GAP是最基本的profile,其他的profile都是间接或者直接的引用了这个profile。

2、GAP主要对linklayer层的状态进行了抽象,转化成上层的概念

3、对广播包数据进行封装,运用同一的格式和类型,支持GAP的设备都能明白数据包的内容的意思。


GAP主要描述了gap的角色、发现的模式与过程、连接模式与过程、安全模式与过程。

GAP角色

广播者——不可以连接的一直在广播的设备
观察者——可以扫描广播设备,但不能发起建立连接的设备
从机——可以被连接的广播设备,可以在单个链路层连接中作为从机
主机——可以扫描广播设备并发起连接,在单个链路层或多链路层中作为主机

广播者 :广播模式可以分为 不可连接的非定向广播(Non-connectable Undirected Event Type) 。这种模式下仅仅发送广播数据。或者工作在 可扫描的非定向广播(Scannable Undirected Event Type) 。这种广播不能用于发起连接,但允许其他设备扫描该广播设备。这意味着该设备可以被发现,既可以发送广播数据,也可以响应扫描发送扫描回应数据,但不能建立连接。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据之中,而静态数据可以包含于扫描响应数据之中。

观察者:具备被动scan能力(主动scan能力是可选的),不支持连接,不支持广播。被动扫描 指的是接收广播不发送扫描请求,主动扫描 指的是接收广播并发送扫描请求


广播的模式与过程

广播模式:只有广播者设备支持,一个设备处于broadcaster模式可以发送
ADV_NONOCN_IND或者发送 ADV_SCAN_IND的报文。在广播报文的ADV_TYPE格式的AD_TYPE_FLAGS设置成LE_LIMITED_DISC_MODE或者LE_GENERAL_DISC_MODE。

发现模式与过程

1)non-discoverable mode在发送sends advertising events时,不要在报文的Flags AD type位置 设置LE_LIMITED_DISC_MODE或者LE_GENERAL_DISC_MODE。non-discoverable mode可以发送non connectable undirected advertising events或者scannable undirected advertising events或者may not send advertising packets 。

2)limited discoverable mode是对从机的角色来说的,就是发送广播的时候有时限的限制,到了时间就停止广播。

3)limited discovery procedure是对主机角色设备说的,它只接受limited advertising event,并且有一个scan的时限的

4)general discoverable mode简单的讲就是发送长时间的广播,可以通过general discovery procedure来发现。

5)general discovery procedure可以发现limited advertising event 和 general advertising event。

连接模式与过程

NON_connectable mode:这个模式可以发送non-connectable undirected advertising events 或者 scannable undirected advertising events 。观察者与广播者都支持non_connectable mode。

directed_connectable mode:这个模式只有从机角色支持,从机角色必须事先知道peer address。

undirected_connectable mode:这个模式只有从机角色支持。

auto connection establishment procedure:

这个过程是主机设备支持的,先添加白名单,设置initiator的策略运行与白名单的设备建立连接,配置连接参数。

general connection establishment procedure:

这个过程是主机设备支持的,先添加白名单,设置scannig的策略只能对白名单设备进行扫描,获取扫描的结果,比对扫描的地址选择一个进行直接连接

direct connection establishment procedure:


只有主机设备支持,忽略白名单的策略,直接连接对方设备。

bonding 模式与过程


bonding procedure
简单讲就是配对的交换feature的时候,双方使能bonding enable。下一次配对的时候,master会检查从机在不在bonding在绑定的list中,如果在双方使用上一次的bonding information 进行加密通信。

逻辑链路控制协议(Logical Link Control and Adaptation Protocol)
主机与控制器直接的适配器,提供数据封装服务。它向上连接应用层,向下连接控制器层,使上层应用操作无需关心控制器的数据细节。

安全管理协议(Security Manager)
提供配对和密匙分发服务,实现安全连接和数据交换。

属性传输协议(Attribute Protocol)
定义了属性实体的概念,包括 UUID、句柄和属性值,规定了属性的读、写、通知等操作方法和细节。

通用属性规范(Generic Attribute Profile)
定义了使用 ATT 的服务框架和配置文件的结构,两个设备应用数据的通信是通过协议栈的 GATT层实现。

GATT 服务端——为 GATT 客户端提供数据服务的设备
GATT 客户端——从 GATT 服务器读写应用数据的设备
————————————————
版权声明:本文为CSDN博主「yanyudy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42019595/article/details/118751496

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值