SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321
1、前言:
本章节主要从linklayer层的设备地址,空中报文格式,以及数据流的接收和发送
2、SPEC的参考章节
在SPEC core_4.2表红圈的地方介绍了本章节的内容。
3、ble设备地址
少废话先看东西
从这张图我们可以看到出,ble的地址分为 public device address 和 random device address二大类。random device address 分为 static device address 和 private device address。 private device address 有分为 no-resolvable 和 resolvable。ble 分为这么多地址,干什么呢?其实都是为了应用不同场合的,后面会分析。
注意一点:ble设备至少需要包含上述的一种数据报文,如果一个设备使用了resolvable address,那么必须还要有一个identify address(public or static address)。
3.1、public device address
全球合法且独一无二的标识,这个就是电脑的MAC一样。缺点:要钱要钱,要钱去申请。
如上图,public device address 由48 bit组成。高24为表示公司的id(这个需要申请),低24bit由公司自己分配。
3.2、static device address
这个地址属于random地址,它的出现是因为public地址存在一些问题。第一个问题是public地址要钱,要申请。第二个问题是public的地址是固定的,很容易遭到窃取信息(比如这个设备在adv,我们只要知道这个设备的地址就能找到对应的adv的信息)。如果这个设备的在初始化随机生成地址呢?
static 的特征是:
1)上电初始化的时候随机生成
2)断电的时候地址丢失,不是强制的,如果地址丢失原先保存的peer的信息也会丢失
3)最高2bit为1
3.3、resolvable device address
这个地址比较有用,主要用在privacy上面。privacy会在后面的章节介绍。它是通过随机书prand和IRK生成的,IRK是Identity Resolving Key 的缩写,意思就是对方设备需要保存一个相同的IRK,才能解析我的地址,进而才能进行扫描和连接等操作。
1)最高2bit是1和0,剩下的22bit随机生成
2)最低24bit,使用rk和prand进行哈希算法生成哈希值
3)对方设备通过接受到你的prand,使用本地的irk,运用ah(local_irk,peer_prand)算出 hash与peer hash进行比较,如果相等表示解析成功
4)运用在privacy的策略上,后续文章会详细介绍
3.4、non resolvable device address
这个格式如上,不可解析(暂时还不知道它的应用场景,后续发现了会补上)
4、air packet format
上图展示是一个空中报文的格式,preamble , access address 的作用已经在前面的physical layer详细说明了。本章节主要主要分析PDU的部分。
PDU 分为 advertising channel PDUS 和data channel PUDS。
4.1 advertising channel PDUS
header:是16bit的头,这个头决定了这个报文的类型以及报文的长度,以及报文的设备的地址类型
PUD type:如下图,决定了报文的类型
length:的长度是6到37个字节,其中前6个字节是必须标识发送广播的源设备地址,后面的31个字节是用户数据,在HOST层的GAP便对这个31个字节数据进行格式的封装。
txadd:发送报文的地址类型,0表示public地址,1表示random地址
rxadd:表示接收方设备地址类型,0表示public地址,1表示random地址
4.1.1、ADV_IND
一般通用的广播,支持scan和connect,可以额外携带31个字节的用户数据
4.1.2、ADV_DIRECT_IND
直接连接的广播,分为high duty 和 low duty 2中,这个报文是直接连接的报文,一般被连接方先扫描
4.1.2、ADV_NONCONN_IND
不可连接和scan的广播,蓝牙的mesh的组网就是发送这种广播
4.1.3、ADV_SCAN_IND
这种广播可以被SCAN,但是不能连接
4.1.4、SCAN_REQ
![](https://i-blog.csdnimg.cn/blog_migrate/d4b79222698fb6bd1016e613fef7073b.png)
当advertising发送可以被scan的adv的时候,initiating 可以发送 scan request 报文
4.1.4、SCAN_RSP
当advertising发送可以被scan的adv的时候,initiating 可以发送 scan request 报文 ,advertising 需要回复 scan rsp给
initiating。
4.2 data channel PDUS
![](https://i-blog.csdnimg.cn/blog_migrate/370466776ba8730d38f7e30973d5ca0c.png)
header 携带了很多控制信息,例如 data的类型,payload 是有效载荷,mic是消息完整性检查分场景的(如果payload 为空或者该linklayer 没有加密可以不添加mic部分,反之添加mic部分)
4.2.1 header 分析
大家自己看图吧,每个为都解释很清楚,如果不明白请查看我上一篇的文章。
data channel pdus 分为 ll data pdu和 ll control pdu。
4.2.2 ll control pdu
这个主要建立连接过后,发送一些控制命令进行交互,比如更新连接参数,交换feature(发送很多命令之前,都会先发送以便确认对方支不支持这个命令),下图列举了部分命令。不一一进行解释了
4.2.3 data control pdu
在header中LLID位如果是01表示是一个分段的数据,10表示是一个完整的数据报文。理论上一次connection event我们只能发20个有效的用户数据,大于20个有效数据就会分段进行发送,接受方通过判断这个位可以把分段的数据进行重组。