从空中截获BLE数据包看蓝牙5协议流程【第二部分:蓝牙LL层连接】

--------------------------------------------------------------------------------------------------------

文章版权归为微信公众号 无线技术联盟,转载请注明出处.

作者:XCODER

--------------------------------------------------------------------------------------------------------

 

关注微信公众号 "无线技术联盟", 提供有价值的市场信息和最新的技术分析

 

 接着上一讲广播数据分析,今天来从空中监听数据包分析蓝牙LL层连接部分协议和数据交互流程。

 

实验用到的工具:

蓝牙主机:TI BTool + CC2540 dongle

蓝牙从机:CC2541模块

抓包工具:TI Sniffer + CC2540 dongle

手机工具:BLE调试工具箱  (无线技术联盟微信公众号关联的蓝牙测试工具)

 

01

连接请求

 

TI的Btool是个非常好用的PC主机小工具,其部分界面如下所示,在Discover/Connect界面,可以配置不同的连接参数,选择扫描以及根据扫描到的广播设备有选择性的进行连接。多说一句whitelist,什么是whitelist?这个和微信公众号的白名单一样,是得到主机授权的从机设备,当选择只扫描whitelist的设备时(前提是已经在主机上添加了whitelist设备),主机只会扫描过滤在whitelist里面的设备。

 

从下图截获的控制数据包可以看到,主机端在广播扫描之后发出一条CONNECT_REQ的指令,附带LL data,开启了主从设备连接的过程的第一步。TI的工具做的比较人性化,可以从该条语句的注释可以看到

Adv PDU Header Type的值为5,对应Spec的值是CONNECT_REQ。

在指令后面标注出发起端(主机)和从机端的Mac地址,然后是LL data。

这一条指令严格来说也是属于广播范畴,其数据格式说明可以参考上一篇文章。

 

展开CONNECT_REQ包,其数据包格式可分为前导,接入地址,数据包,CRC效验,详细规范如下:

 

PUD数据包分可分为两个部分,Header部分是指令(CONNECT_REQ),payload是详细LL data,拉出LL Data来看,如下图所示:

下面对LL Data格式详细说明:

 

AA: 连接中的两设备的接入地址,如下图所示,

CRCInit:CRC 初始化

WinSize:主机发送第一包数据的时间窗口

Winoffset:主机发送第一包数据的便宜时间

 

WinSize和Winoffset是配和使用,主机在发起CONNECT_REQ开始的Winoffset+1.25ms内准备和从机建立连接,这段时间被称为连接建立准备时间,WinSize是主机第一包数据发送的时间窗口范围。

  • Interval:蓝牙连接间隔时间。

  • Latency:连接延迟,主多次请求才唤醒从机交互一次数据。

  • Timeout:超时断开连接。

  • ChM:跳频表,主机根据信道情况给出一张跳频表,约定和从机可用的信道(0-36信道),0表示该信道不可用,1表示该信道可用。

  • Hop:跳频阶跃,hop是一个5~16的值。

  • SCA:休眠时钟校正范围。

 

跳频算法介绍:

跳频算法用于数据连接时候,数据信道为37个,跳频公式如下:  unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37

                                        fn+1=(fn+hop) mod 37 

hop是一个5~16的值,每次调频之后中心频率加hop值 mod 37。因为都是正整数,这个表达式在软件中非常容易实现,软件中通过求余运算便能完成运算,协议规定第一次连接事件中fn=0,fn+1=(0+hop) mod 37,也就是hop信道编号。

 

02

连接事件

 

连接请求发出之后,开始进入连接状态,空中数据包如下所示,由绿色部分转变为黄色部分。

 

 

进入蓝牙连接状态,连接状态的数据包格式如下所示,PUD数据包包含两个部分,头字说明和数据包,头字说明里面有几种类型,分别在LLID里面详细规定,NESN和SN控制主从发送的数据包是否被正确接收。

  • LLID:数据包类型格式

  • NESN:下一个数据包序列

  • SN:数据包序列

 

NESN和SN是配合使用,他们的作用是来标识主从是否正确交互。如主从交互所示,主发心跳包或者数据时,标记NESN和SN给从机,从机在接收到主机标识的NESN和SN之后,回传NESN和SN+1给主,主接收到和之前发送的相差1表示之前数据正确传输,如果主机接收到的回传值是非(NESN和SN+1),表示数据可能在空中存在都是,此时需要重传。

 

03

数据交互

 

从机发起了MTU更新:

 

可以发现该LL Data出现橙黄色部分,抓包工具对数据进行的解析,橙黄部分表示从机要求更新MTU的大小,然后和主机相互约束一个MTU的值,后面数据包的格式及按照新约定的MTU大小来传输数据。

 

 

总结

用一张图作为总结,整个链路层的连接的流程图如下所示:

 

所以要想连接一个蓝牙设备,主设备只需要做几个动作,自身初始化,扫描周边设备,对特点设备发出连接请求,开始交换数据。

到此低功耗蓝牙就相互连接上了,后面应用层数据交互和加密解密就要交给GAP层和GATT层,SM层来完成,我们下次再讲解。

 

无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。

诚邀各大蓝牙芯片原厂入群!

诚邀各大蓝牙顶级代工厂、方案厂入群!

诚邀各大蓝牙品牌厂商产品经理入群!

还不快上车~

 

千呼万唤始出来,无线技术联盟终于准备把大家召集到一起,帮助有需要的人打通蓝牙无线相关的技术,市场,芯片渠道,商务对接,一群在手,蓝牙无忧。

 

「Bluetooth5 堂 微信交流群」

 

申请流程:

① 因群人数已超过限制人,请先微信扫描以下小编微信二维码或添加小编微信号(blecoder),添加微信时请将您的个人信息进行备注,以便小编登记。

② 由小编逐个邀请入群,请大家耐心等待!谢谢理解与支持!

 

加小编请记得备注内容:您的姓名、公司名称、职位

无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。

 

<meta name="referrer" content="never">

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值