你好,对话框的团队,
我正在为我的项目使用定制板。
该项目有一个压力传感器,通过gpio每30秒发送曼彻斯特编码数据。我的对话框芯片解码数据并将其加载到广告字符串中。我有一个电池,用来给我的电路供电。我允许睡眠以节省电池寿命。
到目前为止,我已经完成了以下工作。由于我们正在开发自定义硬件,所以我对示例(ble_app_sleepmode)程序做了如下更改。
1)根据我们的user_periph_setup.h中的原理图改变了LED端口和按钮引脚
2)将#define cfg_lp_clk lp_clk_xxtal32更改为#define cfg_lp_clk lp_clk_rcx20在da1458x_config_advanced.h中,因为我们没有32khz外部水晶。
改变了#define cfg_xtal16m_adaptive_settlement到#undef cfg_xtal16m_adaptive_settlement因为点2。
#undef CFG_CODE_LOCATION_EXT and #define CFG_CODE_LOCATION_OTP in da1458x_config_advanced.h
我已经成功地调试了我的585devkit项目,它运行没有任何问题。我现在面临以下问题。因为我的调试会话正常运行,我已经计划做OTP。在我做了OTP后,程序没有运行很长时间。我想它跑了一会儿就停了。不知道为什么。
问候,
马克
设备:
我也附上了项目文件夹。
嗨kuda,
谢谢你的问题。
>>>>我现在面临以下问题。因为我的调试会话正常运行,我已经计划做OTP。
你的意思是你有调试器附着吗?如果是,则防止系统进入睡眠模式。您是否完全确定您的应用程序在我们的DK中运行?
在自定义板的情况下,您是否尝试在调试模式下运行应用程序?例如,您是否试图将fw下载到系统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 ?我发现你选择了QFN40的OTP标头。此外,时钟源被选择到外部晶体振荡器,但在您的初始post您使用的间隔RCX。你在OTP报头中做了什么改变?您是否烧毁了“设备和包”和“睡眠时钟源”或它是默认配置?
下载代码到OTP后,我断开了调试器。我把电池取下来,重新插了回去。它运行几分钟,然后陷入困境。
因为它正在运行几分钟,这意味着设备正从OTP正确引导。这个问题很可能和西南有关。设备会突然发布广告并停止吗?你能将它与对等设备连接吗?
谢谢,PM_DIALOG.
嗨PM_Dialog,
——>你用的是什么包?WLCSP34, QFN40还是QFN48 ?我发现你选择了QFN40的OTP标头。
是的,它是QFN40。
此外,时钟源被选择到外部晶体振荡器,但在您的最初帖子您使用的间隔RCX。你在OTP报头中做了什么改变?您是否烧毁了“设备和包”和“睡眠时钟源”或它是默认配置?
我有一个外部晶体连接。但是对于低功率晶体选择,我没有32Khz外部晶体连接到我的对话芯片。因此,我将它从#define CFG_LP_CLK LP_CLK_XTAL32更改为#define CFG_LP_CLK LP_CLK_RCX20。我没有在页眉中更改任何其他内容。我只将应用程序标志更改为Yes。
---->因为它正在运行几分钟,这意味着设备正在从OTP正确引导。这个问题很可能和西南有关。设备会突然发布广告并停止吗?你能将它与对等设备连接吗?
这些设备会运行几分钟,当它从睡眠中醒来时就会停止。应用程序的运行时间变化很大。有时2分钟就停了,也可能需要15分钟。因为我的项目只涉及广告,所以我没有把它连接到对等设备上。如果问题与软件有关,为什么在调试过程中没有发生?
-------------------------------------------------------------------------------------------------------------------------
- >我最大的疑问是,如果应用程序中有一个错误,为什么它运行一段时间,然后停止。
->我有一个移动应用程序,记录与系统时间的广告数据。根据我的项目,广告间隔是150ms, 5秒后广告停止。根据我的日志,芯片会在广告停止前的5秒内醒来并停止。
- >我还从您的网站上的在线教程读取,应从RWIP.c.中评论以下行。如果不使用32kHz外部乳房
// DA14585 / 586不支持Boost Mode + RCX
if(getBits16(ANA_Status_reg,Boost_selected)== 1)
ASSERT_WARNING (0);
我没有试着发表评论,因为我们因为Covid-19被封锁了,我身上剩下的芯片不多了。我的代码在调试中连续运行了一个多星期。在我做了OTP之后,我开始面临问题。这件事非常紧急,请支持我。
------------------------------------------------------------------------------------
如果你能在某些方面指导我会更好,因为我正在使用自定义板,我只是不能浪费芯片后发现错误后做OTP。经理会问我,你们会为此浪费多少芯片?
问候,
马克
嗨,马克,
您提到您在开发模式下测试了项目。请记住,当附加调试器时,这将防止系统进入睡眠模式。您是否曾经在没有附加调试器的情况下进行测试?
你的问题与从睡眠模式中醒来有关。
例如,如果你下载相同的FW到系统ram(没有调试器附加)或SPI Flash,运行正确吗?
关于OTP报头似乎是正确的。如果OTP头和OTP映像没有被正确烧毁,设备将无法引导!在您的情况下,DA14585正在正确启动并开始发布广告。
谢谢,PM_DIALOG.
嗨PM_Dialog,
你提到你在开发模式下测试了你的项目。请记住,当附加调试器时,这将防止系统进入睡眠模式。您是否曾经在没有附加调试器的情况下进行测试?
我尝试从keil开始调试会话,并通过按相同的调试按钮来停止调试会话。代码没有运行。
正如我在上面的帖子中所说,我认为代码挂在广告过程中间的某处(即在广告间隔之间醒来和睡觉)。我的代码位于user_sleepmode.c文件中,在那里我正在处理外部中断和数据解码。收到数据后,我启动广告并设置APP_EASY_TIMER 5秒钟......之后我停止广告。在我之间,我没有任何东西。我怎么检查代码挂起的地方?有任何想法吗?
问候,
马克
嗨,马克,
所以这个问题与SW有关。让我们来调查一下可能的根本原因。如果在自定义板中运行带有调试器的应用程序代码,它会在任何地方停止吗?如果是,你能分享一下它卡住的截图吗?看门狗enabled ore disabled?
谢谢,PM_DIALOG.
嗨PM_Dialog,
- - - >没有。代码不会在任何地方停止。它运行起来没有任何问题。
- >我已经禁用了看门狗。
问候,
马克
嗨,马克,
你能在启用WDOG的情况下运行它吗?现在,如果您在调试模式下运行它,代码会卡住吗?请定义CFG_WDOG宏并再次运行它。
谢谢,PM_DIALOG.
嗨,马克,
另外,你使用的SDk是什么?我无法在SDK中构建所提供的示例代码。
谢谢,PM_DIALOG.
嗨PM_Dialog,
我使用的SDK是6.0.12
问候,
马克
嗨,马克,
我的建议是启用WDOG,并在调试模式下运行代码。另外,请启用CFG_DEVELOPMENT_DEBUG标志。这允许您热连接调试器,并在发生硬件故障或NMI时获得调试信息。所以,与这两个宏启用,是卡住任何地方,当破坏它在调试模式?另外,没有必要bunt的OTP为了调试它-只是下载固件到系统ram通过Keil IDE。
同时,我会尽量在我们的开发板上运行附件的项目。
谢谢,PM_DIALOG.
嗨PM_Dialog,
我照你说的做了。
我定义了这两个宏,并通过按下调试按钮上传代码,然后再次按下相同的按钮。代码又卡住了。
问候,
马克
嗨,马克,
它被困在哪里?你能分享截图吗?
谢谢,PM_DIALOG.
嗨PM_Dialog,
我已断开调试器。所以我无法看到它被困的地方。
但是当我运行附加的调试器时,代码正常运行。
------------------------------------------------------------------------------------
我在明天完成项目的截止日期,因为代码在广告间隔之间被卡住,我正在考虑通过将假到ARCH_SET_EXTEDDE_SLEEP(FALSE)将FALST删除广告间隔之间的OTP复制睡眠,并更改静态const 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_periph_setup.c中,您正在配置所有GPIO以输入下拉。这不需要,因为默认状态是input_pulldown。您可以轻松阅读GPIO寄存器以澄清它。此外,这种代码的平安重新配置了不推荐的所有GPIO。
此外,在user_sleepmode.c文件中,您使用的是从未保留的GPIO !
请在您在代码中找到的修改附加了一个diff文件。使用该修改,我能够在我们的DKS中运行项目。
OTP代表一次性可编程,所以你应该确保你的项目在烧它之前完全运行!
在开发阶段,建议启用WDOG和开发调试,否则,如果代码卡在某处,您将永远不会收到此通知!总之,燃烧OTP映像和OTP头需要应用程序代码100%运行。否则,芯片将永远不会从OTP启动!
你使用的DA14585的包是什么?
谢谢,PM_DIALOG.
嗨PM_Dialog,
好的。我会照你说的做。
我使用的是QFN40包。
GPIO预留问题会导致执行OTP后代码挂起吗?
问候,
马克
因为您是在调试模式下运行项目的,所以应该定义CFG_DEVELOPMENT_DEBUG。这允许您模拟从OTP到System-RAM的OPT镜像。
我建议在DK执行这个项目。它运行正确吗?
如果是,则使用您的自定义板并将FW下载到系统RAM中。请确保OTP为空。这是100%的工作吗?
嗨PM_Dialog,
我从你的skd上取了一份休眠模式的新拷贝试着把它下载到585子板的ram中。我没有修改任何代码中的任何东西。当我按下调试按钮并启动代码时,它立即停止在nmi_handler。您的示例代码在不修改585子板的情况下能正常工作吗?
问候,
马克
HI MARK,请先将FW降至RAM - 现在工作吗?
Mark你好,请问你用的是哪一种DK ?哪一个子板和哪一个母板?是的,这个例子是正确的。
你好,
套件是da14580devkt-p_vc
子板是DA14585。
问候
嗨Mark,是的BLE_APP_SLEEPMODE在此板中正确运行。我可以在我身边跑。是否有可能与跳线配置共享一个phote?
你好,
照片均附呈。
问候,
马克
嗨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项目并构建它并启动调试会话。我没有修改里面的任何东西。但我也面临着同样的问题。我已附上截图。
问候,
马克
你好,马克,你能运行任何其他SDK项目吗?例如,ble_app_barebone。所有SDK示例都运行在我们的开箱即用的SDK中,并由SDK提供。在这个装置里,你烧过OTP吗?
你好,
我无法运行任何BLE示例。我尝试了眨眼项目。它的工作正常。
问候,
马克
嗨,马克,
请找到我的跳线配置。所有BLE示例都按预期运行。在BLE_APP_SLEEPMODE的情况下,我能够使用附加配置运行它。所以请尝试将SDK解压缩到一个新文件夹中,再次尝试。我建议有一个简短的SDK路径 - 可能在C:\下解压缩。如果它没有再次运行,可能会损坏。您是否在该设备中写了OTP?
谢谢,PM_DIALOG.
嗨PM_Dialog,
我照你说的做了。
1)我拿出一个新的SDK副本,并在D盘创建一个文件夹。我在没有修改任何内容的情况下运行了sleepmode示例。我一开始调试会话,它就卡在了nmi处理器上。
2)我连接了智能片段工具和检查读取的OTP内存。它只读取0。
问候,
马克