在编程上更改广告速率

21帖子 / 0新
最后一篇文章
汽车
离线
最后一次露面:5年3个月前
专家
加入:2014-01-20 21:48
在编程上更改广告速率

我想根据与DA14580连接的传感器更改广告间隔。我计划通过将APP.C中的第209和210行更改为可以通过另一个函数更新的全局变量来做到这一点。

因此,我会在app.c中有这样的东西:
void app_adv_start(void)
{
...
cmd-> intv_min = current_app_adv_int_min;//是app_adv_int_min
cmd-> intv_max = current_app_adv_int_max;//是app_adv_int_max
...
}

这个可以吗?这是实现这一目标的最好方法吗?

谢谢你提供的所有帮助。

gl_dialog
离线
最后一次露面:3年3个月前
职员
加入:2014-02-07 13:35
亲爱的Motred,

亲爱的Motred,

当您需要更改广告间隔时,必须更改App.c中的两行209和210时,您是对的。
因此,您提到的功能很好。
请注意,current_app_adv_int_min&current_app_adv_int_max必须相同。

最好的祝福,

Guillaume。

奥伦
离线
最后一次露面:1年4个月前
专家
加入:2014-06-28 22:03
嗨,吉拉姆,

嗨,吉拉姆,
您知道如果将INTV_MIN和INTV_MAX设置为彼此不同,会发生什么?
从我的测试中,当intv_min

您知道是否有任何副作用要这样做?如果忽略了intv_min,那有什么好处?
(我只是出于好奇而感兴趣)。

谢谢,
奥伦

HRG
离线
最后一次露面:2年2个月前
大师
加入:2014-08-05 13:37
#Define App_adv_int_min

#Define App_adv_int_min 1100
#Define App_adv_int_max 1100
1100意味着??单元??

je_dialog
离线
最后一次露面:4天1小时前
职员
加入:2013-12-05 14:02
嗨,HRG,我相信单位

嗨,HRG,我相信这些单位是1/100秒。

br

je_dialog

mhv_dialog
离线
最后一次露面:4天20小时前
职员
加入:2013-12-06 15:10
你好,

你好,

您应该用0.6​​25将数字1100乘以获得事件之间的米利环次数。因此,1100 => 688ms。

HRG
离线
最后一次露面:2年2个月前
大师
加入:2014-08-05 13:37
嗨,je_dialog

嗨,je_dialog

你确定吗?因为它是广告间隔,所以1100*(1/100)= 11秒!?还是1100 * 0.625 = 687.s MSEC?因为在签到电源分析时,两个广告活动之间的时间约为680毫秒!

mhv_dialog
离线
最后一次露面:4天20小时前
职员
加入:2013-12-06 15:10
嗨,hrg,

嗨,hrg,

请参阅上面的答案。

除了设置外,堆栈还必须在广告中添加一个随机数,以避免两个单独的设备在空气中持续相撞。因此,广告将波动一些+/- 10ms

je_dialog
离线
最后一次露面:4天1小时前
职员
加入:2013-12-05 14:02
你好HRG,是的,你是对的

您好HRG,是的,您是对的:我错误地看着我们的Beacon SW,我们的计算有所不同。

Main.C中的第81和83行应用于0.625,因此680ms是正确的值。

#Define App_Adv_int_min 0x20 // *0.625ms(+伪随机advdelay从0到10ms)

br je_dialog

mhv_dialog
离线
最后一次露面:4天20小时前
职员
加入:2013-12-06 15:10
你好,

你好,

只是添加。您将必须停止,然后重新启动广告才能实际更改间隔。

亚历克斯
离线
最后一次露面:2年3个月前
加入:2014-08-20 03:39
嗨,Je,

嗨,Je,

在#8中,您提到(ble)堆栈将在App_adv_int_max上方添加随机数(0〜10ms),而在我们的测试中,我们没有看到此随机添加到该间隔:
- 当我们同时加电3个DA模块(带有相同的固件)时,我们几乎无法扫描所有3个模块(有时我们只能扫描1,有时2)。
- 如果我们逐一为3个DA模块供电,则可以每次扫描所有3个模块。
- 如果我们用不同的APP_ADV_INT_MAX值燃烧固件到每个模块中,并同时供电3个模块,我们也可以每次扫描所有3个模块。

请帮助检查和建议。

谢谢。
亚历克斯

mt_dialog
离线
最后一次露面:1周2天前
职员
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

根据蓝牙规格,广告事件是定期发生的,并随机延迟稍作修改,以帮助避免干扰。即使没有这种机制,随着时间的流逝,不同的广告间隔也应漂移并停止重叠彼此(无论您的广告在您的扫描仪无法发现的其他设备都无法发现的时间内启动多长时间)。您使用不同的BD-ADDRESSES吗?您的软件版本是什么?

谢谢mt_dialog

亚历克斯
离线
最后一次露面:2年3个月前
加入:2014-08-20 03:39
谢谢你

谢谢你

您使用不同的BD-ADDRESSES吗?
- 是的,每个模块的BDA都不同。
您的软件版本是什么?
- 基于SDK304开发的固件。

