查看: 2034|回复: 2

[资料发布] BLE GATT主从机通信流程介绍及通信参数配置建议

[复制链接]

93

主题

99

帖子

381

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
381
发表于 2021-4-1 11:18:47 | 显示全部楼层 |阅读模式
  1 BLE GATT主从机通信流程介绍

  一般来讲,BLE GATT主从机间通信流程可简述为以下几个阶段,其中配对步骤可以省略。具体如图1所示:

  下文将以E92主从一体模块+利尔达低功耗蓝牙模块调试工具APP BleToolForE9x APP作主机,E95透传从机模块作从机,来详细讲述主从机通信流程。

图1 BLE GATT主从机间通信流程

  1.1 从机广播

  E95透传从机模块的MODE_CTL、PWR_CTL、BT_CTL引脚均接低电平,上电即处于广播状态、唤醒状态和指令模式,可被主机搜索到。

  1.2 主机扫描

  E92主从一体模块的PWR_CTL引脚接低电平,上电就处于广播状态、唤醒状态,软件界面设置好扫描参数,点击开始扫描,用户可通过从机名称和MAC地址来分辨哪个是目前需要连接的从机。
注:扫描参数栏一般只需设置“扫描模式”为主动,“RSSI阈值”为-60dBm,其他参数项保持默认即可,具体每个参数项含义请参考利尔达《BLE透传 Questions and Answers _V1.00》Q&A文档“Q4”小节

图2 调试工具APP主机扫描界面

  1.2 主机发起连接

  软件界面点击“connect按钮”,去连接目标从机,跳到图3所示界面,代表连接成功。

图3 主机发起连接
图4 调试工具APP主机连接界面

  1.3 配对

  当从机设置了配对密码时,主机发起连接后,需要填写正确的从机配对密码,才能成功建立连接。

  由于调试工具APP目前没有开发配对密码这部分内容,所以直接讲解E95、E92配对密码相关指令。

  注:普通E92主从一体版本没有配对功能,E92配对版才有此功能。

图5 E95从机配对密码设置指令
图6 E95从机设置配对密码为123

  以上E95设置的配对密码是123,转成16进制是0x7B。

图7 E92主机输入配对密码指令
图8 主机输入配对密码123

  注:只要初次连接成功,那么下次连接无需再输入从机配对密码,如下图所示,E92主机发起连接后,并没有跳出0x8E事件,要求输入配对密码。

图9 主机再次发起连接,并没有0x8E事件产生,提示输入配对密码

  1.4 主机使能notify

  蓝牙协议规定,从机通过notify通知通道(即主机只接收,不回复)给主机发数据前,主机必须打开notify开关,允许从机给自己发数据,具体如下图10所示:

图10 主机使能notify

  1.5 主从机间进行GATT数据通信

  主从机间成功建立连接后,主机会发现从机的多个服务和特征值,“利尔达透传服务”的UUID是0xFE60,write通道UUID是0xFE61,notify通道的UUID是0xFE62。

  注意,E92主机使用0x13写特征值指令给E95从机发数据时,指令中Addr、UUID字段必须填写正确的从机MAC地址、从机write通道UUID(0xFE61)。

图11 从机给主机发数据00112233445566778899
图12 主机收到从机发来的数据00112233445566778899
图13 主机给从机发送数据666666
图14 从机收到数据发来的数据666666

  1.6 断开连接

  主、从机任何一方都可以主动发起断开连接。

图15 主机发起断开连接
图16 从机发起断开连接

  2 BLE GATT通信参数配置建议

  从机一般需要配置串口参数、连接参数、广播参数、配对密码、MTU等。

  主机一般需要配置串口参数、连接参数、扫描参数、MTU等。

  1.串口参数:配置成跟MCU相同即可。

  2.连接参数:包含最小连接间隔、最大连接间隔、从机潜伏次数、连接丢失监测超时时间这4个参数,客户一般需要设置一下最小/最大连接间隔,从机潜伏次数设置成0,连接丢失监测超时时间保持默认即可。
  1)连接间隔:两个连接事件之间的时间间隔,连接间隔以1.25ms为单位,取值范围是6(7.5ms)~3200(4s)。
