在唤醒时切换到XTAL16M

⚠️
您好,谢谢您来到论坛。令人兴奋的消息!我们正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support.我们将在未来几天内修复bug/优化搜索和标记。
14个职位/ 0个新职位
最后一篇文章
rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
在唤醒时切换到XTAL16M

你好,对话,

我已经按照UART2外设示例,在BLE睡眠模式示例中为串行通信配置了UART2。

观察通信数据,发现有错误传输。

论坛早些时候的一个类似讨论建议调用“arch_-ble_-force_-wakeup()”API使时钟切换到XTAL16M并进行可靠的UART传输。

切换成功,但传输完成后,需要关闭BLE收音机。

我可以知道,

1.如果有办法关闭BLE无线电后,UART传输。

2.如果有一种方法可以在从睡眠中唤醒时切换到XTAL16M,而无需“arch_-ble_-force_-wakeup()”API调用。

当做

设备:
Qinjiny_对话
离线
最后一次见到:4个月1个星期前
工作人员
加入:2016-11-01 05:47
嗨拉吉,

嗨拉吉,

1.通过“在UART传输后关闭BLE收音机”,我想你的意思是停止BLE广告,

是的,你可以打电话来app_easy_gap_advertise_stop使用UART写操作的回调

2.arch_ble_force_wakeup()是唤醒BLE核心和使用XTAL16M的最推荐方法。如果有BLE活动,设备将自动使用XTAL16M。还有一些低杠杆的方式来切换时钟,例如:

if ((GetWord16(CLK_CTRL_REG) & RUNNING_AT_XTAL16M) == 0), color0000ff;

而((GetWord16(SYS_STAT_REG)&XTAL16_SETTLED)==0);//等待XTAL16结算
SetBits16(CLK_CTRL_REG, SYS_CLK_SEL,0);//切换到XTAL16
while((GetWord16(CLK_CTRL_REG)&RUNNING_AT_XTAL16M)==0);//等待实际开关

我真的不确定是否有任何理由使用它,或者使用它会有任何结果。

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话,

你好,对话,

我正在切换UART和BLE之间的数据传输。这两种转移是互斥的。

使用arch_ble_force_wakeup()会导致电流消耗增加,这对于所实施的解决方案来说是不可行的。

因此,如果这是推荐的方式,那么关闭收音机将通过调用哪个easy API来启动?

当做

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

在你最初的帖子中,你提到你正在开发ble_app_sleepmode SDK的例子,是吗?本例将设备设置为睡眠模式。为此,将关闭所有外围模块,包括Radio和UART。你能说明一下你是否关闭了睡眠模式吗?任何其他澄清都会很有帮助。

谢谢,下午好

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话,

你好,对话,

我已经使用ble_app_sleepmode示例示例来设置应用程序中的睡眠模式特性。

没有BLE广告。初始化时,不会调用user_app_adv_start()。

使用唤醒中断按钮,我执行UART传输。

只有通过启用XTAL16M时钟,调用arch_force_ble_wakeup(),数据才会可靠地通过UART发送。

UART传输终止后,需要关闭通过arch_force_BLE_wakeup()打开的BLE无线电。因此,使用arch_ble_ext_wakeup()API来实现它。

这是正确的实现方式,还是有一个简单的替代时钟切换到XTAL16M和回到低功率时钟在睡眠恢复?

当做

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨拉,

嗨拉,

如果我理解正确的话,一旦设备启动,您就将其置于睡眠模式,并配置唤醒控制器来检测GPIO中断。当按下按钮时,设备将通过UART2打印数据。585一醒来,BLE_WAKEUP_LP_Handler就会被执行。当系统处于活动模式时,晶体使用16MHz,当系统处于睡眠模式时,晶体使用32KHz。在睡眠模式下,所有外围块都断电。在UART转移终止时,我需要一些澄清。当与UART2交互时,收音机是ON还是OF?或者是开着但你不做广告?当芯片醒来时,收音机就会打开。

谢谢,下午好

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
启动后,系统

启动后,系统初始化将不允许开始广告。系统允许进入“无OTP拷贝扩展睡眠模式”。

按下按钮时,调用唤醒处理程序来初始化UART2传输。(这需要XTAL16M进行可靠的传输)。

