你好,
我们有以下设置:
我们的设备是一个BLE外设,它是一个通过UART连接到DA14580的外部MCU。GATT数据库(服务和特征)、广告数据和其他事件通过UART从MCU接收到DA14580,然后DA14580开始发布广告。同样,一旦连接上,对于来自中央的读写请求,DA14580将请求发送给MCU,当MCU响应时,DA14580将同样的请求发送给中央。
现在,我们打算在DA14580上使用扩展睡眠模式。
根据我的理解,
1.应首先设置以下内容:
const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
2.然后在app_on_system_powered回调中,如果返回goto_sleep,则DA14580将延长睡眠。如果在整个过程中返回keep_powered,则启用延长睡眠(从上面的1.从1开始)将无效。这是正确的吗?
现在,我如何使用扩展睡眠,这样,所有来自MCU的UART请求都由DA14580处理。此外,所有来自中央设备的BLE相关请求也都由DA14580?
DA14580在延长睡眠中唤醒:
1.来自MCU的UART请求。
2. BLE中断(来自Central的读/写请求)
以下是我的序列。请告诉我我在哪里可以放大DA14580睡觉,如何唤醒它:
1. MCU通过UART发送GATT数据库
2.单片机通过UART发送广告和扫描响应数据
3.DA14580开始广告
-----
案例A:
4.在BLE连接的情况下,DA14580接收读取或写入请求,并将其转发给MCU以获得响应。
5.它将响应发送到中心设备。
6.如果BLE断开,请转步骤3
案例B:
4.MCU生成一个事件到DA14580。
5. DA14580适当的行为(重新启动广告,发送指示)
6.转到步骤3
或者我们通过MCU和DA14580之间的GPIO来处理唤醒。GPIO的状态(由MCU改变)会告诉DA14580去睡觉还是保持清醒?
谢谢,
Hrishikesh
嗨dhrishi,
1.是的,这是正确的,App_default_state_mode为设备的睡眠模式设置了Defualt行为。
2.不,如果你返回KEEP_POWERED,即使你已经在ARCH_中设置了默认睡眠模式。_SLEEP将强制设备取消休眠并重新启动整个while循环,并重新开始对休眠过程的检查。请参阅UM-B-051软件平台参考资料。pdf
关于您可以在睡眠中放置设备的位置,这取决于应用程序,在BLE应用程序中,通常这些设备在广告间隔和连接间隔之间处于睡眠模式(580将根据其的广告和连接间隔处理。雷竞技安卓下载由申请编程)。除此之外,如果您需要使用UART运行时,设备需要唤醒(它还需要XTAL16要激活并为UART定居以便正确运行),所以在每个UART互动中,您应该没有睡觉。关于外部MCU应该在睡眠和无睡眠模式之间涂上设备,这依赖于您的意图如何实现睡眠功能,显然外部设备应该在580醒来时意识到才能发送数据,因此如图所示580处于睡眠模式,外部MCU可以切换GPIO以唤醒580并等到XTAL已经解决,580可以通过GPIO或通过UART命令通知外部设备。此外,而不是唤醒设备,您可以使用UART的流量控制作为DSPS应用程序。有不同的方法来实现这一点,您必须检查哪些更适合您的应用程序。
由于MT_dialog
你好,
谢谢你的回复。
当你说:
“显然外部设备应该知道,当580醒来时,为了发送数据,所以如果例如580处于睡眠模式,外部MCU可以切换GPIO以唤醒580并等待XTAL已经解决,580可以通过GPIO或通过UART指令通知外部设备。“
我有几个问题:
1.所以,如果我从外部MCU切换GPIO,我想唤醒DA14580,我需要为此编写什么软件代码?(把它从睡梦中唤醒,等XTAL安定下来)
2.一旦它醒来,我可以通知外部设备,对吧?此外,当UART交易完成时,我需要将设备再次睡眠,正确?我怎么做。示出相同的样本的抽样可以是有用的。
3.在这种情况下(2.)app_on_system_powered的返回值会发生什么。我的意思是,如果我的函数返回GOTO_SLEEP,当我唤醒它的UART事务,我需要通过这个函数返回KEEP_POWERED也或它将被照顾?
谢谢,
Hrishikesh
嗨dhrishi,
1.是的,在外部MCU开始发送数据之前,您必须意识到设备唤醒,XTAL16已解决,以便正确接收UART上的数据。
2.是的,唤醒时,您应该通过额外的GPIO通知外部设备或等待XTAL定居。关于睡眠回来机制,有多种方法可以使设备有效并返回睡眠,例如,您可以在持续的事务时返回Keep_Power后,一旦交易完成,您可以返回Goto_sleep,设备将返回要睡眠,您还可以使用Arch_disable_sleep()函数取消休眠,而交易正在进行并使用ARCH_SET_EXTEDDE_SLEEP()函数恢复休眠模式。关于一个例子,您将能够在参考设计部分中找到无附加系数串行链接,也许这将为您提供一些额外的提示。
3.我不把问题,从回调,你返回GOTO_SLEEP或KEEP_POWERED你可以控制从应用程序如果设备会去睡觉,如果你有悬而未决的行动从您的应用程序,那么您需要呼叫保持动力为了设备为这些行动那么这就是你应该做的。设备将通过这些函数,并检查应用程序想要做什么,如果应用程序指示它们使用KEEP_POWERED,然后它们将执行额外的周期,直到函数返回GOTO_SLEEP,以便SDK继续睡眠过程。
由于MT_dialog