你好对话框,
根据UART2外设示例示例,我已在BLE SleepMode示例中配置了UART2以进行串行通信。
观察通信数据,发现有错误传输。
论坛中的类似讨论前面推荐给“Arch_ble_force_wakeup()”API调用,使时钟切换到XTAL16M并具有可靠的UART转移。
交换机成功,但一旦转移完成,就必须关闭BLE收音机。
我可以知道,
1.如果有办法关闭BLE无线电后,UART传输。
2.如果有一种方法可以从睡眠中切换到XTAL16M,没有“ARCH_BLE_FORCE_WAKEUP()”API调用。
问候
拉
设备:
嗨拉吉,
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);//等待实际开关
}
}
我真的不确定是否有任何理由使用它,或者使用它会有任何结果。
你好对话框,
我正在切换UART和BLE之间的数据传输。这两种转移是互斥的。
使用ARCH_BLE_FORCE_WAKEUP()导致当前消耗的增加,这对于实现的解决方案不可行。
因此,如果是推荐的方式,那么关闭无线电将由呼叫发起易于API?
问候
拉
嗨rajucoolsuraj,
在你最初的帖子中,你提到你正在开发ble_app_sleepmode SDK的例子,是吗?本例将设备设置为睡眠模式。为此,将关闭所有外围模块,包括Radio和UART。你能说明一下你是否关闭了睡眠模式吗?任何其他澄清都会很有帮助。
谢谢,PM_DIALOG.
你好对话框,
我已经使用ble_app_sleepmode示例示例来设置应用程序中的睡眠模式特性。
没有BLE广告。初始化时,不会调用user_app_adv_start()。
使用唤醒中断按钮,我执行UART传输。
只有通过启用XTAL16M时钟,调用arch_force_ble_wakeup(),数据才会可靠地通过UART发送。
在UART转移终止时,需要关闭通过ARCH_FORCE_BLE_WAKEUP()上打开的BLE RADER。因此,ARCH_BLE_EXT_WAKEUP()API正在用于实现它。
这是正确的实现方式,还是有一个简单的替代时钟切换到XTAL16M和回到低功率时钟在睡眠恢复?
问候
拉
嗨拉,
如果我理解正确的话,一旦设备启动,您就将其置于睡眠模式,并配置唤醒控制器来检测GPIO中断。当按下按钮时,设备将通过UART2打印数据。585一醒来,BLE_WAKEUP_LP_Handler就会被执行。当系统处于活动模式时,晶体使用16MHz,当系统处于睡眠模式时,晶体使用32KHz。在睡眠模式下,所有外围块都断电。在UART转移终止时,我需要一些澄清。当与UART2交互时,收音机是ON还是OF?或者是开着但你不做广告?当芯片醒来时,收音机就会打开。
谢谢,PM_DIALOG.
启动后,系统初始化将不允许开始广告。系统允许进入“无OTP拷贝扩展睡眠模式”。
按下按钮时,调用唤醒处理程序来初始化UART2传输。(这需要XTAL16M进行可靠的传输)。
在唤醒时,只有在执行了BLE_WAKEUP_LP_HANDLER时,时钟才会切换回XTAL16M。(如果不启动广告,则不会)。
为了实现XTAL16M的时钟切换,arch_ble_force_wake () API将按照论坛讨论执行。
1.有没有更简单的方法来切换时钟而不调用arch_ble_force_wake () API?
2.通过ARCH_BLE_FORCE_WAKUP()API切换时钟,主循环中的下一个睡眠阶段是否会关闭与呼叫呼叫的BLE无线电呼叫?
如果您尚未遵循,我将妥善安排进一步阐明。
问候
拉
嗨rajucoolsuraj,
每次系统唤醒时都会触发BLE_WAKEUP_LP_HANDLER。该设备在睡眠模式下使用32K时钟运行,因此在其醒来时,时钟将切换到16MHz。按下按钮唤醒时,将执行APP_BUTTON_PRESS_CB()CALLABACK功能以启动外围设备块和BLE。我无法明白为什么你想切换时钟。如果芯片处于活动模式,则可以使用UART才能打印数据 - 如果芯片是广告,则无关紧要。请注意,外设块使用16MHz时钟,它们在睡眠模式下关闭。如果您对UART2有任何问题,请您说明吗?此外,如果您使用广告间隔之间的任何睡眠模式,请您说明您是否可以说明?
谢谢,PM_DIALOG.
你好对话框,
我要求完全按照所述执行下列声明。
启动后,系统初始化不会允许广告的开始(User_App_Adv_StartAPI不被称为)。该系统被允许进入“没有OTP拷贝的扩展睡眠模式”(Arch_set_extended_sleepAPI)。
唤醒控制器被初始化以处理按钮中断,并且允许设备休眠(这将时钟从XTAL16M切换到RC32K)。
按下按钮时,调用唤醒中断处理程序来启动UART2传输。(UART/UART2需要XTAL16M用于可靠的传输)。
在唤醒时,只有在执行了BLE_WAKEUP_LP_HANDLER时,时钟才会切换回XTAL16M。(如果没有通过user_app_adv_start API发起广告,则不会)。
我希望你已经从上面的摘要中理解了我的设置。
如果只有上述情况清楚,我将继续。
谢谢
问候
拉
嗨拉,
唤醒程序与广告程序无关。这意味着一旦按下按钮唤醒DA14586,始终执行BLE_WAKEUP_LP_HANDLER。user_app_adv_start()API仅适用于广告!为此,即使设备未广告,也可以使用UART2硬件块。
谢谢,PM_DIALOG.
你好对话框,
要解决索赔 - “这意味着一旦按下按钮唤醒DA14586,始终执行BLE_WAKEUP_LP_HANDLL。”
如果根据我的设置配置了某些内容,则不会在唤醒中从按钮中断执行BLE_WAKEUP_LP_HANDLER。
简单的实验足以为索赔提供证据。
请求验证设置为相同的情况不是我的情况。
谢谢
问候
拉
嗨拉,
BLE_WAKEUP_LP_HANDLER将在每次唤醒时执行,LP时钟将在每次唤醒时被覆盖到16MHz时钟。
谢谢,PM_DIALOG.
你好对话框,
如果发生了什么,如果
1.调用“arch_ble_ext_wakup_on()”API。
2."app_easy_gap_undirected_advertise_start()" API从未被调用。
通过唤醒中断控制器(BLE Radio在睡觉前关闭)唤醒,
BLE_WAKEUP_LP_HANDLER从未执行,并且不会发生时钟开关。
问候
拉
嗨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核心从永久休眠模式中取出。
谢谢,PM_DIALOG.