长的连接间隔的优势是显著地节省功耗,因为设备可以在连接事件之间有较长时间的休眠,坏处是当设备有应用数据需要发送时,必须要等到下一个连接事件;短的连接间隔优势是两设备连接频发,可以更快地收发数据,不利之处是设备因连接事件的到来而被频繁的唤醒,会有较多功耗。
  2)从机潜伏次数:从机设备没有数据要发时,可跳过一定数目的连接事件的值,取值范围是:0-499。数字约小通信速度越快,但是功耗越高。
注意在距离远或者干扰大的时候,如果暂无数据通信需求,那么把这个值设大可以减少连接断开的概率。
  3)连接丢失监测超时时间:主从机设备如果在这段时间内,没有及时收到对方的回复,那么判断此连接事件已断开,取值范围是:10ms~32s。
总之,主从机双方都可以发起更新连接事件,更新完最终产生的连接参数是由主机决定的,主机会根据具体使用情况在最小~最大连接间隔范围内,选择合适的连接间隔时间,这个具体值是不可控的,实际使用过程中需要客户不断尝试。
例如客户想把连接间隔设置成20ms,那么可以把从机和主机的最大连接间隔都改成20ms,最小连接间隔保持默认,那么从机或主机发起连接更新后,主机一般会选择自身的最大连接间隔作为最终的连接间隔。

  3.广播参数:包含广播间隔、广播数据、扫描响应数据,其他参数保持默认即可。
  1)广播间隔:两个广播事件之间的时间间隔,单位是625us。广播间隔越大,功耗越低,但是广播数据的发送频次也就越低;广播间隔越小,功耗越高,但是广播数据的发送频次也就越高。
  2)广播数据:共31字节,数据格式是len(1byte)+type(1byte)+value(nbytes)。
  3)扫描响应数据:主机设置成主动扫描时,当主机扫描到从机广播事件后,主机会发起扫描请求scan_req事件,从机收到后需要回复扫描响应scan_rsp事件。
共31字节,数据格式也遵循len+type+value格式,利尔达从机默认扫描响应数据是从机设备名称,type=0x09。

  4.扫描参数:包含扫描间隔、扫描窗口占空比、扫描模式、RSSI阈值、扫描时长、扫描PHY、是否连续扫描、是否允许重复上报、过滤广播。
  1)扫描间隔:scan_intv,单位 625us,一般可设置成≤从机广播间隔。
  2)扫描窗口占空比:=(scan_wind/scan_intv)*100%,取值范围0~100。
  3)客户需要扫描窗口scan_wind开大一些的话,可适当的调大占空比,一般采用默认值50%即可。
  4)扫描模式:主动扫描会去获取从机扫描响应,被动扫描不会,一般设置成主动扫描即可。
  5)RSSI阈值:低于此RSSI阈值的广播数据将不会上报给 MCU,客户可根据主从设备间距、信号强度等因素来选择。
  6)扫描时长:scan_time,一次扫描任务持续的最长时间,客户想增加扫描到从机的可能性,那么可以适当的增加扫描时长,一般采用默认值1s即可。
  7)扫描PHY:一般选择PHY_1M即可。
  8)是否连续扫描:连续扫描,即扫描窗口scan_wind结束后等待扫描间隔scan_intv的时间到后,再次开启扫描,可理解为循环扫描;单次扫描,即扫描窗口scan_wind结束后不再开启下一个扫描窗口。
  9)是否允许重复上报:重复上报不允许的情况下,相同的广播数据只通过串口上报一次。
  10)过滤广播:指定在一次扫描任务中是否过滤重复设备,一般填写从机广播数据的特殊字节。

图17 扫描过程简介

  5.配对密码:是BLE协议层定义的一个通信加密机制,客户可根据需求来决定是否需要设置。

  6.MTU:最大传输单元,空中包每次可发送数据的最大字节数是MTU-3,具体值由主从机双方协商结果为准。

  一般建立连接后,主机或从机都可以发起MTU更新,来提升数据传输速率。注意,一次连接只能更新一次MTU值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

2

帖子

10

积分

助理工程师

Rank: 1

积分
10
发表于 2022-7-1 11:37:39 | 显示全部楼层
看不到图片,能否更新一下
回复

使用道具 举报

93

主题

99

帖子

381

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
381
 楼主| 发表于 2022-7-18 10:48:43 | 显示全部楼层
dabuyang007@sin 发表于 2022-7-1 11:37
看不到图片,能否更新一下

刷新就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表