跳转到主要内容

MNF_DATA更新和ARCH_EXT_SLEEP_ON

1年前

MNF_DATA更新和ARCH_EXT_SLEEP_ON

发布的anushiya0点 20个回复
0的问题

你好,

我有困难在设置延长睡眠模式(没有选择复制)。我们使用自定义14586板。

在arch_main。c程序中的int主要(void)(第139行)

如果我代替sleep_mode = rwip_power_down ();(第176行)与sleep_mode = mode_active;它传输数据不断每一秒没有问题。

但如果我离开sleep_mode = rwip_power_down()包没有得到更新。初始化后,包更新一次,然后每一秒传输相同的数据包。

使用APP_ADV_DATA_UPDATE_TO Adv_data_update_timer_cb计划是没有改变,100

CFG_MAX_SLEEP_DURATION_PERIODIC_WAKEUP_MS是在500年。

和3000年.intv_min .intv_max值687.5

app_default_sleep_mode ARCH_EXT_SLEEP_ON设置

所有arch_set_extended_sleep调用和参数被称为假(arch_set_extended_sleep(假)。

app_easy_gap_non_connectable_advertise_start ();使用。

SysCLK改为16兆赫。

定时器0和MNF_DATA systick用于设置特定的值。

我有两个问题,

1)数据包没有得到更新

2)查看当前水平smartsnippets和开发板的测试点6,我不认为这是进入睡眠模式。(在阴极射线示波器基本电压是100 mv,当传输400 mv。

我可以请一些帮助在这吗?我开始这个项目从你ble_app_sleepmode和修改,以满足我们的需要。

谢谢你!

1年前

PM_Dialog

嗨anushiya,

为了设置DA14586延长睡眠模式没有OTP镜像,你所要做的只是在user_config设置app_default_sleep_mode变量。ARCH_EXT_SLEEP_ON h。你不应该修改arch_main。c文件,因为它是SDK相关文件。ble_app_sleepmode SDK的例子,设备广告定义的时间APP_ADV_DATA_UPDATE_TO 30年代的一个默认值。当设备处于广告状态睡眠模式被设置为扩展和OTP副本(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

1年前

anushiya 0点

谢谢你的及时回复。我不希望连接的状态,希望无限期滥用系统传输数据包之一x秒。

>你不应该修改arch_main。c文件,因为它是SDK相关文件。

我没有改变任何东西。只有标记这些连续跟踪,我暂时代替sleep_mode = rwip_power_down ();arch_main(第176行)。c sleep_mode = mode_active和证实它传输连续跟踪。

>在user_config app_default_sleep_mode变量。h到ARCH_EXT_SLEEP_ON

我做了这个

> ble_app_sleepmode SDK的例子,设备广告定义的时间APP_ADV_DATA_UPDATE_TO 30年代的一个默认值。当设备处于广告状态睡眠模式被设置为扩展和OTP副本(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 ()。

我希望这个设备不会期望一个按钮按下。的设备永远不会进入传热性能状态。我希望设备传送寄在一个特定的时间间隔和进入延长睡眠没有OTP副本。这就是为什么我改变了app_easy_gap_undirectional_advertise_start ();app_easy_gap_non_connectable_advertise_start ();

以及所有arch_set_extended_sleep调用和参数被称为假(arch_set_extended_sleep(假)。原始的做法已经arch_set_extended_sleep(真正的)

>获得更多的信息与DA14585/6产品家族的睡眠模式,请阅读当前测量教程4:睡眠模式

这是什么我使用。我试过两种方式。1)使用smartsnippets把代码在flash JTAG不需要连接。2)在Keil_5按调试,让程序运行,然后调试出来。两次正确依旧很高。

非常感谢你的帮助。

请注意,我可以发送你完整的项目设置如果我可以上传更大的文件或如果你特别想看某个文件,我可以上传。

1年前

PM_Dialog

嗨anushiya,

谢谢你的详细的反馈。

  • 我没有改变任何东西。只有标记这些连续跟踪,我暂时代替sleep_mode = rwip_power_down ();arch_main(第176行)。c sleep_mode = mode_active和证实它传输连续跟踪。

您正在使用的SDK版本?我用SDK6.0最新版本。10。我能找到sleep_mode = rwip_power_down ();在第195行arch_main。c文件。在while(1)循环,如果你更换rwip_power_down mode_active(),它似乎设备永远不会进入睡眠模式。

  • 我希望这个设备不会期望一个按钮按下。的设备永远不会进入传热性能状态。我希望设备传送寄在一个特定的时间间隔和进入延长睡眠没有OTP副本。这就是为什么我改变了app_easy_gap_undirectional_advertise_start ();app_easy_gap_non_connectable_advertise_start ();

你计算设备配置为广播或使用non-connectable广告。当设备作为广播,这意味着它只能支持non-connectable广告。请遵循以下步骤来配置您的广播设备。我做这些步骤在ble_app_sleepmode SDK6.0.10的例子

  1. 改变GAP_BROADCASTER_MODE .mode项user_config user_adv_conf结构。h头文件
  2. 改变GAP_ROLE_BROADCASTER .role项user_config user_gapm_conf结构。h头文件。
  3. 添加cmd = app_easy_gap_non_connectable_advertise_get_active ();而不是cmd = app_easy_gap_undirected_advertise_get_active ();在user_app_adv_start user_sleepmode()函数。c文件
  4. 添加app_easy_gap_non_connectable_advertise_start ();而不是app_easy_gap_undirected_advertise_start();在user_app_adv_start()函数的user_ sleepmode。c文件
  5. 添加一个user_app_on_adv_nonconn_complete()函数作为user_app_adv_undirect_complete ()。这个函数将non-connectable广告完成时触发。
  6. 添加的user_app_on_adv_nonconn_complete user_app_callbacks user_callback_config的结构。h头文件:.app_on_adv_undirect_complete = user_app_adv_undirect_complete,

如果你发现任何回答有用,请其标记为“接受”。

谢谢,PM_Dialog

1年前

anushiya 0点

谢谢你的帮助。你的建议帮我把设备放在广播模式。但仍有以下两个问题。

1)mnf_data_update()还没有和调用

2)smartsnippets显示0.5 ma峰值传输时期(删除了调试模式)暗示睡眠模式不是调用。

