我想根据连接到DA14580的传感器的数据更改广告间隔。我计划通过将app.c中的第209行和第210行更改为可以由另一个函数更新的全局变量来实现这一点。
所以我在app.c中会有这样的内容:
void app_adv_start(void)
{
...
cmd->intv\u min=current\u app\u adv\u int\u min;//是app\u adv\u int\u min
cmd->intv\u max=current\u app\u adv\u int\u max;//是app\u adv\u int\u max
....
}
这是工作吗?这是实现这一目标的最佳方式吗?
谢谢你提供的所有帮助。

亲爱的莫特瑞德,
你说得对,如果你需要改变广告时间间隔,应用程序c中的第209行和第210行都必须改变。
所以你提到的功能很好。
请注意,current_app_adv_int_min&current_app_adv_int_max必须是相同的。
致以最诚挚的问候,
纪尧姆。
嗨,纪尧姆,
你知道如果你将intv\u min和intv\u max设置为不同会发生什么吗?
根据我的测试,当intv\u min
你知道这样做有没有副作用吗?如果忽略intv\u min,它有什么好处?
(我只是出于好奇才感兴趣)。
谢谢,
oren.
#定义APP\u ADV\u INT\u MIN 1100
#定义APP\u ADV\u INT \u MAX 1100
1100意思是?单元??
嗨HRG,我相信该单位是1/100秒。
比尔
JE\U对话框
你好,
您应该将数字1100乘以0.625以获取事件之间的线索数。所以1100 => 688ms。
嗨je_dialog
你确定吗?因为是广告间隔所以1100*(1/100)=11秒??还是1100*0.625=687.s毫秒?因为在检查电源配置时,两个广告事件之间的时间约为680毫秒!!
嗨HRG,
看到我上面的答案。
除了设置之外,堆栈将不得不为广告添加一个随机数,以避免两个单独的设备连续碰撞空中。所以广告将波动一些+/- 10ms
你好,hrg,是的,你是对的:我错看了我们的信标软件,我们有一个不同的计算。
Main.c中的线81和83应用了0.625的多过,所以680ms是正确的值。
#定义APP\u ADV\u INT \u MIN 0x20//*0.625ms(+伪随机advDelay从0到10ms)
BR JE\u对话框
你好,
只是补充一下。你将不得不停止,然后重新开始广告,以真正改变间隔。
嗨,杰,
在#8中,您提到(BLE)堆栈将在APPŠADVŠu INTŠMAX上方添加随机数(0~10ms),而在我们的测试中,我们没有看到此随机添加到间隔:
-当我们同时启动3个DA模块(使用相同的固件)时,我们很难扫描所有3个模块(有时我们只能扫描1个,有时2个)。
-如果我们一个接一个地打开3个DA模块,我们每次都可以扫描所有3个模块。
- 如果我们为每个模块带来不同的app_adv_int_max值的固件,并同时向3个模块加电,我们也可以每次扫描所有3个模块。
请帮助检查和建议..
谢谢。
亚历克斯
嗨,亚历克斯,
根据蓝牙规范,广告事件以规则的间隔发生,这些间隔略微修改,随机延迟以帮助干扰避免。即使没有这种机制,随着时间的推移,不同的广告间隔应该漂移并停止彼此重叠(无论您的广告如何开始,您的扫描仪无法发现其他设备的时间)。你使用不同的BD地址吗?你的软件版本是什么?
谢谢你的对话
谢谢mt ..
你使用不同的BD地址吗?
-是的,我们每个模块有不同的BDA。
你的软件版本是什么?
-基于SDK304开发的固件。
亚历克斯。
嗨,亚历克斯,
请您尝试定义CFG\u TRNG配置,并再次检查广告事件是否重叠?
谢谢你的对话。
嗨对话框
我们的问题与#11相同,我们使用的是SDK 5.0.2.1
信息:
我们使用“app_easy_gap_nonnectable_advertise_start_create_msg”,它相同地设置cmd-> intv_max和cmd-> intv_min
cmd->intv\u max=user\u non\u connectable\u播发_配置intv;
cmd-> intv_min = user_non_connectable_advertise_conf.intv;
真正的随机数生成器在“da1458x_config_advance.h”中启用了
#定义CFG\u TRNG
希望你有一个解决方案,因为这是一个真正的问题的应用程序。
最好的祝福,
西亚诺霜
丹麦
嗨Ciano,
请确保在580中下载的图像具有所定义的CFG_TRNG,我将您的场景与SDK 5.0.2.1在未连接模式(不同的广告字符串,不同的BD_Addresses和相同的广告间隔不同)中使用SDK 5.0.2.1测试了您的场景并且通过连接两个重置引脚,我同时在两个板上发出复位。我可以用嗅探器和普通的Android BLE应用程序妥善看到电路板。我可以获得一个设备和损坏的广告数据的唯一方法是CFG_TRNG未定义。当TRNG定义时,请检查嗅探器附件。
谢谢你的对话
嗨对话框
有一件事我忘了提,那就是我正在用计时器每秒钟重新启动一次广告。我每次都会更改广告数据。我用用户\非\可连接\广告设置了广告_配置intv=16000,即10秒。所以我的有效间隔是由我的1秒计时器决定的,在这里我停止并重新启动广告。
现在我的问题是:当蓝牙堆栈有其广告时,仍然会增加一个随机的0-10 ms延迟到广告每秒重新启动它?
如果在这种情况下没有添加随机延迟,那么这可以解释我在空中遇到广告的碰撞。
期待你的回答。
最好的祝福,
齐亚诺
嗨Ciano,
因此,您每1秒广告1广告数据包,这是由发布广告启动的经过时间的定时器定义。这解释了你是经验的,第一个广告消息没有应用于它的延迟。在APP_ADV_START发出之后,广告字符串在与随机延迟重新安排下一个广告事件之后与其他DUT同时传输,所以在您发送的第一个消息中,两个广告消息之间存在碰撞。周围的工作是为了减少广告间隔,使得第二广告串在1秒间隔内传输,随机延迟以插入广告间隔,使得两个广告字符串不会碰撞。
你可以数一数你已经发出的广告字符串,并在第二个发出的广告字符串中停止广告(这将被正确接收),你可以捕捉广告的完成情况并启动计时器,当计时器结束时,再次开始广告。
这是一个小片段,你如何计算广告活动:
枚举arch\u main\u loop\u callback\u ret count\u adv\u events(void)
{
uint8\t temp\u last\u ble\u事件;
temp_last_ble_event=arch_last_rwble_evt_get();
if(app_last_ble_event!= temp_last_ble_event)
{
app\u last\u ble\u event=临时\u last\u ble\u事件;
if(app\u last\u ble\u event==ble\u EVT\u END)
adv_count ++;
if(adv_count == 2)
{
adv\ U计数=0;
app_easy_gap_advertise_stop();
}
}
回到睡眠状态;
}
谢谢你的对话
谢谢你的回答。
还有一个问题:
据我所知,那么在10ms的范围内添加到广告间隔I的随机延迟是否可以将这个范围增加到500或1000ms?
目前,我已经做到这一点手动应用程序定时器设置从一个固定的延迟加上随机(TRNG)时间从-500毫秒到500毫秒。。。这及时地传播了广告,我几乎看不到与许多FOB的碰撞。
最好的祝福,
西亚诺霜
丹麦
嗨Ciano,
广告操作中插入的延迟根据BLE规范位于ROM代码中,您不能更改它。
谢谢你的对话
非常感谢你提供的信息。
我现在没有更多的问题。
最好的祝福,
西亚诺霜
丹麦。