无法使用GTL进入延长睡眠

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
15个职位/ 0新
最后一篇文章
pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
无法使用GTL进入延长睡眠

我们在PAN1740模块上运行了一个应用程序。我们在DA14580上处理大多数消息,但我们有一个通过SPI到MCU的外部接口。通信使用GTL(即集成处理器应用程序的GTL接口)。

我们现在正试图让我们的工作应用程序在启用延长睡眠的情况下运行。我们有正确的东西,我相信。。。

#定义CFG_GTL_SPI

#定义CFG_应用程序
#定义CFG_INTEGRATED_HOST_GTL

#定义CFG_MEM_MAP_EXT_SLEEP
和#undef CFG_MEM_MAP_DEEP_SLEEP
和#undef CFG_DEVELOPMENT_DEBUG

const static sleep\u state\u t app\u default\u sleep\u mode=ARCH\u EXT\u sleep\u ON;

我们在.app_going_to_sleep和.app_resume_from_sleep上设置了回调以打开和关闭GPIO行以指示睡眠,但我们没有看到这样的更改。
部分问题是我们无法调试主循环以理解它为什么不休眠,因为我们需要关闭调试。
如果我们让CFG_DEVELOPMENT_DEBUG#定义并调试主循环,我们*认为*我们看到它无法在rwip_prevent_sleep_get()进入睡眠状态。
我们怀疑是GTL的存在。这可能吗?我们如何让睡眠模式工作?

谢谢,
保罗。

设备:
MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

您必须选择您的设备是使用GTL(使用外部处理器)工作,还是具有应用程序级模块(启用APP_任务,独立配置)。你不能两者兼得,这是CFG_应用程序定义规定的。如果定义了CFG_应用程序,则您将处于集成处理器模式。如果未定义,则您将处于外部模式。

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
**你能确定优先顺序吗

**你能给这条线定个轻重缓急吗**
更好的是,我们是否可以将讨论作为支持票离线,或者通过电话/skype进行讨论?

我们已经完成了硬件的设计和建造,并且非常接近完成我们的固件开发。您的回应似乎表明,我们有可能需要我们换到不同的BLE提供商/解决方案阻塞问题。因此,我们必须尽快解决这个问题。

我们目前使用的架构非常类似于UM-B-017中所示的附图(zip格式的jpg),其标题为“集成处理器应用中的DA14580/581 GTL接口”。正如文件所述,我们有一个集成处理器应用程序(即“任务应用程序”)和一个GTL接口。亚博国际官网平台网址

唯一的区别是,我们使用SPI进行外部通信,而不是UART,并且我们不使用显式唤醒GPIO(为此我们使用了DREADY)。

您是否可以确认:您是否在之前的回复中说过,在集成处理器应用程序中不可能使用GTL接口?是否不支持上述体系结构?或者我们误解了这份文件及其含义?

我们使用该文档第5节中描述的传输格式,在app.h中定义我们自己的一组应用程序级消息和处理程序,如第6节所定义。第7节讨论了GTL使用时的最大睡眠时间,但我们还没有达到这一点。我们的代码是稳定的,并且已经运行了一段时间,将GTL消息传递给我们的外部MCU。但是,我们的应用程序不会进入(延长)睡眠状态。

如果附加图中的建筑是支持的,你能帮我们理解我们需要改变,以实现它的描述?我们需要一个TASK_APP(如图所示)来处理概况相关的消息交换(CREATE_DB,启用/禁用,写入指示等),再加上一个GTL接口与外部处理器较不频繁的基础上,当交换高电平消息发生特定的应用级事件。我们也支持迪斯,BASS配置文件(以及可能在将来添加额外的)。

我们发现周围CFG_APP混乱的文档。在config_basic.h文件的注释说:

/***************************************************************************************************************/
/*集成或外部处理器配置*/
/*-定义的集成处理器模式。主机应用程序在DA14580处理器中运行。主机应用程序*/
/*是应用程序内核任务的任务*/
/ * -undefined外部处理器模式。主机应用程序上的外部的处理器上执行。以* /通信
/*通过GTL协议在信令iface(UART、SPi等)上的BLE应用*/
/***************************************************************************************************************/

但在上面提到的文件中,它说:
“如果未定义,它将启用*集成处理器应用程序*中的应用程序任务通过GTL/UART接口与外部处理器的通信。”

您的及时答复,将是非常赞赏。
保罗。