(使用示波器,母亲董事会通过测试点匹配smartsnippets值)

我用SDK 6.0.4.326。

我定义user_app_adv_non_connectable_complete (uint8_t)

空白user_app_adv_non_connectable_complete (uint8_t状态)

{

/ / irespective状态,安排下一个传输数据包

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”没有OTP编程

app_default_sleep_mode = ARCH_EXT_SLEEP_ON

1年前

PM_Dialog

嗨anushiya,

我想让你知道SDK6.0.4是一个非常古老的版本,目前还不支持该函数。为此,我强烈建议您下载并使用最新版本的SDK DA14585/6产品家族,这是SDK6.0.10。ble_app_sleep模式的例子SDK6.0.10用于我提供你的步骤来设置你的设备在广播模式。user_app_adv_non_connectable_complete()将每次non-connectable广告完成后触发。所以,你这个函数内设置一个计时器,当计时器到期时,adv_data_update_timer_cb将被执行。请遵循指南配置设备广播模式,在ble_app_sleepmode SDK的例子。我建议你去做只有我提供你的修改。non-connectable广告将停止每个APP_ADV_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

1年前

anushiya 0点

谢谢你!我将升级到6.0.10

>当芯片与按钮按醒来,广告日期将被更新。

我想要一个周期醒来,不是一个按钮按下唤醒. .有nointeraction从外面的世界。

>如果你想更新数据时,设备制造商是广告,你应该设置一个计时器。所以你将有一个计时器停止广告,第二个定时器更新制造特定的数据。

我不需要这个。醒来,传播、更新,睡眠对我来说是好的。

功能齐全,如果我安排我提到过它好吗?

谢谢你!

你好,

我下载SDK 6.0.10.511做你建议的改变。

  1. 改变GAP_BROADCASTER_MODE .mode项user_config user_adv_conf结构。h头文件
  • 从GAP_GEN_DISCOVERABLE GAP_BROADCASTER_MODE

  1. 改变GAP_ROLE_BROADCASTER .role项user_config user_gapm_conf结构。h头文件。
  • 从GAP_GEN_DISCOVERABLE GAP_ROLE_BROADCASTER

  1. 添加cmd = app_easy_gap_non_connectable_advertise_get_active ();而不是cmd = app_easy_gap_undirected_advertise_get_active ();在user_app_adv_start user_sleepmode()函数。c文件

  1. 添加app_easy_gap_non_connectable_advertise_start ();而不是app_easy_gap_undirected_advertise_start();在user_app_adv_start()函数的user_ sleepmode。c文件

  1. 添加一个user_app_on_adv_nonconn_complete()函数作为user_app_adv_undirect_complete ()。这个函数将non-connectable广告完成时触发。
  • 在user_sleepmode。c添加为

空白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_sleepmode。c添加

空白user_app_on_adv_nonconn_complete (uint8_t状态);

  1. 添加的user_app_on_adv_nonconn_complete user_app_callbacks user_callback_config的结构。h头文件:.app_on_adv_undirect_complete = user_app_adv_undirect_complete,

    • 改变了

.app_on_adv_nonconn_complete =零,

作为

.app_on_adv_ nonconn _complete = user_app_adv_ nonconn _complete,

(如在SDK6.0.4.326,)

  1. 使用上面的变化,系统进入

案例GAPM_CANCEL:

{

如果(param - >状态! = GAP_ERR-NO-ERROR)

{

ASSERT_ERROR (0);

}

}

所以必须注释掉app_easy_gap_advertise_stop ();在静态孔隙adv_data_update_timer_cb ()

然后它会连续传输。但还是同样的问题。

1)MNF_DATA不更新,这意味着原始数据的最后两个字节是0000,到0100,然后保持在更新一次。