亚历克斯。

mt_dialog
离线
最后一次露面:1周2天前
职员
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

您可以尝试定义CFG_TRNG配置,并再次检查广告事件是否重叠?

谢谢mt_dialog。

ciano
离线
最后一次露面:1天3小时前
加入:2014-10-03 08:13
嗨对话框

嗨对话框
我们有与#11相同的问题,我们正在使用SDK 5.0.2.1。

信息:
我们使用的是“ App_easy_gap_non_connectable_advertise_start_create_msg”,该设置CMD-> intv_max和cmd-> intv_min同样相同
cmd-> intv_max = user_non_connectable_advertise_conf.intv;
cmd-> intv_min = user_non_connectable_advertise_conf.intv;

在“ da1458x_config_advanced.h”中启用了真正的随机数生成器
#define cfg_trng

希望您有解决方案,因为这是应用程序的真正问题。

最好的祝福,
Ciano Frost
丹麦

mt_dialog
离线
最后一次露面:1周2天前
职员
加入:2015-06-08 11:34
嗨,ciano,

嗨,ciano,

请确保在580中下载的图像具有定义的CFG_TRNG,我在修改的模板中使用SDK 5.0.2.1测试了您的场景,以不可连接的模式(不同的广告字符串,不同的BD_ADDRESS和相同的广告间隔)以不可连接的模式进行广告。通过连接两个重置销,我同时在两个板上发出重置。我可以用嗅探器和普通的Android BLE应用正确地看到木板。我唯一可以获得一台设备并损坏的广告数据的方法是何时CFG_TRNG未定义。当定义trng时,何时未定义trng时,请检查嗅探器附件。

谢谢mt_dialog

附件:
ciano
离线
最后一次露面:1天3小时前
加入:2014-10-03 08:13
嗨对话框

嗨对话框

我忘了提到的一件事是,我正在使用计时器每秒重新启动广告。我每次都会更改广告数据。我用USER_NON_CONNECTABLE_ADVERTISE_CONF.INTV = 16000设置广告,即10秒。因此,我的有效间隔由我的1秒计时器确定,在那里我停止并重新启动广告。

现在,我的问题是:当蓝牙堆栈每秒重新启动广告时,是否仍会添加随机的0-10毫秒延迟的广告?
如果在这种情况下未添加随机延迟,那么这可以解释我在空中广告的碰撞。

期待您的回答。
最好的祝福,
ciano

mt_dialog
离线
最后一次露面:1周2天前
职员
加入:2015-06-08 11:34
嗨,ciano,

嗨,ciano,

因此,您每1秒钟广告1个广告包,这是由发行广告开始的经过的计时器来定义的。这解释了您的实验,第一个广告消息并没有延迟应用于它。在发布App_Adv_start之后,广告字符串与其他DUT在下一个广告事件之后同时传输,以随机延迟重新安排,因此在第一个消息中,您发送的第一个消息之间存在两条广告消息之间的碰撞。关于您所经历的工作的工作是减少广告间隔,以便在1秒内传输第二个广告字符串,并随机延迟以插入广告间隔,以使两个广告字符串不会碰撞。

您可以计算已填充的广告字符串,并在第二个磁性广告字符串中停止广告(将正确接收),您可以捕获广告的完整,并在THA THA THA tha apser appers aps apper appers ables natvers开始广告时启动计时器。

这是关于如何计算广告活动的小片段:

enum arch_main_loop_callback_ret count_adv_events(void)
{
uint8_t temp_last_ble_event;
temp_last_ble_event = Arch_last_rwble_evt_get();
if(app_last_ble_event!= temp_last_ble_event)
{
app_last_ble_event = temp_last_ble_event;
if(app_last_ble_event == ble_evt_end)
adv_count ++;
如果(adv_count == 2)
{
adv_count = 0;
app_easy_gap_advertise_stop();
}
}
返回goto_sleep;
}

谢谢mt_dialog

ciano
离线
最后一次露面:1天3小时前
加入:2014-10-03 08:13
谢谢你的答案。

谢谢你的答案。

还有一个问题:
据我了解,然后将随机延迟添加到10毫秒范围内的广告间隔I中。是否可以将此范围增加到500或1000ms?

目前,我已经通过固定延迟以及从-500ms到500ms的随机延迟(TRNG)的App Timer设置手动完成此操作...这会及时传播广告,而且我几乎看不到与许多FOB的任何碰撞。

最好的祝福,
Ciano Frost
丹麦

mt_dialog
离线
最后一次露面:1周2天前
职员
加入:2015-06-08 11:34
嗨,ciano,

嗨,ciano,

广告操作中插入的延迟是根据BLE规范在ROM代码中的,您无法更改。

谢谢mt_dialog

ciano
离线
最后一次露面:1天3小时前
加入:2014-10-03 08:13
非常感谢

十分感谢你分享这些信息。

我现在没有更多的问题。

最好的祝福,
Ciano Frost
丹麦。

主题锁定