附件:
MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

通常情况下,SDK的工作方式是推送到TASK_GTL或TASK_应用程序,我们没有任何项目同时使用两者,SDK在一个应用程序任务中报告,我查看了代码,显然两者都有可能(从未在实际领域进行过测试,我提到的只是一个理论)。因此,如果你正在做的是工作,我会假设你已经定义了CFG_应用程序,因此从堆栈到应用程序的每条消息最终都会到达TASK_应用程序,因此为了将其中一些消息发送到GTL任务,我假设你正在将TASK_应用程序的消息推回到堆栈,并将TASK_GTL作为接收器,这就是你在项目中所做的,因为这是我认为这会起作用的唯一方法?

关于睡眠,是的,GTL可能会影响设备的睡眠,如果设备的传输尚未结束,并且仍有待发送的数据,则设备将保持清醒,直到它们结束。关于调试和睡眠,如果您使用的是最新的SDK,这应该是可以做到的。

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
谢谢你的回复。你

谢谢你的回复。关于TASK_应用程序和TASK_GTL如何为我们工作,您的假设是正确的,只是我们发送给TASK_GTL的消息与我们作为TASK_应用程序接收的消息不同:它们是我们自己定义的更高级别的应用程序特定消息。与UM-B-017中描述的类似,并使用此处规定的方法。例如:MCU初始化绑定数据库(由外部MCU存储)、启动/停止不同类型的广告、输入当前电池电压水平(同样由MCU检测)、DA14580向MCU发送固件更新数据包以进行无线固件更新,等等。

当我们尝试睡眠时,没有挂起或正在传输的GTL消息。GTL消息并不经常发送-通常仅在启动时以及连接正在进行且最终用户正在进行数据同步或固件更新时发送。

大多数情况下,设备未处于连接状态,也未进行广告宣传。它只是在等待来自MCU的唤醒信号时处于休眠状态(该设备对运动敏感,并在运动时唤醒)。在其他时间,这是广告,睡眠是再次需要节省电力。

注意:我们正在使用Segger J-Link调试器对PAN1740ETU评估模块进行测试,并在我们自己的板上进行测试。

我们确实看到来电app_on_ble_powered()和app_on_system_powered()连接时,广告和每48.75ms时调用每376ms。

那么,一些具体问题:

1) 如果我们的场景/体系结构很少且未经测试,那么为什么会有一份名为“集成处理器应用中的DA14580/581 GTL接口”的文档UM-B-017专门描述了它?我们是否误解了这份文件?它似乎正好代表了这个体系结构,并描述了如何使用它。亚博国际官网平台网址

2) 由于没有GTL活动,您能否帮助我们了解什么可能会阻止设备睡眠?这是我们现在要回答的最重要的问题。我们需要测试什么?我们能做什么?

3) 如果我们让CFG_DEVELOPMENT_DEBUG#定义并调试主循环,我们认为它无法在rwip_prevent_sleep_get()处进入睡眠。你能解释一下吗?可能与GTL有关吗?它在SDK实现中很深,我们很难调试。

4)我们正在使用SDK 5.0.4 - 这是正确的发展留下调试吗?

谢谢,
保罗

MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

1)文档,你参照位于停止相关的文档的支持网站SDK3,显然这种架构是abandonded当搬到一个新的SDK(这不是用作据我所知)但是functionallity仍然在新的SDK,就我所知,你没有误解的文件,显然你可以有这种配置,甚至在SDK 5,为误解和我仓促的回答道歉。

2-3) CFG_DEVELOPMENT_DEBUG定义,它所做的就是在fw运行时删除任何断言,而且在深度睡眠的情况下,它会关闭整个系统,我没有发现睡眠和该标志之间的任何关系。你能告诉我你是如何确定设备处于休眠状态和处于醒着状态的吗?我的意思是你是通过功率分析器测量的,还是通过DMM测量的?rwip_prevent_sleep_get()应该去休息,如果有一些防止设备睡觉这与RW堆栈或gtl接口但仍然我不看到任何关系berween和CFG_DEVELOPMENT_DEBUG(你看到任何改变在睡眠和CFG_DEVELOPMENT_DEBUG)之间的行为。一个想法来检查这是地方的brakepoint rwip_sleep底部()函数的函数,它是决定设备确实是要适量后睡眠条件检查,如果你遇到断点的设备是睡觉。