在唤醒时,只有在执行BLE_wakeup_LP_处理程序时,时钟才会切换回XTAL16M。(It does not if advertisement is not initiated).

为了实现XTAL16M的时钟切换,arch_ble_force_wake () API将按照论坛讨论执行。

1.有没有更简单的方法来切换时钟而不调用arch_ble_force_wake () API?

2.一旦通过arch_ble_force_wakup()API切换时钟,主环路中的下一个睡眠阶段是否会关闭通过调用arch_ble_force_wakup()API打开的ble收音机?

如果你还不能理解,我将作出适当安排,进一步澄清。

问候

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

BLE_WAKEUP_LP_处理器在系统每次唤醒时都会触发。设备在睡眠模式下以32K时钟运行,因此一旦唤醒,时钟将切换到16MHz。当按下按钮进行唤醒时,应用程序按钮按_cb()callaback函数将被执行以启动外围设备块和BLE。我不明白您为什么要切换时钟。如果芯片处于活动模式,您可以使用UART来打印数据–芯片是否在广告中并不重要。请注意,外围设备块使用的是16Mhz时钟,并且它们是e在睡眠模式下关机。您能说明UART2是否有任何问题吗?另外,您能说明在广告间隔之间是否使用任何睡眠模式吗?

谢谢,下午好

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话,

你好,对话,

我要求完全按照所述执行下列声明。

启动后,系统初始化将不允许启动播发(用户\u app\u adv\u startAPI未调用)。允许系统进入“无OTP拷贝的延长睡眠模式”(arch\U set\U延长睡眠API).

唤醒控制器被初始化以处理按钮中断,并且允许设备休眠(这将时钟从XTAL16M切换到RC32K)。

按下按钮时,调用唤醒中断处理程序来启动UART2传输。(UART/UART2需要XTAL16M用于可靠的传输)。

在唤醒时,只有在执行BLE_wakeup_LP_处理程序时,时钟才会切换回XTAL16M。(如果没有通过user_app_adv_start API发起广告,则不会).

我希望你已经从上面的摘要中理解了我的设置。

如果上述情况清楚,我将继续发言。

谢谢

当做

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨拉,

嗨拉,

唤醒过程独立于播发过程。这意味着,只要您按下用于唤醒DA14586的按钮,BLE_WAKEUP_LP_处理程序就会始终执行。user_app_adv_start()API仅用于播发!为此,即使设备未播发,您也可以使用UART2硬件块。

谢谢,下午好

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话,

你好,对话,

为了解决这个问题——“这意味着,只要您按下用于唤醒DA14586的按钮,BLE_WAKEUP_LP_处理程序就会一直执行。”

如果按照我的设置配置了某些内容,则在从按钮中断唤醒时,它将永远不会执行BLE_WAKEUP_LP_处理程序。

一个简单的实验就足以为这一主张提供证据。

请求验证设置为相同的情况不是我的情况。

谢谢

当做

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨拉,

嗨拉,

BLE_WAKEUP_LP_HANDLER将在每次唤醒时执行,LP时钟将在每次唤醒时被覆盖到16MHz时钟。

谢谢,下午好

rajucoolsuraj
离线
最后一次见到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话,

你好,对话,

如果发生了什么

1.调用“arch_ble_ext_wakup_on()”API。

2."app_easy_gap_undirected_advertise_start()" API从未被调用。

通过唤醒中断控制器(BLE Radio在睡觉前关闭)唤醒,

BLE_WAKEUP_LP_处理器永远不会执行,也不会发生时钟切换。

当做

PM_对话框
离线
最后一次见到:6天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

请查看SDK6.0.10的ble_app_sleepmode示例。当非直接广告完成时,user_app_adv_undirect_complete()回调函数被触发,如果你检查源代码,arch_ble_ext_wakeup_on()被执行,以禁用BLE和计时器事件的唤醒。只有外部(GPIO)唤醒事件才能通过唤醒控制器唤醒处理器。为此,在此阶段,设备处于永久休眠模式,但唤醒控制器已配置好,以便检测外部唤醒事件(app_button_enable())。当检测到唤醒事件时,app_button_press_cb()被触发,它检查BLE核心是否处于永久休眠模式。如果是,则将BLE核心从永久休眠模式中取出。

谢谢,下午好