蓝牙无线电任务优先级

经常会发生蓝牙堆栈需要同时运行多个使用无线电的任务的情况。例如,您可以同时发送广告和扫描新设备。您可以同时保持多个连接处于活动状态。您可以在扫描新设备的同时启动新连接。实际上,您甚至可以在扫描新设备,进行广告宣传以及建立已建立的连接时保持新连接。

实际上,堆栈一次只能执行一项任务(即使这些任务似乎同时运行)。在任何给定时间,只能将无线电配置为执行以下操作之一:

发送一个数据包,或
收到一个数据包,或
在频道上收听
因此,需要同时进行无线电任务的优先级。无线电调度程序将根据优先级决定任务运行的顺序。

默认优先级
蓝牙堆栈可区分4种无线电任务:

扫描
广告
连接发起
连接维护
扫描: 扫描是指在三个广告频道上监听广告包并定期切换频道。扫描是一项低优先级的任务,因为丢失单个广告不是一个严重的问题。其他任务可能需要随时中断扫描,例如保持连接状态。

广告: 广告是指反复发送广告包。广告也不是优先事项。由于广告的确切时间并不重要,因此可以延迟广告包,以使无线电设备可以处理更高优先级的任务。

连接初始化: 连接初始化包含两个步骤:扫描以查找要连接的设备的广告,并在广告之后立即在连接请求窗口中发送连接请求。连接启动具有高优先级,因为

我们想找到第一个快速连接的广告
需要在连接请求窗口中准确发送连接请求
连接维护: 连接维护意味着设备需要在每个连接间隔中向对等设备发送至少一个数据包,并从对等设备接收至少一个数据包(如果定义了从设备等待时间,则从设备可以跳过某些连接间隔。 )这些数据包需要非常严格的时间,不能延迟,丢失很多可能导致连接丢失,因此在连接上发送/接收数据包具有较高的优先级。

此处列出了不同任务的默认优先级。请注意,每个任务首先获得最小优先级,然后可以逐渐增加到最大优先级。下一节将对此进行说明。

最低优先级为255,最高优先级为0。

任务类型分钟优先最高优先扫描191143广告175127连接初始化5515连接1350

动态优先级
蓝牙堆栈使用动态优先级,这意味着每个无线电任务都以较低的优先级开始,并且每次任务调度失败时,其优先级都会增加。这样可以确保同时执行任务。如您在上一节的表格中所见,所有四种无线电任务类型都有最低和最高优先级。默认情况下,将特定于任务的最小优先级分配给任务,可以将其增加到特定于任务的最大优先级。例如,连接比广告具有更高的优先级。但是,如果由于连接维护而未发送许多广告包,则它们的优先级可能会高于最小连接优先级,实际上,短时间内广告可能会具有更高的优先级。

另一个示例是当多个连接打开并且它们的发送/接收窗口重叠时。在这种情况下,将为优先级最高的连接提供服务。服务的连接的优先级降低到最小优先级,其他冲突连接的优先级增加。因此,所有连接均在合理的时间内得到服务。优先级始终以这样的速率增加,即它在监视超时之前达到0(最高)优先级。例如,如果您有两个连接分别具有100ms和10s的监视超时,则第一个连接的优先级会迅速增加,而第二个连接的优先级会缓慢地增长。这样可以确保在监督超时之前为所有连接提供服务。

改变重点
选择默认优先级是为了可以在大多数用例中很好地使用它们。但是,您可能有一个用例,其中默认优先级不能提供最佳解决方案。例如,如果在您的应用程序中快速连接并不重要,但是通过已建立的连接在每个连接间隔中发送数据非常重要,那么您可以降低连接启动过程的优先级。

分钟 和最大 可以在gecko_bluetooth_ll_priorities 结构中定义每种任务类型的优先级 。如果您在结构中引用此结构 gecko_configuration_t ,则默认优先级将被这些值覆盖。(注意:默认优先级在下定义 GECKO_BLUETOOTH_PRIORITIES_DEFAULT)

gecko_bluetooth_ll_priorities priorities = { 191, 143, //scan_min, scan_max
175, 127, //adv_min, adv_max
135, 0, //conn_min, conn_max
55, 15, //init_min, init_max
175, //threshold_coex
16, 16 }; //rail_mapping_offset, rail_mapping_range

// Gecko configuration parameters (see gecko_configuration.h)
static const gecko_configuration_t config = {
//…
.bluetooth.linklayer_priorities = &priorities,
};
这里不讨论threshold_coex。 下一节 将讨论rail_mapping_offset 和 rail_mapping_range。

蓝牙+ RAIL DMP应用程序中的优先级
在Bluetooth + RAIL DMP应用程序中,您的专有协议还需要使用无线电优先级。在这种情况下,蓝牙优先级会映射到较小的RAIL优先级范围,因此您可以定义优先级高于最高蓝牙优先级且优先级低于最低蓝牙优先级的无线电任务。默认情况下,蓝牙优先级映射到16…32 RAIL优先级范围-意味着0蓝牙优先级对应于RAIL优先级16,而255蓝牙优先级对应于RAIL优先级32。这也可以在gecko配置结构中更改为linklayer_priorities的最后两个参数。所述 偏移 限定所述最高优先RAIL(即对应于0蓝牙优先级)和 范围 定义最低和最高优先级之间的差异(默认情况下为32-16 = 16)。

(上述文章阐述归伦茨科技公司所有,转载请注明出处,更多相关信息欢迎关注微信公众号:lenze_tech或微信号:lenzetech,点击http://www.lenzetech.com/)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值