我想根据连接到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.
....
}
这是工作吗?这是实现这一目标的最佳方式吗?
谢谢你提供的所有帮助。
亲爱的马特拉德,
当您在需要更改广告间隔时,必须更改App.c中的209和210行。
所以你提到的功能很好。
请注意,current_app_adv_int_min&current_app_adv_int_max必须是相同的。
此致,
guillaume。
嗨guillaume,
如果您设置INTV_MIN和INTV_MAX彼此不同,您是否知道会发生什么?
从我的测试中,当INTV_MIN
你知道是否有任何副作用?如果忽略INTV_MIN,它对什么是好的?
(我只是出于好奇心而感兴趣)。
谢谢,
oren.
#define app_adv_int_min 1100.
#define app_adv_int_max 1100.
1100意思是?单元??
嗨HRG,我相信该单位是1/100秒。
布尔
je_dialog
你好,
您应该将数字1100乘以0.625以获取事件之间的线索数。所以1100 => 688ms。
嗨je_dialog
yu确定吗?因为它是广告间隔所以1100 *(1/100)= 11秒!!当或者是1100 * 0.625 = 687.S毫秒?因为在从电力分析中检查两个广告活动的时间约为680毫秒!!
嗨HRG,
看到我上面的答案。
除了设置之外,堆栈将不得不为广告添加一个随机数,以避免两个单独的设备连续碰撞空中。所以广告将波动一些+/- 10ms
Hello HRG,是的,你是对的:我在我们有不同的计算时误认为我们的灯垒SW。
Main.c中的线81和83应用了0.625的多过,所以680ms是正确的值。
#define app_adv_int_min 0x20 // * 0.625ms(+伪随机advdelay从0到10ms)
BR JE_DIALOG.
你好,
只是在添加这个。您将不得不停止,然后重新启动广告以实际更改间隔。
嗨je,
在#8中,您提到(BLE)堆栈将添加随机数(0〜10ms)App_adv_int_max,而在我们的测试中,我们没有看到此随机添加到间隔:
- 当我们同时启动3DA模块(使用相同的固件)时,我们几乎无法扫描所有3个模块(有时我们只能扫描1,有时候2)。
- 如果我们逐个启动3Da模块,我们每次可以扫描所有3个模块。
- 如果我们为每个模块带来不同的app_adv_int_max值的固件,并同时向3个模块加电,我们也可以每次扫描所有3个模块。
请帮助检查和建议..
谢谢。
亚历克斯
嗨,亚历克斯,
根据蓝牙规范,广告事件以规则的间隔发生,这些间隔略微修改,随机延迟以帮助干扰避免。即使没有这种机制,随着时间的推移,不同的广告间隔应该漂移并停止彼此重叠(无论您的广告如何开始,您的扫描仪无法发现其他设备的时间)。你使用不同的BD地址吗?你的软件版本是什么?
谢谢mt_dialog.
谢谢mt ..
你使用不同的BD地址吗?
- 是的,我们为每个模块具有不同的BDA。
你的软件版本是什么?
- 基于SDK304开发的固件。
亚历克斯。
嗨,亚历克斯,
如果广告活动重叠,请尝试定义CFG_TRNG配置,然后再次检查吗?
谢谢mt_dialog。
嗨对话框
我们与#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.
丹麦
嗨Ciano,
请确保在580中下载的图像具有所定义的CFG_TRNG,我将您的场景与SDK 5.0.2.1在未连接模式(不同的广告字符串,不同的BD_Addresses和相同的广告间隔不同)中使用SDK 5.0.2.1测试了您的场景并且通过连接两个重置引脚,我同时在两个板上发出复位。我可以用嗅探器和普通的Android BLE应用程序妥善看到电路板。我可以获得一个设备和损坏的广告数据的唯一方法是CFG_TRNG未定义。当TRNG定义时,请检查嗅探器附件。
谢谢mt_dialog.
嗨对话框
我忘了提到的一件事是我正在使用计时器每一秒重新启动广告。我每次都改变广告数据。我使用user_non_connectable_advertise_conf.intv = 16000设置广告,这是10秒。因此,我的有效间隔由我的1秒计时器确定,我停止并重新启动广告。
现在我的问题是:当蓝牙堆栈有其广告时,仍然会增加一个随机的0-10 ms延迟到广告每秒重新启动它?
如果在这种情况下没有添加随机延迟,那么这可以解释我在空中遇到广告的碰撞。
期待您的回答。
此致,
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.
谢谢你的答案。
还有一个问题:
如我所理解的,然后将随机延迟添加到广告间隔I的范围为10毫秒。是否可以将此范围增加到500或1000ms(如1000ms)?
目前,我用App Timer Setup从固定延迟加上了从-500ms到500ms的随机(trng)时间手动完成了这一点......这会及时传播广告,我几乎没有看到与许多fobs的任何冲突。
此致,
Ciano Frost.
丹麦
嗨Ciano,
根据BLE规范,在广告操作中插入的延迟位于ROM代码中,您无法更改。
谢谢mt_dialog.
十分感谢你分享这些信息。
我现在没有更多的问题。
此致,
Ciano Frost.
丹麦。