你好,对话框的团队,
我正在为我的项目使用一个自定义板。
这个项目有一个压力传感器,它通过gpio每30秒发送一次曼彻斯特编码数据。我的对话芯片解码数据并将其加载到广告字符串中。我带了一块电池给电路充电。我启用睡眠以节省电池寿命。
到目前为止,我已经完成了以下工作。由于我们正在开发自定义硬件,我对示例(ble_app_sleepmode)程序做了如下更改。
1)根据我们在user_peripher_setup .h中的原理图更改led端口和按钮引脚
2)在da1458x_config_advanced.h中更改#define CFG_LP_CLK LP_CLK_XTAL32为#define CFG_LP_CLK LP_CLK_RCX20,因为我们没有一个32Khz的外部晶体。
3)更改#define cfg_xtal16m_adaptive_setting为#undef cfg_xtal16m_adaptive_setting,因为第2点。
4) #undef CFG_CODE_LOCATION_EXT和#define CFG_CODE_LOCATION_OTP在da1458x_config_advanced.h
我已经成功地调试了项目与我的585devkit,它运行没有任何问题。我现在面临以下问题。因为我的调试会话正常运行,所以我计划执行OTP。在我做了OTP之后,程序不能运行很长时间。它跑了一段时间,然后我想停了。不知道为什么。
当做
马克
设备:
我附加的项目文件夹也。
嗨kuda,
谢谢你的问题。
>>>>我现在面临以下问题。因为我的调试会话正常运行,所以我计划执行OTP。
你的意思是你已经附加了调试器?如果是,这将防止系统进入睡眠模式。你完全确定你的应用程序在我们的DK中运行吗?
在自定义板的情况下,您是否尝试在调试模式下运行应用程序?例如,您是否尝试下载fw到System-RAM?
谢谢,PM_Dialog
嗨PM_Dialog,
是的。我把代码下载到sys-RAM,它工作得很完美,没有任何问题。
在我将代码下载到OTP之后,我断开了调试器。我把电池拆了下来,又装了回去。它运行了几分钟,然后卡住了。
当做
马克
嗨MarkDsylva_2277
你能导出并分享你正在使用的OTP头吗?
谢谢,PM_DIalog
嗨PM_Dialog,
如何导出OTP头?
当做
马克
嗨MarkDsylva_2277
从SmartSnippets工具箱。您需要连接到OTP头并将其导出到文件。
谢谢,PM_Dialog
嗨PM_Dialog,
我在阅读时犯了很多错误。
我正在连接圆木。
当做
马克
嗨PM_dialog,
我设法打了头球。它附在这里。
当做
马克
嗨PM_Dialog,
请更新我的状态,因为我在等待您的回复,以进一步发展我的项目。
当做
马克
你好,马克,
两个应用程序标志都被设置为“Yes”,这是正确的。你用的是什么包?WLCSP34, QFN40还是QFN48 ?我的OTP头,你已经选择了QFN40。此外,时钟源被选择到外部晶体振荡器,但在最初的帖子中,您使用的是间隔RCX。你对OTP头做了什么改变?您是否已烧毁“设备和包”和“睡眠时钟源”或它是默认配置?
当我将代码下载到OTP后,我断开了调试器。我把电池拆了下来,又装了回去。它运行了几分钟,然后卡住了。
由于它运行了几分钟,这意味着设备正在从OTP正确引导。问题可能与软件有关。设备是否会突然停止?您能将其与对等设备连接吗?
谢谢,PM_Dialog
嗨PM_Dialog,
——>你用的是什么包?WLCSP34, QFN40还是QFN48 ?我的OTP头,你已经选择了QFN40。
是的,是QFN40。
---->另外,时钟源被选择到外部晶体振荡器,但在最初的帖子中,您使用的是间隔RCX。你对OTP头做了什么改变?您是否已烧毁“设备和包”和“睡眠时钟源”或它是默认配置?
我有一个外部晶体连接。但对于低功耗晶体选择,我没有一个32Khz的外部晶体连接到我的对话芯片。所以我把它从define CFG LP CLK LP CLK XTAL32改为define CFG LP CLK LP CLK RCX20。我没有在标题中更改任何其他内容。我只将应用程序标志更改为“是”。
---->由于它运行了几分钟,这意味着设备正在从OTP正确引导。问题可能与软件有关。设备是否会突然停止?您能将其与对等设备连接吗?
该设备运行几分钟,当它从睡眠中醒来时,它就停止了。应用程序的运行时间变化很大。有时会在2分钟内停止,也可能需要15分钟。因为我的项目是与广告相关的,所以我没有将它与对等设备连接。如果是软件问题,为什么调试过程中没有出现?
-------------------------------------------------------------------------------------------------------------------------
>我最大的疑问是,如果应用程序中有一个错误,为什么它运行了一定的时间,然后停止。
->我有一个手机应用程序,可以记录系统时间的广告数据。在我的项目中,广告间隔是150ms, 5秒后广告停止。根据我的日志,芯片会在广告停止前的5秒内醒来并停止。
->我也从你们网站上的在线教程中读到,下面一行应该由rwip.c评论。如果不使用32Khz外部晶体
// DA14585/586不支持Boost模式+ RCX
if (GetBits16(ANA_STATUS_REG, BOOST_SELECTED) == 1) / /将所有的数据都加到1
ASSERT_WARNING (0);
我没有试着对此发表评论,因为我身上没有太多的筹码,因为我们因新冠病毒19而处于封锁状态。我的代码在调试中连续运行了一个多星期。在我完成OTP后,我开始面临问题。这件事非常紧急,请支持我。
------------------------------------------------------------------------------------
如果你能在某些方面指导我,那就更好了,因为我使用的是自定义板,我不能在做OTP后发现bug后浪费芯片。我的管理人员会问我,你会为此浪费多少筹码?
当做
马克
你好,马克,
您提到您在开发模式下测试了项目。请记住,当附加调试器时,这会防止系统进入睡眠模式。您曾经在没有附加调试器的情况下进行过测试吗?
从便携的角度来说,你的问题与从睡眠模式中醒来有关。
例如,如果您下载相同的FW到Sys-Ram(没有附带调试器)或SPI Flash,它是否运行正确?
关于OTP标题似乎是正确的。如果OTP标头和OTP映像未正确刻录,设备将无法启动!在您的情况下,DA14585正在正确引导并开始发布广告。
谢谢,PM_Dialog
嗨PM_Dialog,
你提到你在开发模式下测试了你的项目。请记住,当附加调试器时,这会防止系统进入睡眠模式。您曾经在没有附加调试器的情况下进行过测试吗?
我试图从keil启动调试会话,并通过按下相同的调试按钮停止调试会话。代码没有运行。
正如我在上面的文章中所说的,我认为代码挂在广告过程的某个地方(即在广告间隔期间醒来和睡觉)。我的代码在user_sleepmode.c文件中,在这里我处理外部中断和数据解码。收到数据后,启动广告并设置一个app_easy_timer,时间为5秒....之后我停止广告。在这期间,我什么都没有。我如何检查代码挂起的地方?什么好主意吗?
当做
马克
你好,马克,
所以问题与SW有关。让我们试着调查一下根本原因是什么。如果您在附加了调试器的自定义板中运行应用程序代码,它会在任何地方停止吗?如果是,你能分享一下卡住的地方吗?看门狗是否被禁用?
谢谢,PM_Dialog
嗨PM_Dialog,
- - - >没有。代码不会停在任何地方。运行起来没有任何问题。
——>我已经关闭了看门狗。
当做
马克
你好,马克,
你能在启用WDOG的情况下运行它吗?现在,如果您在调试模式下运行它,代码是否会卡住?请定义CFG_WDOG宏并再次运行它。
谢谢,PM_Dialog
你好,马克,
另外,您使用的SDk是什么?我无法在SDK中构建提供的示例代码。
谢谢,PM_Dialog
嗨PM_Dialog,
我使用的SDK是6.0.12
当做
马克
你好,马克,
我的建议是启用WDOG并在调试模式下运行代码。另外,请启用CFG_DEVELOPMENT_DEBUG标志。这允许您热附加调试器,并在发生硬故障或NMI时获取调试信息。所以,这两个宏启用,是卡住任何地方,当破坏它在调试模式?另外,没有必要为了调试它而缩短OTP -只需通过Keil IDE下载固件到System-RAM中。
同时,我会尽量在我们的开发板上运行附件的项目。
谢谢,PM_Dialog
嗨PM_Dialog,
我照你说的做了。
我通过按下调试按钮来定义宏和上传代码,然后再次按下相同的按钮。代码又卡住了。
当做
马克
你好,马克,
它卡在哪里?你能分享一个截图吗?
谢谢,PM_Dialog
嗨PM_Dialog,
我已经断开了调试器。所以我看不出它卡在哪里了。
但是当我使用附加的调试器运行时,代码可以正常运行。
----------------------------------------------------------------------
我在最后期限完成项目在明天,因为代码广告之间的间隔就卡住了,我想删除otp副本的睡眠之间间隔,通过虚假广告arch_set_extended_sleep (false)和改变静态常量sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON……
这能暂时解决我的问题吗?
当做
马克
你好,马克,
我已经使用定义的CFG_WDOG和CFG_DEVELOPMENT_DEBUG宏运行了附加的项目。我正在研究一个QFN40女儿板和我们新的Pro-DK主板。为了使用板载按钮唤醒设备,我使用P1_1作为LED。
当在调试模式下运行代码时,它会在gpio.c文件中的GPIO_SetPinFunction()中卡住。
__asm(“BKPT # 0 \ n”);//这个pin码以前没有被保留过!
在user_peripher_setup .c中,您将所有gpio配置为下拉输入。这是不需要的,因为默认状态是INPUT_PULLDOWN。您可以很容易地阅读GPIOs寄存器来澄清它。此外,这种和平的代码重新配置所有的gpio,这是不推荐的。
另外,在user_sleepmode.c文件中,您使用的是一个从不被保留的GPIO !
请在附件中找到一个diff文件,里面有我在你的代码中做的修改。通过这些修改,我可以在我们的dk中运行您的项目。
OTP代表One Time Programmable,所以你应该确保你的项目在燃烧它之前是完全运行的!
在开发阶段,建议启用WDOG和开发调试,否则,如果代码卡住了,你将永远不会收到通知!总之,烧录OTP图像和OTP头要求应用程序代码100%运行。否则,芯片将永远不会从OTP启动!
你们使用的DA14585是什么包装?
谢谢,PM_Dialog
嗨PM_Dialog,
好啊我会照你说的做。
我使用的是QFN40包。
GPIO保留问题会导致代码在执行OTP后挂起吗?
当做
马克
因为您是在调试模式下运行项目,所以应该定义CFG_DEVELOPMENT_DEBUG。这允许您模拟从OTP到System-RAM的OPT镜像。
我建议在DK外运行这个项目。它运行正常吗?
如果是,那么使用您的定制板并下载FW到System-RAM中。请确保OTP是空的。100%有效吗?
嗨PM_Dialog,
我从你的skd取了一份新的睡眠模式示例,并试图下载到585子板的ram中。我没有修改任何代码。当我按下调试按钮并开始代码时,它立即在nmi_handler处停止。在585子板中,您的示例代码是否可以像这样工作而不需要修改?
当做
马克
嗨,马克,请先把fw下载到内存中-现在可以工作了吗?
你好,Mark,你能告诉我你用的是哪个DK吗?哪个子板和哪个母板?是的,这个例子运行正常。
你好,
工具包是DA14580DevKT-P_VC
子板是DA14585。
问候
你好,马克,是ble_app_sleepmode在该板中正常运行。我可以在我身边跑。是否有可能与跳线配置共享一张照片?
你好,
照片附呈。
当做
马克
你好,Mark,刚刚在我们的DK上测试了ble_app_sleepmode的例子-我用的是和你一样的DK和相同的跳线配置。你有多余的DK来测试吗?我建议在干净的SDK目录下工作。另外,通过我昨天分享给你的修改,我可以在我们的DK中运行你的项目…你是在为DA14585建造项目吗?谢谢,PM_Dialog
嗨PM_Dialog,
你有多余的DK来测试吗?
不。我没有。
-->我建议您也使用干净的SDK目录。
我从6.0.12.1020.2.zip文件中解压了sdk文件夹,打开了ble_app_sleepmode项目并构建了它,并开始了调试会话。我没有修改内部的任何东西。但我也面临着同样的问题。我附上了截图。
当做
马克
嗨,Mark,你能运行任何其他SDK项目吗?例如,ble_app_barebone。所有SDK示例都运行在我们的开箱即用的SDK中,并且由SDK提供。在这个特殊的装置里,你烧了OTP吗?
你好,
我不能举出任何可靠的例子。我尝试了blinky项目。它工作得很好。
当做
马克
你好,马克,
请查收附件我的跳线配置。所有BLE示例都按照预期运行。在ble_app_sleepmode的情况下,我能够运行它与附加的配置。所以,请尝试解压SDK到一个新的文件夹,并再次尝试。我建议有一个短的SDK路径-可能在C:\下解压缩。如果不能再次运行,可能是单板损坏。你在那个设备上写过OTP吗?
谢谢,PM_Dialog
嗨PM_Dialog,
我照你说的试过了。
1)我拿出一份新的SDK,并在D驱动器中创建了一个文件夹。我运行了睡眠模式示例,没有修改任何内容。当我开始调试会话时,它在nmi处理程序上卡住了。
2)连接智能代码片段工具并检查读取OTP内存。它只读0。
当做
马克