你好,
我们有以下设置:
我们的设备是一个BLE外设,它是通过UART到DA14580的外部MCU。从UART从MCU到DA14580接收到GATT数据库(服务和特性),广告数据和任何其他事件,然后将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处理。除此之外,来自中央设备的所有通道相关请求也由DA14580处理吗?
DA14580在延长睡眠中唤醒:
1.来自MCU的UART请求。
2. BLE中断(来自Central的读/写请求)
以下是我的序列。请告诉我我在哪里可以放大DA14580睡觉,如何唤醒它:
1. MCU通过UART发送GATT数据库
2. MCU通过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_Power,即使在Arch中设置了默认睡眠模式_.._睡眠状态也会强制设备取消睡眠并重新启动整个循环,然后重新开始睡眠过程。请查看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指令通知外部设备。“
我有几个问题:
那么,如果我从外部MCU切换一个GPIO,我想唤醒DA14580,我需要写什么软件代码?(把它带出睡眠并等到xtal已解决)
2.一旦它醒来,我可以通知外部设备,对吧?此外,当UART交易完成时,我需要将设备再次睡眠,正确?我怎么做。示出相同的样本的抽样可以是有用的。
3.在这种情况下(2.)App_on_System_Powered的返回值会发生什么。我的意思是,如果我的函数返回goto_sleep,当我唤醒uart事务时,我还需要通过这个功能返回keep_power,还是它将得到照顾?
谢谢,
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.