[{“时间戳”:“2019 - 06 - 13 t07:14:09z”、“类型”:“未知”,“mac”:“80 eaca700005”、“bleName”:“”,“rssi”: -39年,“rawData”:“03030”a1811072f2a93a6bdd84152ac0b10992ec6feed05ffcdab0100}]

2)当前的消费2.5 ma(请见附加图片。)

附件 大小
睡眠模式权力Consumption.zip 266.88 KB

1年前

PM_Dialog

嗨anushiya,

让我看看它,我将尽快送还给你。

谢谢,PM_Dialog

1年前

anushiya 0点

任何更新在这吗?

接受答案!

1年前

PM_Dialog

请尝试以下步骤在干净ble_app_sleepmode SDK的例子。

如果你想有可连接非广告,你应该做到以下几点:

1。修改user_app_adv_start()为了advertse non-connectable包

空白user_app_adv_start (void){/ /安排接下来的广告数据更新app_adv_data_update_timer_used = app_easy_timer (APP_ADV_DATA_UPDATE_TO adv_data_update_timer_cb);struct gapm_start_advertise_cmd * cmd = app_easy_gap_non_connectable_advertise_get_active ();/ /添加制造商数据最初的广告或扫描响应数据,如果有足够的空间app_add_ad_struct (cmd, &mnf_data sizeof (struct mnf_specific_data_ad_structure), 1);/ /设置延长睡眠期间与OTP复制广告arch_set_extended_sleep(真正的);app_easy_gap_non_connectable_advertise_start ();}

2。在user_callback_config。h,把user_app_adv_undirect_complete从。app_on_adv_undirect_complete。app_on_adv_nonconn_complete

