你好,对话框的团队,
我使用自定义板为我的项目。
该项目有一个压力传感器,通过gpio每30秒发送曼彻斯特编码数据。我的对话框芯片解码数据并将其加载到广告字符串中。我有一个电池,用来给我的电路供电。我允许睡眠以节省电池寿命。
到目前为止,我已经完成了以下工作。由于我们正在开发自定义硬件,所以我对示例(ble_app_sleepmode)程序做了如下更改。
1)根据我们在user_peri_setup .h中的原理图修改了led端口和按钮引脚
改变了#define CFG_LP_CLK LP_CLK_XTAL32到#define CFG_LP_CLK LP_CLK_RCX20在da1458x_config_advanced.h,因为我们没有一个32Khz的外部晶体。
改变了#define cfg_xtal16m_adaptive_settlement到#undef cfg_xtal16m_adaptive_settlement因为点2。
4)#undef cfg_code_location_ext和#define cfg_code_location_otp在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,
请更新我的状态,因为我正在等待您在项目中进一步发展的回复。
问候,
标记
嗨马克,
两个应用程序标志都设置为正确的“是”。您使用的包裹是什么?WLCSP34,QFN40或QFN48?我选择了QFN40的OTP标题。此外,选择时钟源在外部晶体振荡器中,但在您使用的初始帖子中使用间隔RCx。您在OTP标题中完成了哪些变化?您是否烧毁了“设备和包”和“睡眠时钟源”或是默认配置?
>>>我将代码下载到OTP后,我断开了调试器。我把电池取下来,重新插了回去。它运行了几分钟,然后就卡住了。
由于它运行几分钟,这意味着设备从OTP正确启动。可能这个问题可能与SW相关。设备是否突然宣传和停止?您是否能够将其与对等设备连接?
谢谢,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。我没有改变标题中的任何东西。我只将应用程序标志更改为是。
---->由于它运行了几分钟,这意味着设备从OTP正确启动。可能这个问题可能与SW相关。设备是否突然宣传和停止?您是否能够将其与对等设备连接?
这些设备会运行几分钟,当它从睡眠中醒来时就会停止。应用程序的运行时间变化很大。有时2分钟就停了,也可能需要15分钟。因为我的项目只涉及广告,所以我没有把它连接到对等设备上。如果问题与软件有关,为什么在调试过程中没有发生?
-------------------------------------------------------------------------------------------------------------------------
->我最大的疑问是,如果有一个错误在应用程序,为什么它运行了一定的时间,然后停止。
->我有一个移动应用程序,记录与系统时间的广告数据。根据我的项目,广告间隔是150ms, 5秒后广告停止。根据我的日志,芯片会在广告停止前的5秒内醒来并停止。
->我还从您的网站上的在线教程,以下一行应该从rwip.c评论。如果不使用32Khz外部水晶
// DA14585/586不支持Boost模式+ RCX
if (GetBits16(ANA_STATUS_REG, BOOST_SELECTED) == 1)
ASSERT_WARNING (0);
我没有尝试评论这一点,因为我们没有许多筹码,因为我们在Covid-19锁定时锁定。我的代码在调试中跑了超过一周的直线。在我做了OTP之后,我开始面对问题。请支持我,因为它非常紧急。
------------------------------------------------------------------------------------
如果您可以在某些方面引导我,因为我正在使用自定义板,并且在做OTP后发现错误后,我就会更好。我将被问到我的管理员关于多少筹码你会浪费多少?
问候,
标记
嗨马克,
您提到您在开发模式下测试了项目。请记住,当附加调试器时,这可以防止系统进入睡眠模式。你有没有附上调试器的测试?
您的问题与睡眠模式的唤醒是相关的。
例如,如果您将相同的FW下载到SYS-RAM(没有连接的调试器)或SPI Flash中,则运行是否正确?
关于OTP标题似乎是正确的。如果OTP标题和OTP图像未正确刻录,则设备将无法启动!在您的情况下,DA14585正在正确启动并开始广告。
谢谢,PM_Dialog
嗨pm_dialog,
--->您提到您在开发模式下测试了您的项目。请记住,当附加调试器时,这可以防止系统进入睡眠模式。你有没有附上调试器的测试?
我试图通过按相同的调试按钮开始从keil启动调试会话并停止调试会话。代码没有运行。
正如我在上面的文章中所说的,我认为代码挂在广告过程的中间(即在广告间隔之间醒来和睡觉)。我的代码位于user_sleepmode.c文件中,我在其中处理外部中断和数据解码。在收到数据后,我开始发布并设置一个app_easy_timer 5秒....在那之后,我停止广告。在这期间,我什么都没有。我如何检查代码挂在哪里?什么好主意吗?
问候,
标记
嗨马克,
所以问题与SW相关。让我们试着调查根本原因的原因。如果您使用附加调试器运行自定义板中的应用程序代码,则停止任何地方吗?如果是,请您能分享一个截图卡住的屏幕截图吗?看门狗是否已禁用ORE?
谢谢,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,
我说你所说的。
我#Defined宏并按下调试按钮,然后再次按下相同的按钮。代码再次陷入困境。
问候,
标记
嗨马克,
它在哪里卡住了?你能分享一张截图吗?
谢谢,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_peri_setup .c中,将所有gpio配置为下拉输入。这是不需要的,因为默认状态是INPUT_PULLDOWN。您可以很容易地阅读gpio寄存器来澄清它。此外,这种代码和平会重新配置所有的gpio,这是不推荐的。
此外,在user_sleepmode.c文件中,您使用的是从未保留的GPIO !
请找到附加的差异文件与我所做的修改在您的代码。有了这些修改,我可以在我们的dk运行您的项目。
OTP代表一个时间可编程,因此您应该确保在燃烧之前完全运行的项目!
在开发阶段,建议启用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拍摄了一份新鲜的SleepMode示例,并试图将其下载到585女儿板中的RAM。我没有在任何代码中修改任何内容。当我按下调试按钮并启动时,它立即在NMI_Handler停止。您的示例代码是否会在585女儿板上进行修改?
问候,
标记
你好,Mark,请先将fw下载到RAM中,现在可以工作了吗?
嗨,马克,你能说明你用的是哪个dk?哪个子板和哪个母板?是的,该示例正常工作..
你好,
工具包是DA14580DevKT-P_VC
子板是DA14585。
问候
你好,Mark,是的,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项目并构建它并启动调试会话。我没有修改里面的任何东西。但我也面临着同样的问题。我已附上截图。
问候,
标记
HI Mark,您是否能够运行其他其他SDK项目?例如,BLE_APP_BAREBONE。所有SDK示例都在我们的DKS出框中运行,并且由SDK提供。在这个特定的设备中,你烧了OTP吗?
你好,
我不能举出任何令人信服的例子。我尝试了blinky项目。它工作得很好。
问候,
标记
嗨马克,
请查收附件我的跳线配置。所有BLE示例都按预期运行。在ble_app_sleepmode的情况下,我能够使用附加的配置运行它。请试着将SDK解压缩到一个新文件夹中,然后再试一次。我建议有一个简短的SDK路径-可能在C:\下解压。如果没有再次运行,可能是单板损坏。你在那个设备里写了OTP了吗?
谢谢,PM_Dialog
嗨pm_dialog,
我试过你说的。
1)我拿出一个新的SDK副本,并在D盘创建一个文件夹。我在没有修改任何内容的情况下运行了sleepmode示例。我一开始调试会话,它就卡在了nmi处理器上。
2)连接智能片段工具并检查读取OTP内存。它只读零。
问候,
标记