SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321
1、引言:
ble的协议栈中linklayer层到底干了什么呢?linklayer层就是发送和接受数据和控制信息。
虽说只是发送和控制数据和控制信息,于此衍生出来很多问题,就数据本身需要定义广播报文和数据报文的格式,如果接受数据发生错误需要校验,如果发送数据失败需要重传,physical只提供了40个通道,然而ble参与通信的实体肯定远远大于这个值,linklayer需要解决这个共享端口的问题。另外通信是2个实体的事情,他们需要建议一条自己独享的链路通道。(独享意味着我在这个独享的链路加密,不会影响到其他的通信实体)
2、SPEC 章节参考
上图红色圈圈的地方就是协议介绍linklayer的地方。
3、linklayer 细致分析
3.1、框架分析
如上图,ble的数据传输的架构。最底下physical channel 和 physical links在上一篇的文章已经细致分析过了。
linklayer 分为 logical transports 和 logical links。
3.1.1、logical transports
logical transports 分为 LE ACL 和 ADVB。 LE ACL 它携带这LL和LECAP的控制信号,使用2bit的NESN\SN,提供一个简单的可靠传输。SN表示当前报文的序列号,NSEN表示下一个期望的序列号,这个措施可以检测报文是重传的报文还是期望的报文,还是其他的报文(包括恶意攻击的报文)。当一个设备加入一个piconet,会自动在MAST和SALVE之前创建一个le acl,可以通过access address 进行分别。反之设备退出piconet,le acl也会自动的移除。ADVB 是 用来传输广播或者用户数据给所用的扫描的设备。这个过程很像TCP和UDP。
3.1.2、logical links
1) control LL lEC:这个在一个piconet的设备之前,发送的控制信号,如下图。LL_connection_update_req可以发起修改连接的参数,比如连接的间隔。其他的大家参考SPEC
2)user l2cap Le-u是在piconet发送用户的数据,通过LLID来区分数据的格式
如何LLID是 11(haha 就是上一个 control LL lEC),如果是01表示是一个分段的数据,10表示是一个完整的数据报文。理论上一次connection event我们只能发20个有效的用户数据,大于20个有效数据就会分段进行发送,接受方通过判断这个位可以把分段的数据进行重组。
3)ADVB-C:这个就是我们发送不带用户数据的报文,
4)ADVB-U:这个就是广播中带有用户数据的报文
总结:
1、2个实体或者多个实体,组成了piconet网路过后,通信的实体之间(MAST 和 SLAE)会建立一条独享链路信道。这个信道通过 access address 进行区分。
2、linklayer 根据场景不同分成场景比如(1)传感器很长的时间发送一次数据,这种对时间不是很敏感切数据量不大的场合可以通过广播的方式进行传输。(2)数据量比较大,对时间敏感等采用连接的方式,组成piconet网路(点对点的微微网)。
3、广播的逻辑链路分为带用户数据和单纯的携带控制信息的报文
3、连接的路径链路,分为控制信息和用户数据的报文。控制信息用来管理连接相关的事件,用户数据分为分段的数据报文和完整的数据报文2种
3.1.2、linklayer 状态
linklayer的状态是对发送各种报文的的状态的一个抽象,比如你处于Connection Stat ,那你可以发送各种连接相关的报文。
• Standby State
• Advertising State
• Scanning State
• Initiating State
• Connection State
同一时间只能处于一种状态,有同学肯定会问了,我的蓝牙设备即可作为MAST建立了连接,有作为SLAE进行广播,那我岂不是advertising状态和connection状态并存?
在连接状态时,定义了2个角色分别是master 和 slave
从 initating 进去 connection状态的设备就是 master 设备
从 advertising 进入 connection状态的设备就是slave
通俗的说,谁发起的adv,谁就是slave。