静态孔隙adv_data_update_timer_cb(){/ /如果mnd_data_index MSB设置,厂家数据存储在扫描响应uint8_t * mnf_data_storage = (mnf_data_index & 0 x80) ?stored_scan_rsp_data: stored_adv_data;/ /更新制造商数据mnf_data_update ();/ /更新所选字段的广告数据(生产数据)memcpy (mnf_data_storage + (mnf_data_index & 0 x7f), &mnf_data, sizeof (struct mnf_specific_data_ad_structure));/ /更新广告数据动态app_easy_gap_update_adv_data (stored_adv_data, stored_adv_data_len, stored_scan_rsp_data stored_scan_rsp_data_len);/ /删除停止广告空气操作——一个按钮按下就会唤醒系统/ / 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秒1。

谢谢,PM_Dialog

1年前

anushiya 0点

谢谢你的回复。试过这和MNF_DATA正在更新。但smartsnippets仍表示,消费2.5 ma(凯尔环境加载代码后关闭)。这并不意味着它不进入睡眠模式。我得到同样的波型附在我之前的消息。

1年前

PM_Dialog

嗨anushiya,

如果你找到前面的答案有用,请其标记为“接受”。

你能请注明程序你是为了测量睡眠电流>请注意,该设备进入睡眠模式广告之间的间隔。

谢谢,PM_Dialog

1年前

anushiya 0点

提供的解决方案中我有一个问题:

在步骤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将不同的不是吗?我有

app_adv_data_update_timer_used = app_easy_timer (APP_ADV_DATA_UPDATE_TO adv_data_update_timer_cb);

user_app_adv_non_connectable_complete职能之一并分配给内部。app_on_adv_nonconn_complete = user_app_adv_non_connectable_complete从最后一行和删除它

静态孔隙adv_data_update_timer_cb ()

但这并不工作。我可以知道为什么吗?

关于测量当前我使用两种方法来衡量。

1)使用smartsnippets和混合连接(JTAG和com端口)。(在下载代码使用橄榄球员我试着删除JTAG从开发板跳投)。正确的画是0.5 ma (Peack电流5 ma,大道电流0.5 ma)

2)使用测试点TP6和相应的跳接激活放大器(预计当前太小)。示波器的测量100倍的价值在聪明的片段。

如果代码是把DA14586进入睡眠模式,我认为当前uA范围。

我下载一个新的版本的6.0.10.511,提取代码,只有改变了3项你上面提到的。

1年前

PM_Dialog

嗨anushiya,

的。app_on_adv_undirect_complete和。app_on_adv_nonconn_complete是两个完全不同的回调函数,这取决于您正在使用的广告程序。

  • app_on_adv_undirect_complete将触发只有广告是间接融化在应用程序中使用。请检查ble_app_sleepmode SDK的例子
  • 的。app_on_adv_nonconn_complete只会触发如果您使用的是不可连接广告

然而,他们将如果你停止广告执行过程

在你的情况下,您使用的是non-connectable广告,如果你发送停止命令向祝福卡,app_on_adv_nonconn_complete将被执行。

静态孔隙adv_data_update_timer_cb()是第三步。你能澄清你是什么意思,它不工作?你能请注明如果静态孔隙adv_data_update_timer_cb触发是()?

请注意,如果你不停止广告,设备不会进入永久的睡眠,但它会进入睡眠广告之间的间隔。为了测量睡眠模式电流,SmartSnippets工具箱的使用是强烈不推荐。请检查本教程当前测量教程4:睡眠模式为了检查如何衡量睡眠电流。

谢谢,PM_Dialog

1年前

anushiya 0点

嗨,抱歉延迟的回来了。我仍然困惑和试图让我的头。

>。app_on_adv_undirect_complete和。app_on_adv_nonconn_complete是两个完全不同的回调函数,这取决于您正在使用的广告程序。

这就是我的问题。当他们完全是两个不同的功能,你叫我“2。在user_callback_config。h,把user_app_adv_undirect_complete从。app_on_adv_undirect_complete。app_on_adv_nonconn_complete user_app_adv_undirect_complete“当移动和更换空我有一些问题。现在我有两个”。app_on_adv_undirect_complete。app_on_adv_nonconn_complete”与“user_app_adv_undirect_complete”作品。但是当我创建了“user_app_adv_non_connectable_complete”一行它不起作用。

/ /重新启动定时器——这条线是失踪app_adv_data_update_timer_used = app_easy_timer (APP_ADV_DATA_UPDATE_TO adv_data_update_timer_cb);

但是如果我把它在最后一行

静态孔隙adv_data_update_timer_cb ()

它的工作原理。

我的主要问题是,似乎还不睡中间帧传输。

>请注意,如果你不停止广告,设备不会进入永久的睡眠,但它会进入睡眠广告之间的间隔。

是的,设备连续传输(广播)从设备启动的时间。所以我希望它进入睡眠广告之间的间隔。

