你好对话框,
根据UART2外设示例示例,我已配置UART2以在BLE SleepMode示例中进行串行通信。
在观察通信数据时,存在错误传输。
在论坛上的类似讨论前面推荐调用“Arch_ble_Force_WakeUp()”API,使时钟切换到XTAL16M并具有可靠的UART转移。
交换机成功,但一旦转移完成,就必须关闭BLE收音机。
我可以知道吗,
1.如果有办法在UART传输后关闭BLE收音机。
2.如果有一种方法可以从睡眠中切换到XTAL16M,没有“Arch_ble_force_wakeup()”API调用。
问候
拉朱
设备:
嗨,拉杰,
1.“UART传输后关闭BLE收音机”我想你的意思是停止BLE广告,
是的,你可以通过致电来完成这件事应用程序\u轻松\u间隙\u广告\u停止随着UART写作操作的回调
2.arch_ble_force_wakeup()是唤醒ble核心并使用XTAL16M操作的最推荐方法。如果存在可恢复活动,设备将自动与XTAL16M配合使用。还有一些低杠杆方式来切换时钟,例如:
如果((GetWord16(CLK\U CTRL\U REG)&RUNNING\U AT\U XTAL16M)==0)
{
而((getword16(sys_stat_reg)&xtal16_settled)== 0);//等待XTAL16定居
SetBits16(CLK\u CTRL\u REG,SYS\u CLK\u SEL,0);//切换到XTAL16
while((getword16(clk_ctrl_reg)&running_at_xtal16m)== 0);//等待实际开关
}
}
我真的不确定是否有任何理由使用这个,或者是否有任何自负使用这个。
你好对话框,
我正在UART和BLE之间切换数据传输。两种转移都是相互排斥的。
使用ARCH_BLE_FORCE_WAKEUP()导致当前消耗量的增加,这对于实现的解决方案不可行。
因此,如果是推荐的方式,那么关闭无线电将由呼叫发起易于API?
问候
拉朱
嗨rajucoolsuraj,
在最初的帖子中,您提到您正在开发SDK的ble_app_睡眠模式示例,不是吗?本例将设备置于睡眠模式。为此,所有外围模块(包括收音机和UART)均断电。你能澄清一下你是否禁用了睡眠模式吗?任何其他澄清都会非常有帮助。
谢谢,PM_DIALOG.
你好对话框,
我已经使用ble_app_睡眠模式示例在应用程序中设置睡眠模式功能。
没有不可抗拒的广告。初始化时,永远不会调用user_app_adv_start()。
使用唤醒中断按钮,我执行UART传输。
只有通过调用arch_force_ble_wakeup()启用XTAL16M时钟,数据才能通过UART可靠地发送。
在UART转移终止时,需要关闭通过ARCH_FORCE_BLE_WAKEUP()上打开的BLE RADER。因此,ARCH_BLE_EXT_WAKEUP()API正在用于完成它。
这是一种正确的实现方式,还是有一种简单的替代方法,可以在睡眠恢复时将时钟切换到XTAL16M并返回到低功耗时钟?
问候
拉朱
嗨,拉朱,
如果我理解正确,一旦设备启动,您就将其置于睡眠模式,并将唤醒控制器配置为检测GPIO中断。按下按钮时,设备将通过UART2打印数据。一旦585唤醒,BLE_唤醒\u LP_处理程序将被执行。系统处于活动模式时使用16MHz晶体,处于睡眠模式时使用32KHz晶体。在睡眠模式下,所有外围模块均断电。UART传输终止后,我需要对此进行一些澄清。当与UART2交互时,该收音机是开着的还是开着的?或者是开着但你不做广告?芯片唤醒时,收音机将通电。
谢谢,PM_DIALOG.
启动后,系统初始化将不允许开始播发。允许系统进入“无OTP复制的延长睡眠模式”。
按下按钮时,将调用唤醒处理程序来启动UART2传输。(这需要XTAL16M进行可靠传输)。
在唤醒时,只有在执行BLE_wakeup_LP_处理程序时,时钟才会切换回XTAL16M。(如果未启动广告,则不会)。
为了实现到XTAL16M的时钟切换,将根据论坛讨论执行arch_ble_force_wakup()API。
1.有没有一种更简单的方法可以在不调用arch_ble_force_wakup()API的情况下切换时钟?
2.通过ARCH_BLE_FORCE_WAKUP()API切换时钟,主循环中的下一个睡眠阶段是否会关闭与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_Start美国石油学会不被称为)。该系统被允许进入“没有OTP拷贝的扩展睡眠模式”(Arch_set_extended_sleep美国石油学会)。
唤醒控制器初始化为处理按钮中断,设备允许休眠(这将时钟从XTAL16M切换到RC32K)。
按下按钮时,将调用唤醒中断处理程序来启动UART2传输。(UART/UART2需要XTAL16M才能可靠传输)。
在唤醒时,才会在执行BLE_WAKEUP_LP_HANDLLer时切换回XTAL16M。(如果未通过用户应用程序adv启动API启动播发,则不会出现此问题)。
我希望你已经从上面的摘要中理解了我的设置。
如果只有上述情况清楚,我将继续。
谢谢
问候
拉朱
嗨,拉朱,
唤醒程序与广告程序无关。这意味着一旦按下按钮唤醒DA14586,始终执行BLE_WAKEUP_LP_HANDLer。user_app_adv_start()API仅适用于广告!为此,即使设备未广告,也可以使用UART2硬件块。
谢谢,PM_DIALOG.
你好对话框,
解决索赔 - “这意味着一旦按下按钮即可唤醒DA14586,始终执行BLE_WAKEUP_LP_HANDLER。”
如果根据我的设置配置了某些内容,则不会在唤醒中从按钮中断执行BLE_WAKEUP_LP_HANDLER。
简单的实验足以为索赔提供证据。
在我这方面,验证设置的请求与此不同。
谢谢
问候
拉朱
嗨,拉朱,
BLE_WAKEUP_LP_处理程序将在每次唤醒时执行,LP时钟将在每次唤醒时变为16MHz时钟。
谢谢,PM_DIALOG.
你好对话框,
发生什么,如果
1.调用“arch_ble_ext_wakup_on()”API。
2.永远不会调用“app\u easy\u gap\u undirected\u advertized\u start()”API。
通过唤醒中断控制器唤醒时,(BLE收音机在睡眠前关闭),
BLE_WAKEUP_LP_HANDLLEL永远不会执行,并且不会发生时钟开关。
问候
拉朱
嗨rajucoolsuraj,
请看一下SDK6.0.10的ble_app_睡眠模式示例。当无向播发完成时,将触发user_app_adv_unddirect_complete()回调函数,如果您检查源代码,将执行arch_ble_ext_wakeup_on(),以禁用对无向播发和计时器事件的唤醒。只有外部(GPIO)唤醒事件才能通过唤醒控制器唤醒处理器。为此,在此阶段,设备处于永久睡眠模式,但已配置唤醒控制器,并准备好检测外部唤醒事件(app_button_enable())。当检测到唤醒事件时,会触发app_按钮_press_cb(),它会检查BLE核心是否处于永久睡眠模式。如果是,则将BLE核心从永久睡眠模式中移除。
谢谢,PM_DIALOG.