4) SDK5.0.4是唯一能够在睡眠模式下运行调试的SDK。

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
根据你的建议,我有

按照你的建议,我已经把CFG_DEVELOPMENT_DEBUG并调试的睡眠代码/问题。

1) 为了检测睡眠,我使用了在.app_going_To_sleep和.app_resume_from_sleep上设置的回调来打开和关闭GPIO线以指示睡眠。仔细检查表明,这些函数在编译器的优化下得到了实现。在调用这些函数时,外围设备似乎已关闭,因此编译器删除了代码(令人惊讶)。我移动了代码,将GPIO行切换到禁用外围设备之前,该方法用于指示睡眠。

2) rwip_sleep()中有三个地方阻止它睡觉。
a) rwip\u prevent\u sleep\u get()测试
B)通过内核定时器的测试(ble_intrawstat_get()&BLE_GROSSTGTIMINTRAWSTAT_BIT)
c) 和上面一样-只是对内核计时器进行了第二次测试。
这三个测试被注释掉后,设备确实进入了长时间睡眠。我有它在376毫秒时为广告而睡觉和醒来的美好痕迹,当我连接时,我看到它在48毫秒时为连接事件而睡觉和醒来。如果我关闭广告,那么它将按照CFG_MAX_sleep_DURATION_PERIODIC_WAKEUP_MS计时器睡眠和醒来。我目前已经设置为600000(10分钟),工作正常(0.5秒的初始值为500)。

3)在每一个唤醒/休眠周期的GTL接口被重新启用。但有一个问题。两个流式字节时,该设备再次休眠每次,接着是流断发送。这会导致问题和MCU我GTL协议的代码 -你能不能帮我看看这个能不能修好?见附图。我怀疑这是由于直接通过跳转表调用flow_,然后作为gtl_exit_sleep()的一部分再次调用flow_所致;但是,我无法通过跳转表进行调试。你能解释这里发生了什么,谁调用这些跳转表功能,以及如何对它们进行调试?. 另外,我没有gtl.c的任何代码。这个有空吗?

4) 如果我将restore rwip.c恢复到其原始状态,则如上所述,没有睡眠。但是,在发送第一条GTL消息后,睡眠开始正常工作。因此,我认为GTL在最初被认为处于错误状态时一定存在问题。这可能与上述问题的流程有关。你能看一看,看看这是不是可以改进,还是可以解决?

谢谢,
保罗

附件:
MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

2-3)rwip_sleep()具有以上所有的检查,以查看是否上述任何具有挂起程序,如果它有它不会去睡觉,注释掉那些条件不会是明智或推荐,因为设备会去,如果有事情做或不睡觉无关。为了让设备进入睡眠它通过这些检查,并决定。你看到的是,设备总是休息和永远不会到达程序核心深睡期,将信号休眠期间的beggining?如果你提到的设备是取消睡眠由于在内核定时器,你可以请检查您是否删除计时器会发生什么(如果你使用任何)从项目(只是用于测试)?也可以请您删除GTL和检查设备仍具有相同的行为?刚刚尝试使用您的应用程序作为一个独立的设备,并验证该设备进入睡眠模式。然后,你可以重新申请的GTL配置和检查GTL原因睡眠问题。尝试看看是否存在来自外部主机或在保持唤醒设备的接口的信号的任何未决命令。

我能够使用ble_app_peripheral例子,应用SPI GTL配置上项目的话,我已经使用了接近记者主机项目(在另一个580 host_proxr项目)作为对完全嵌入/ GTL修改的项目,我不能主机“找不到任何问题,在睡觉的时候从外部主机的应用程序(从完全托管项目的主机从TASK_APP发送GTL的消息编写自定义特性时)。

4) 关于您报告的问题,这是一个已知的GTL over SPI问题,是的,当设备唤醒时,它会在传输时发送一个重复流,据我所知,不会采取任何措施来修复该问题(请检查以确保),作为一种解决方法,您可以尝试添加一个计数器,以使字节流的发出次数不超过必要的次数,如下所示:

在spi_hci_flow_off_func()中应用以下内容