衡量当前我用“嗯- b - 049 DA1458x开始使用开发工具包- Pro_v1.1。pdf“第29页技术而不是教程当前测量教程4:睡眠模式14586年,因为我需要测量子板电流消耗在运行样例代码“ble_app_sleepmode”和“ble_app_sleepmode”使用相同的示例代码来衡量当前消费在我们的定制。

目前测量250 mv的CRO解释2.5 ma。(附照片)。SmartSnippets工具箱分析器也措施2.5 ma。

我已经关闭了凯尔的开发环境而做测量。(从这个线程的开始,一直这样)

现在我已经改变了SDK 6.0.10.511

谢谢你的帮助

接受答案!

1年前

anushiya 0点

你好,我注意到,当我使用子板DA14586和意外如果我不改变默认的目标选择ble_app_sleepmode_585 ble_app_sleepmode_586,那么电子商务消费要高得多。如果目标选择是ble_app_sleepmode_586当前测量基础地板是20 mv示波器,当连接一个电流表串联之间跨接j - 1显示4 ua睡眠模式当前的和小于1 ma传输电流。

这让我只有一个问题的推荐操作”。app_on_adv_nonconn_complete”而不是复制相同的功能”。app_on_adv_undirect_complete”

1年前

PM_Dialog

嗨anushiya,

你能请注明你最终如何配置你的设备?你设置它作为外围模式和使用non-connectable广告或者你设置它作为广播模式?

关于你提到的第二个问题,是的,你应该为DA14586构建项目的flash设备相应的二进制图像当你使用这种芯片。

谢谢,PM_Dialog

1年前

anushiya 0点

>你能请注明你最终如何配置你的设备?你设置它作为外围模式和使用non-connectable广告或者你设置它作为广播模式?

使用non-connectable广告。(我在移动的过程中我们的代码开始从ble_app_example 6.0.4.326到新的SDK 6.0.10.511 ble_app_sleepmode例子。我们的董事会外部RAM(我们也从DA14585转向DA14586 CS是配置为高)。希望这是正确的路要走。

是什么意思“外围模式”。有设置我失踪吗?答案我接受上面有3个步骤,在ble_app_sleepmode例子。

我问在星期二,2019-07-02 09:43,我仍然不明白为什么。”app_on_adv_nonconn_complete”和“。app_on_adv_undirect_complete”指同一件事问什么是推荐行动的”。app_on_adv_nonconn_complete”而不是复制相同的功能”。在user_callback_config.h app_on_adv_undirect_complete”到“user_app_adv_undirect_complete”吗?

1年前

PM_Dialog

嗨anushiya,

.app_on_adv_nonconn_complete回调将达到non-connectable广告时完成。然而,在广告完成间接融化.app_on_adv_undirect_complete会被触发。.app_on_adv_nonconn_complete你应该把你的回调执行non-connectable广告时使用。例如,您可以使用以下功能,如果你停止广告和设备进入永久的睡眠模式:

空白user_app_non_conn_complete (uint8_t状态)

{

/ /禁用唤醒祝福和计时器事件。只有外部(GPIO)唤醒事件可以唤醒处理器。

如果状态= = GAP_ERR_CANCELED)

{

arch_ble_ext_wakeup_on ();

/ /配置唤醒按钮

app_button_enable ();

}

}

谢谢,PM_Dialog

1年前

anushiya 0点

> .app_on_adv_nonconn_complete你应该把你的回调执行non-connectable广告时使用。

我完全同意。这就是为什么我问之前以下:

我有

app_adv_data_update_timer_used = app_easy_timer (APP_ADV_DATA_UPDATE_TO adv_data_update_timer_cb);

user_app_adv_non_connectable_complete职能之一并分配给内部。app_on_adv_nonconn_complete = user_app_adv_non_connectable_complete从最后一行和删除它

静态孔隙adv_data_update_timer_cb ()

但这并不工作。我可以知道为什么吗?

1年前

PM_Dialog

嗨anushiya,

延迟道歉。因为你停止non-connectable广告和配置。app_on_adv_nonconn_complete = user_app_adv_non_connectable_complete user_app_adv_non_connectable_complete应该被触发。你能在调试模式下运行代码,介入,并试图找到追求设备停止广告的代码在哪里?哪个函数触发?

谢谢,PM_Dialog