你好,
我有设立扩展睡眠模式(无OPT副本)的麻烦。我们使用自定义的14586板。
在ARCH_MAIN.c中,在步骤INT MAIN(VOID)(第139行)
如果我替换sleep_mode = rwip_power_down();(第176行)leep_mode = mode_active;它每隔一秒连续地传输数据而没有问题。
但是,如果我离开SLEEP_MODE = rwip_power_down()的数据包没有更新。初始化之后,该分组被更新一次,然后将它发送相同的分组每隔一秒。
使用app_add_data_update_to计划adv_data_update_timer_cb未更改,留为100
CFG_MAX_SLEEP_DURATION_PERIODIC_WAKEUP_MS为500。
尝试的值687.5和3000 for .intv_min和.intv_max
app_default_sleep_mode被设置为ARCH_EXT_SLEEP_ON
所有的arch_set_extended_sleep调用都带有参数false (arch_set_extended_sleep(false))。
app_easy_gap_non_connectable_advertise_start ();使用。
系统时钟改变到16MHz。
用于设置MNF_DATA的某些值的定时器0和Systick。
我有两个问题,
1)数据包没有更新
2)从智能片段的当前关卡和开发板的测试点6来看,我不认为它会进入睡眠模式。(在CRO上,基极电压为100mv,发射时为400mV。
能帮我个忙吗?我从你的ble_app_sleepmode开始了这个项目,并修改以适应我们的需要。
谢谢
设备:
嗨anushiya,
为了在没有OTP镜像的情况下在扩展睡眠模式下设置DA14586,您只需将App_default_sleep_mode变量设置为user_config.h到Arch_ext_sleep_on。您不应该修改ARCH_MAIN.c文件,因为它是SDK相关文件。在SDK的BLE_APP_SLEEPMODE示例中,设备为已定义的时间量APP_ADC_DATA_UPDATE_TO发布,其中默认值为30 s。当设备处于广告状态的睡眠模式被设定为与OTP复制扩展睡眠(一次一副本仿真时DEVELOPMENT_DEBUG模式下的系统运行)。上述超时期满之后,如果设备不进入连接状态,它停止广告,所以adv_data_update_timer_cb()执行该app_easy_gap_advertise_stop()。这意味着制造商特定数据将不被更新,并且该设备将进入扩展睡眠模式等待外部事件退出睡眠状态。用户可以按按钮唤醒设备。按下按钮后,设备将开始在预定的时间内再次发布广告。当设备进入连接状态时,睡眠模式变为无OTP拷贝的扩展睡眠。因此,如果您想更新制造商特定数据,则应在User_App_Adv_Start()中设置第二个计时器。 For getting more information with the sleep modes in DA14585/6 product family, please read the教程4:睡眠模式电流测量。
谢谢,PM_DIALOG.
感谢您的及时答复。我不希望连接状态,并希望滥用系统,无限地传输一个数据包x sec。
>,因为它是SDK相关文件,你不应该修改arch_main.c文件。
我并没有改变任何东西。只有让它tranmit时间可持续,我暂时代替SLEEP_MODE = rwip_power_down();与SLEEP_MODE = mode_active arch_main.c(线176),并确认其时间可持续发送。
在user_config.h到ARCH_EXT_SLEEP_ON> app_default_sleep_mode可变
我已经完成了这一点
>在SDK中,该设备通告时间APP_ADV_DATA_UPDATE_TO的具有30秒的缺省值定义的量的ble_app_sleepmode例子。当设备处于广告状态的睡眠模式被设定为与OTP复制扩展睡眠(一次一副本仿真时DEVELOPMENT_DEBUG模式下的系统运行)。上述超时期满之后,如果设备不进入连接状态,它停止广告,所以adv_data_update_timer_cb()执行该app_easy_gap_advertise_stop()。这意味着制造商特定数据将不被更新,并且该设备将进入扩展睡眠模式等待外部事件退出睡眠状态。
我已经评论在adv_data_update_timer_cb app_easy_gap_advertise_stop()(),并用app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO,adv_data_update_timer_cb)取代;并建立APP_ADV_DATA_UPDATE_TO 100
(这就是为什么当我改变SLEEP_MODE = mode_active在arch_main.c,它无限期发送)
我不想连接状态,并希望无限期发送一个数据包过X秒
>用户按下按钮即可唤醒设备。按下按钮后,设备将开始在预定的时间内再次发布广告。当设备进入连接状态时,睡眠模式变为无OTP拷贝的扩展睡眠。因此,如果您想更新制造商特定数据,则应在User_App_Adv_Start()中设置第二个计时器。
我希望设备永远不会指望按下按钮。设备也不会进入所在状态。我希望设备以特定的间隔传输PAKET,并在没有OTP副本的情况下进入延长睡眠状态。这就是为什么我更改了app_easy_gap_undirectional_advertise_start();作为app_easy_gap_non_connectable_advertise_start();
此外,所有ARCH_SET_EXTEDDE_SLEEP调用都会调用参数false(ARCH_SET_EXTEDDED_SLEEP(FALSE))。原始exaple有Arch_set_extended_sleep(true)
>为了获得更多信息,在DA14585 / 6产品系列中获取睡眠模式,请阅读教程4:睡眠模式电流测量。
这正是我所用的东西。我尝试了两种方式。1)使用smartsnippets把代码在闪存,使得不需要JTAG不被连接。2)在Keil_5按下调试,让程序运行,然后再调试出来。两次正确的居高不下。
非常感谢您的帮助。
请注意,我可以送你整个项目的设置,如果我可以上传更大的文件,或者如果你特别希望看到某个文件,我可以上载。
嗨anushiya,
谢谢你的详细反馈。
您使用的是哪个SDK版本?我使用的是SDK6.0的最新版本。10.我可以找到sleep_mode = rwip_power_down();在第195行中,在Arch_main.c文件中。在(1)循环中,如果使用mode_active替换RWIP_POWER_DOWN(),则似乎设备永远不会进入睡眠模式。
你算将设备配置为广播或使用非连接的广告。当一个设备作为一个广播,这意味着它能够支持唯一的非连接的广告。请按照以您的设备配置为广播下面的步骤。我在SDK6.0.10的ble_app_sleepmode为例进行这些步骤
如果你发现任何有用的答案,请标记为“接受”。
谢谢,PM_DIALOG.
感谢您的帮助。您的建议帮助我将设备放在广播模式上。但仍有以下两个问题。
1)MNF_DATA_UPDATE()仍未调用和
2)在传输时间期间显示0.5mA的SmartSnippets,尖刺(随着调试模式删除)暗示不调用睡眠模式。
(使用示波器,通过主板上的测试点与SmartSnippets值匹配)
我使用的是SDK 6.0.4.326。
我定义user_app_adv_non_connectable_complete(uint8_t)作为
无效user_app_adv_non_connectable_complete(uint8_t状态)
{
// irspective状态,安排下一个传输数据包
app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb);
}
其中APP_ADV_DATA_UPDATE_TO = 3000 - 这应该不会有广播任何影响任何方式
所有ARCH_SET_EXTENDED_SLEEP调用都具有参数“FALSE”,对于NO OTP编程
app_default_sleep_mode = ARCH_EXT_SLEEP_ON
嗨anushiya,
我想让您知道SDK6.0.4是一个非常旧的版本,目前尚未得到支持。为此,我强烈建议您下载并使用最新版本的DA14585 / 6产品系列,即SDK6.0.10。BLE_APP_SLEEP模式示例SDK6.0.10的示例用于步骤我为您提供的步骤,以便在广播模式下设置in设备。每次完成不可连接的广告时,将触发user_app_adv_non_connectable_complete()。因此,您在此函数内设置计时器,当定时器到期时,将执行ADV_DATA_UPDATE_TIMER_CB。请按照SDK的BLE_APP_SLEEPMODE示例,遵循配置设备到广播模式的指南。我建议您只做我提供的修改。不可连接的广告将停止每个app_add_data_update_to,并且将触发adv_data_update_timer_cb()。检查user_app_adv_start()。一旦定时到期,制造商特定数据将在飞行中更新,广告将停止,并且设备将进入扩展睡眠模式。 The manufacture data are stored into the retention RAM, so when the chip wakes up with the button pressing, the adverting date will be updated. If you want to update the manufacturer data while the device is adverting, you should set up a second timer. So you will have a timer to stop adverting and a second timer to update the manufactured specific data.
谢谢,PM_DIALOG.
谢谢你。我会升级到6.0.10
>所以当芯片唤醒按钮按下时,将更新附加日期。
我想要一个定期醒来,而不是按钮唤醒..从外面的世界有臭氧。
>如果你想在设备发布时更新制造商数据,你应该设置第二个定时器。所以你将有一个定时器停止广告和第二个定时器更新制造的具体数据。
我不需要这个。醒来后,发送,更新,睡眠是为我好。
所以在功能齐全,如果我安排我提到是罚款?
谢谢你。
你好,
我下载了SDK 6.0.10.511,并做了你建议的更改。
无效user_app_on_adv_nonconn_complete(uint8_t状态)
{
//日程表的下一个广告数据更新
app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb);
}
空白user_app_on_adv_nonconn_complete (uint8_t状态);
.app_on_adv_nonconn_complete = null,
作为
.app_on_adv_ nonconn _complete = user_app_adv_ nonconn _complete,
(类似于SDK6.0.4.326)
案例GAPM_CANCEL:
{
如果(param->状态!= GAP_ERR-NO-ERROR)
{
ASSERT_ERROR(0);
}
......
}
所以不得不评论app_easy_gap_advertise_stop();在静态void adv_data_update_timer_cb()中
然后将其连续发送。但还是同样的问题。
1)MNF_DATA不被更新,这意味着原始数据的最后两个字节是0000一会儿和更新一次,以0100,然后保持在这一点。
[{ “时间戳”: “2019-06-13T07:14:09Z”, “类型”: “未知”, “MAC”: “80EACA700005”, “bleName”: “”, “RSSI”: - 39“RAWDATA“:” 03030A1811072F2A93A6BDD84152AC0B10992EC6FEED05FFCDAB0100" }]
2)目前的消耗量为2.5mA(请参阅附图。)
嗨anushiya,
让我检查一下,我会尽快回复你。
谢谢,PM_DIALOG.
对此有何更新讨好?
请尝试在SDK的清洁ble_app_sleepmode例如下面的步骤。
如果你想有非连接广告,你应该做以下事情:
1.修改user_app_adv_start()以advertse不可连接的数据包
2.在user_callback_config.h中,移动user_app_adv_undirect_complete。app_on_adv_undirect_complete到。app_on_adv_nonconn_complete.
在此之后,广告数据的适当数据,应该每APP_ADV_DATA_UPDATE_TO秒更新1。
谢谢,PM_DIALOG.
感谢您的答复。尝试了这个,mnf_data正在更新。但是SmartSnippet仍然表示消费2.5mA(在加载代码后关闭Keil环境)。这不是意味着它没有进入睡眠模式。我在我之前的消息中获得了相同的波模式。
嗨anushiya,
如果您发现了以前的答案是有用的,请注明为“接受”。
您可以说明您遵循的程序,以便测量睡眠电流>请注意,设备在广告间隔之间进入睡眠模式。
谢谢,PM_DIALOG.
在您提供的解决方案中,我有一个问题:
在步骤2中,您要求在user_callback_config.h,移动从user_app_adv_undirect_complete。app_on_adv_undirect_complete到。app_on_adv_nonconn_complete。
需要采取的行动。app_on_adv_undirect_complete和。App_on_adv_nonconn_complete将是不同的,不是吗?我有
Inside user_app_adv_non_connectable_complete funtions和分配给。app_on_adv_nonconn_complete = user_app_adv_non_connectable_complete并从上行中删除它
但这并没有奏效。我能知道为什么吗?
关于测量使用两种方法测得的电流I。
1)使用SmartSnippet和混合连接(JTAG和COM端口)。(使用Booter下载代码后,我也尝试从开发板中删除JTAG跳线)。正确绘制为0.5mA(Peack电流5mA和Ave。电流0.5mA)
2)使用的测试点TP6和相应的跳线连接以激活放大器(期望的电流太小)。示波器上的测量是在智能片段接收到的值的100倍。
如果代码将DA14586放入睡眠模式,我希望电流在UA范围内。
我下载了6.0.10.511的新版本,提取了代码,只更改了上面提到的3个项目。
嗨anushiya,
这 。app_on_adv_undirect_complete和。app_on_adv_nonconn_complete是两个完全不同的回调函数,它取决于您正在使用的广告过程。
然而,他们都将如果停止广告程序执行
在您的情况下,您正在使用不可连接的广告,因此如果您将停止命令发送到BLE卡,则将执行APP_ON_ADC_NONCONN_COMPLETE。
静态无效adv_data_update_timer_cb()是第3步能否请你澄清你的意思是它不工作?你可以请说明静态无效adv_data_update_timer_cb()被触发?
请注意,如果你不停止广告,该设备将不会进入睡眠永久性的,但它会进入休眠广告间隔之间。为了测量睡眠模式电流,强烈不推荐SmartSnippets工具箱的使用。请查看本教程教程4:睡眠模式电流测量为了检查你怎么可以测量休眠电流。
谢谢,PM_DIALOG.
嗨,抱歉延迟回来。我仍然困惑,并试图让我的脑袋。
>。app_on_adv_undirect_complete和。app_on_adv_nonconn_complete是两个完全不同的回调函数,它取决于您正在使用的广告过程。
这是我的问题是也。当他们是完全两个不同的功能,你叫我到“2.在user_callback_config.h,摆脱。app_on_adv_undirect_complete到。app_on_adv_nonconn_complete的user_app_adv_undirect_complete”当移动这样的,代替“user_app_adv_undirect_complete”与NULL我有一些问题。现在我有两个“ app_on_adv_undirect_complete来。app_on_adv_nonconn_complete”与‘user_app_adv_undirect_complete’,它的工作原理。但是,当我创建“user_app_adv_non_connectable_complete”与单行这是行不通的。
但是,如果我把它作为最后一行
它的工作原理。
我主要担心的是,它似乎仍然没有休眠之间的传输。
>请注意,如果您不停止广告,设备将永远不会睡眠,但它将在广告间隔之间睡眠。
是,从设备被加电的时间的装置时间可持续发送(广播)。所以,我希望它进入休眠广告间隔之间。
为了测量电流,我使用“UM-B-049 DA1458x Getting started with Development Kit - pro_v1 .pdf”第29页的技术,而不是教程教程4:睡眠模式电流测量因为我需要在运行样本代码“ble_app_sleepmode”时测量14586子板的当前消耗,并使用相同的样本代码“ble_app_sleepmode”来测量自定义板的当前消耗。
目前无论是在哪个CRO解释至2.5mA测量为250mV。(图片之前连接的)。SmartSnippets工具箱功率分析器还测量2.5毫安。
我在进行测量时关闭了Keil开发环境。(从这个线程的开始,那是这种情况)
现在我已经更改为SDK 6.0.10.511
谢谢您的帮助
嗨,我注意到,当我使用DA14586使用子板时,如果我不将默认目标选择BLE_APP_SLEEPMODE_585更改为BLE_APP_SLEEPMODE_586,那么RECTECT消耗要高得多。如果目标选择是BLE_APP_SLEEPMODE_586,则当前测量基底在示波器上是20mV,并且当在跳线连接J1之间串联连接电流表,它显示在4UA睡眠模式电流和小于1mA传输电流。
所以这个假期我只用的是什么recomended行动采取“.app_on_adv_nonconn_complete”,而不是仅仅复制相同的功能单一的问题“ app_on_adv_undirect_complete”
嗨anushiya,
你能请注明你终于如何配置你的设备?你将它作为一个外设模式和使用非连接的广告,或者你将其设置为广播模式?
关于你的第二个问题,是的,你应该建立DA14586设备项目中的闪光是只要你使用这个芯片适当的二进制图像。
谢谢,PM_DIALOG.
>你能请注明你终于如何配置你的设备?你将它作为一个外设模式和使用非连接的广告,或者你将其设置为广播模式?
使用不可连接的广告。(我正在将他们的代码移动到第6.0.4.326中的BLE_APP_EXAMPLE进入新的SDK 6.0.511 BLE_APP_SLEEPMODE示例。我们的电路板有一个外部RAM(因为我们也从DA14585切换到DA14586,并且CS配置为高)。希望这是正确的方式。
你说的“外围模式”是什么意思?我是不是错过了什么场景?上面我接受的答案有3个步骤,我在ble_app_sleepmode例子中做了它们。
正如我上周,2019-07-02 09:43,我仍然不明白为什么“.app_on_adv_nonconn_complete”和“。app_od_adv_undirect_complete”要求指向同一件事“.app_on_adv_nonconn_complete的推荐操作是什么而不是将相同的函数复制为“app_op_adv_undirect_complete”,而不是user_callback_config.h中的“user_app_adv_undirect_complete”?
嗨anushiya,
.app_on_adv_nonconn_complete回调将在非连接广告完成时命中。但是,.app_on_adv_undirect_complete wil在未确定的广告完成后触发。在.app_on_adv_nonconn_complete中,您应该在使用不可连接的广告时,您应该在您想要执行的回调。例如,如果您停止广告,设备进入永久睡眠模式,则可以使用以下功能:
无效user_app_non_conn_complete(uint8_t状态)
{
//禁用BLE和TIMER事件的唤醒。只有外部(GPIO)唤醒事件可以唤醒处理器。
if(status == gap_err_canceled)
{
ARCH_BLE_EXT_WAKEUP_ON();
//配置唤醒按钮
app_button_enable();
}
}
谢谢,PM_DIALOG.
>在.app_on_adv_nonconn_complete中,您应该在使用不可连接的广告时,您应该将您想要执行的回调。
我完全同意。这就是为什么我在以下之前问:
我有
Inside user_app_adv_non_connectable_complete funtions和分配给。app_on_adv_nonconn_complete = user_app_adv_non_connectable_complete并从上行中删除它
但这并没有奏效。我能知道为什么吗?
嗨anushiya,
很抱歉耽搁了。因为你停止了不可连接的广告并且你配置了。App_on_adv_nonconn_complete = user_app_adv_non_connectable_complete,则应该触发user_app_adv_non_connectable_complete。你能不能在调试模式下运行代码,并试着在设备停止广告后找到代码去了哪里?触发了哪个函数?
谢谢,PM_DIALOG.