if(0==流量
{
返回true;
}否则
{
在碳纳米管上流动;
}

在spi_hci_flow_on_func()中应用以下内容

如果(flow_on_cnt> 0)
{
回来
}别的{
flow_on_cnt ++;
}

这不是一个经过验证或测试的解决方案,但您可以尝试它,以避免出现两个流on信号。

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
谢谢你修复了这个问题

感谢您修复的双流问题。这解决了我的一个问题。
另一个问题仍然存在。让我总结一下:

我们使用GTL和集成处理器(TASK_应用程序)。TASK_APP通过GTL向外部处理器发送消息,以执行高级应用程序特定任务。
我们已经扩展配置睡眠。
当我们启动时,DA不睡觉。它将进行广告宣传、连接并正常工作,但它不会睡眠。
如果我们从移动设备连接到它,并写入导致DA向MCU主机发送GTL消息的特征(控制点),则在发送该GTL消息后,DA立即开始正常睡眠。我们看到它为每个连接事件唤醒。如果我们断开手机的连接,我们会看到每次广告活动都会唤醒手机。它的工作原理和我们预期的一样,在事件之间睡觉。我们甚至可以让它在没有广告的情况下睡觉,并通过GPIO引脚上的外部唤醒事件唤醒它。
因此,我们认为这个问题是由于GTL信息和GTL状态造成的。我们不显式地使用任何内核计时器。

在调试之后,我们在rwip.c中看到了它无法睡眠的两个原因。

如果(rwip\u prevent\u sleep\u get()!=0)
打破

这一行阻止它进一步移动(即执行中断)。这是因为rwip_prevent_sleep_get()返回RW_GTL_TIMEOUT。所以我们用

rwip_防止_睡眠_清除(RW_GTL_超时);

在我们的初始化代码中,这一行不再阻止我们睡觉。

第二个问题是与

if(ble_intrawstat_get()&ble_GROSSTGTIMINTRAWSTAT_位)
打破

该BLE_GROSSTGTIMINTRAWSTAT_BIT位设置,并防止睡觉。我们没有关于此位多的数据,它是没有明确设置在代码的任何地方。我们已经尝试使用

REG_BLE_WR(BLE_INTRAWSTAT_ADDR,BLE_INTRAWSTAT_RESET);

在我们的初始化代码,但这没有帮助-它是在别处设置的。

您是否可以帮助了解更多关于该位的信息,它正在做什么,它是如何设置的,以及它与GTL接口的关系。或者,更好的是,您是否可以像对上一个问题一样提出修复建议?

谢谢,
保罗。

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
对话-有任何帮助的机会吗

对话框 - 帮助上述问题的任何机会呢?
它阻碍了我们的发展,我们没有太多的时间了!

非常感谢,,
保罗。

MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

你提到的设备停止的部分是用于检查所设置的计时器,如果有一个即将到期,则设备将取消睡眠定时器程序。由于该设备进入睡眠状态时,有超过GTL层的消息交换,你试图在设备和主机和检查之间交换虚拟消息,是否会强制设备进入睡眠状态?

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
是的,我们就是这样

是的 - 这就是我们如何工作了。我们通过移动连接到该设备,然后手动导致发送虚设信息。然后,这将启动设备睡觉,因为它应该。

保罗

MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

我的意思是,就我从上面的描述中所能理解的,由于某种原因,我无法确定,因为我无法在我的设置上进行复制,设备保持活动状态,显然,在您发送或接收GTL消息后,设备会按其应有的方式运行。因此,我建议在设备未连接的情况下测试这种情况,例如,在设备配置完毕或设备创建数据库后,立即向外部MCU发送一条虚拟GTL消息。此外,设备上是否有任何外部唤醒配置,如果有,请删除该功能并检查是否会产生您正在经历的副作用?

谢谢你的对话

pvmellor
离线
最后一次见到:1年8个月前
加入:2017-04-27 20:30
在试验了你的

在试验了你的建议之后,我们找到了一个解决方案。我们向MCU发送了一条初始就绪消息,并收到了一条初始消息。但是,我们在user_app_init()期间发送了READY消息,这导致了问题。如果我们根本没有发送READY消息,那么DA就会像我们预期的那样立即进入睡眠状态(延迟2秒后)。如果我们在_db_init_complete()上的用户_app_期间发送就绪消息,那么睡眠仍能按预期工作。因此,通过延迟就绪消息,问题似乎得到了解决。

谢谢,
保罗

MT_对话框
离线
最后一次见到:4个月2周前
工作人员
加入:2015-06-08 11:34
嗨pvmellor,

嗨pvmellor,

谢谢你让我们知道,很高兴你能弄明白。

谢谢你的对话