以编程方式更改广告率

21个帖子/ 0新
最后一篇
马达
离线
最后一次露面:5年7个月前
专家
加入:2014-01-20 21:48
以编程方式更改广告率

我想根据连接到DA14580的传感器的数据更改广告间隔。我计划通过将App.c中的行209和210更改为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(未经验证)
亲爱的马特拉德,

亲爱的马特拉德,

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

此致,

guillaume。

oren.
离线
最后一次露面:1年8个月前
专家
加入:2014-06-28 22:03
嗨guillaume,

嗨guillaume,
如果您设置INTV_MIN和INTV_MAX彼此不同,您是否知道会发生什么?
从我的测试中,当INTV_MIN

你知道是否有任何副作用?如果忽略INTV_MIN,它对什么是好的?
(我只是出于好奇心而感兴趣)。

谢谢,
oren.

HRG.
离线
最后一次露面:2年6个月前
格鲁鲁
加入: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
离线
最后一次露面:5天3小时前
职员
加入:2013-12-05 14:02
嗨HRG,我相信单位

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

布尔

je_dialog

mhv_dialog.
离线
最后一次露面:3个月5天前
职员
加入:2013-12-06 15:10
你好,

你好,

您应该将数字1100乘以0.625以获取事件之间的线索数。所以1100 => 688ms。

HRG.
离线
最后一次露面:2年6个月前
格鲁鲁
加入:2014-08-05 13:37
嗨je_dialog

嗨je_dialog

yu确定吗?因为它是广告间隔所以1100 *(1/100)= 11秒!!当或者是1100 * 0.625 = 687.S毫秒?因为在从电力分析中检查两个广告活动的时间约为680毫秒!!

mhv_dialog.
离线
最后一次露面:3个月5天前
职员
加入:2013-12-06 15:10
嗨HRG,

嗨HRG,

看到我上面的答案。

除了设置之外,堆栈将不得不为广告添加一个随机数,以避免两个单独的设备连续碰撞空中。所以广告将波动一些+/- 10ms

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

Hello HRG,是的,你是对的:我在我们有不同的计算时误认为我们的灯垒SW。

Main.c中的线81和83应用了0.625的多过,所以680ms是正确的值。

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

BR JE_DIALOG.

mhv_dialog.
离线
最后一次露面:3个月5天前
职员
加入:2013-12-06 15:10
你好,

你好,

只是在添加这个。您将不得不停止,然后重新启动广告以实际更改间隔。

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

嗨je,

在#8中,您提到(BLE)堆栈将添加随机数(0〜10ms)App_adv_int_max,而在我们的测试中,我们没有看到此随机添加到间隔:
- 当我们同时启动3DA模块(使用相同的固件)时,我们几乎无法扫描所有3个模块(有时我们只能扫描1,有时候2)。
- 如果我们逐个启动3Da模块,我们每次可以扫描所有3个模块。
- 如果我们为每个模块带来不同的app_adv_int_max值的固件,并同时向3个模块加电,我们也可以每次扫描所有3个模块。

请帮助检查和建议..

谢谢。
亚历克斯

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

嗨,亚历克斯,

根据蓝牙规范,广告事件以规则的间隔发生,这些间隔略微修改,随机延迟以帮助干扰避免。即使没有这种机制,随着时间的推移,不同的广告间隔应该漂移并停止彼此重叠(无论您的广告如何开始,您的扫描仪无法发现其他设备的时间)。你使用不同的BD地址吗?你的软件版本是什么?

谢谢mt_dialog.

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

谢谢mt ..

你使用不同的BD地址吗?
- 是的,我们为每个模块具有不同的BDA。
你的软件版本是什么?
- 基于SDK304开发的固件。

亚历克斯。

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

嗨,亚历克斯,

如果广告活动重叠,请尝试定义CFG_TRNG配置,然后再次检查吗?

谢谢mt_dialog。

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

嗨对话框
我们与#11有同样的问题,我们使用的是SDK 5.0.2.1

信息:
我们使用“app_easy_gap_nonnectable_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_advance.h”中启用了
#define cfg_trng.

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

此致,
Ciano Frost.
丹麦

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨Ciano,

嗨Ciano,

请确保在580中下载的图像具有所定义的CFG_TRNG,我将您的场景与SDK 5.0.2.1在未连接模式(不同的广告字符串,不同的BD_Addresses和相同的广告间隔不同)中使用SDK 5.0.2.1测试了您的场景并且通过连接两个重置引脚,我同时在两个板上发出复位。我可以用嗅探器和普通的Android BLE应用程序妥善看到电路板。我可以获得一个设备和损坏的广告数据的唯一方法是CFG_TRNG未定义。当TRNG定义时,请检查嗅探器附件。

谢谢mt_dialog.

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

嗨对话框

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

现在我的问题是:当蓝牙堆栈有其广告时,仍然会增加一个随机的0-10 ms延迟到广告每秒重新启动它?
如果在这种情况下没有添加随机延迟,那么这可以解释我在空中遇到广告的碰撞。

期待您的回答。
此致,
ciano.

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨Ciano,

嗨Ciano,

因此,您每1秒广告1广告数据包,这是由发布广告启动的经过时间的定时器定义。这解释了你是经验的,第一个广告消息没有应用于它的延迟。在APP_ADV_START发出之后,广告字符串在与随机延迟重新安排下一个广告事件之后与其他DUT同时传输,所以在您发送的第一个消息中,两个广告消息之间存在碰撞。周围的工作是为了减少广告间隔,使得第二广告串在1秒间隔内传输,随机延迟以插入广告间隔,使得两个广告字符串不会碰撞。

您可以计算您在第二个辅助广告字符串中的发布并停止广告(将被正确收到)的广告字符串,您可以捕获广告的完成,并启动计时器,当Tha计时器再次启动广告时。

这是一个小片段,你如何计算广告活动:

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 ++;
if(adv_count == 2)
{
adv_count = 0;
app_easy_gap_advertise_stop();
}
}
返回goto_sleep;
}

谢谢mt_dialog.

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

谢谢你的答案。

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

目前,我用App Timer Setup从固定延迟加上了从-500ms到500ms的随机(trng)时间手动完成了这一点......这会及时传播广告,我几乎没有看到与许多fobs的任何冲突。

此致,
Ciano Frost.
丹麦

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨Ciano,

嗨Ciano,

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

谢谢mt_dialog.

ciano
离线
最后一次露面:3天50分钟前
加入:2014-10-03 08:13
非常感谢你

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

我现在没有更多的问题。

此致,
Ciano Frost.
丹麦。

主题锁定