你好,
我们正在制作定制的DA 14585板。主板从flash启动,由于我们没有使用默认的SPI引脚,我们已经将二级引导加载程序编程到OTP中。睡眠模式被扩展(没有OTP副本)。我们面临的问题是:
1.启用扩展睡眠的代码,当闪烁到HW中时,显示不一致的行为。它发布了一段时间,然后进入非响应状态。
2.同样的代码,在禁用睡眠的情况下,当闪现到hw时,工作得很好
3.通过RAM运行时启用扩展睡眠的代码(使用keil调试器)工作良好。
我们的设计中包括了32khz和16Mhz的晶体。
原因可能是什么呢?请建议。
谢谢
设备:

嗨wisilica,
我不能找出任何明显的行为,我可以提到一些东西,以供你测试。
如果你在flash中刻录SDK项目并启动该项目,你会看到相同的行为吗?你能估计这个设备做多长时间的广告吗?我假设设备是在它保持清醒时发布的,在它睡觉时停止运行,所以试着从fw切换到RCX而不是XTAL32。你可以尝试使用默认引脚(也许在开发套件)从flash启动你的fw,并检查是否有任何不同?
在这篇文章中,关于从特定的SPI引脚引导,我还漏掉了一些东西https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。在585中,除了从特定引脚启动的OTP中刻录的辅助引导加载程序外,585还包括一个机制,以便从特定引脚引导,这可以在OTP标题的引导特定映射字段中定义,您将能够找到附录G和4.3.1 OTP标题段落中的585的数据表中的信息,尽管我不认为您观察到的行为的原因是您在OTP中刻录了辅助引导加载程序。
由于MT_dialog
你好,
感谢您的及时回复。我已经尝试了你提到的事情,结果如下:
1.我没有把我们的应用程序fw编程成flash,而是把最基本的项目编程成flash,默认的睡眠模式被选择为扩展模式。该行为保持不变,即设备发布约3 - 4个报文,然后进入无响应状态。
2.还尝试将CFG_LP_CLK设置为LP_CLK_RCX20,但问题仍然存在。
3.尝试使用booter将固件直接加载到RAM中,然后设备就会正常发布。
4.在开发板中尝试相同的固件(即SPI pin的默认配置),设备工作良好。
我还配置了OTP头,以便从SPI引脚引导如下:
Spi CLK = p0_0, spi_en = p0_1, spi_di = p0_2, spi_do = p0_3
启动=正常顺序,唤醒命令代码= 00,串行速度选择0
配置有什么问题吗?
此外,在二级引导加载程序固件中,所做的唯一更改是定义SPI_FLASH_SUPPORTED和SUPPERT_AN_B_001,并根据我们的原理图配置SPI引脚。
请说明以上问题的原因。
谢谢
嗨wisilica,
既然您已经指出引导序列应该从特定的SPI引脚完成,那么引导标志不应该是0x00(正常序列),而是0xAA(从特定位置的SPI端口引导)。此外,如果您已经烧毁了OTP中的辅助引导加载程序,设备仍将使用辅助引导加载程序而不是串行引导顺序引导。但是我不认为你正在使用辅助引导加载程序的事实会导致无响应的行为,在所有的设备启动和fw运行之后,所以只要你有延长的睡眠,而不是(OTP_COPY_ON)设备应该保留fw。你也可以尝试通过调试器来调试这是附加为了还注意完全弗兰克-威廉姆斯的摊位和监控电力事故前后为了注意如果设备是睡觉和醒来或如果它已经陷入一个断言。
由于MT_dialog
你好,
通过调试器(RAM)运行fw,设备不会停止。我还检查了加载fw直接进入RAM通过booter,它工作良好。只有当它从flash启动时才会发生这个问题。
谢谢
嗨wisilica,
我上面已经提出附加debbuger而设备已经从flash和引导问题已经发生,为了尝试和检查设备的摊位和检查如果这将帮助调试这个问题(只是引导等待事情的发生,然后附加调试器,为了附加调试器通过凯尔在“调试”tab remove the initialization file and then hit the settings button and uncheck the "Reset after Connect"). Since the device appears to stuck when the seconday bootloader runs, perhaps what you are experiencing is related to that fact, perhaps this is an issue of the secondary bootloader and after running from OTP it doesn't reset a register or something similar and when the device goes to sleep it stalls (although i ve tested running the secondary bootloader from RAM and the SPI pins configured like the case above and having the flash bunred with the ble_app_peripheral the device could directly boot from the SPI flash on the specified pins and run as it should, so again i am not able to connect the secondary bootloader with the fact that the device stalls). You should also try to burn the OTP header with the Boot specific mapping flag set to the pins that you would like and check if the device operates that way.
由于MT_dialog
你好,
当调试器运行时,我们如何将其附加到板上?重新给单板供电后,设备开始从flash启动,然后在几秒钟后停止。我们什么时候需要启动调试会话?我认为调试会话将固件转储到RAM中。那么,我们怎么知道代码的终止点呢?
此外,应用程序编程的标志1和2被配置为YES, OTP DMA长度为1FC0, SWD使能标志为在OTP报头中启用的JTAG。同样的快照附在这里(OTP头智能片段)。请查看是否有配置丢失。
此外,问题不会一致。在某些运行相同的固件中,未观察到该问题,设备正常工作。请暗示它的原因。
谢谢
嗨wisilica,
使用您使用的相同项目来构建已刻录到Flash的.hex文件,根据您通常执行的,从闪存启动设备,然后按照上面提供的指令,以防止Keil下载设备的图像并防止JTAG重置(为了通过Keil在“调试”选项卡中附加调试器,删除初始化文件,然后点击设置按钮,取消勾选“连接后重置”)。在这样做只是点击“开始/停止调试会话”而且您将能够附加到自定义板(在附加JTAG之前,您不应该重置设备,或者让Keiil为您做这一点,这就是您应该首先准备的原因上述设置然后启动过程,例如,当检查“连接后”时,jlink将重置设备。击中“停止”按钮以停止执行(或FW可能已停止)并在装配模式中检查如果设备粘在某个地方,您将能够看到此问题和通过地图文件,您将能够查看哪个功能停止了。
关于你对OTP的设置,因为设备能够从SPI正确引导镜像过程是ok的,没有必要编程OTP DMA,因为它只在设备关闭syram时使用,以及所以OTP必须知道醒来时要复制多少数据(同样,你放置的值是OTP较小的580,但在任何情况下这都不会对你的体验产生任何影响)。无论如何,还烧毁了一个585设备与二级引导加载程序,并从指示的SPI引脚引导,再次设备运行,它应该没有问题。
如果这个问题没有持续发生,是否意味着即使通过JTAG下载fw也可能发生问题?所以也许这个问题和通过flash下载之间没有联系?
由于MT_dialog
你好,
我们在直接将FW加载到RAM中,我们没有观察到这个问题。此外,在构建代码时,各种内存部分的大小如下:
程序尺寸:码= 20808 RO-DATA = 2892 RW-DATA = 600 ZI-DATA = 8400
这和这个问题有什么关系吗?
现在,单击“开始调试会话”选项卡,然后在停止它时,我无法查看“装配”窗口。有没有任何设置缺失?
谢谢
嗨wisilica,
你所张贴的只是从keil生成的二进制文件的大小,不需要做任何你正在经历的事情。你张贴的值是Code (20808) RO数据(2892)是常量数据的大小,RW数据(600)是你的变量和ZI数据(8400)是你的零初始化变量的大小。请检查我上面提到的,也给它一个简单的BLE SDK的例子,并检查是否同样的问题发生尝试。关于拆卸窗口,你需要启用它才能看到拆卸窗口,只需要进入“视图”,点击“拆卸窗口”即可。
由于MT_dialog
你好,
正如您所建议的,我尝试了ble_app_barebone项目。我所做的唯一更改是将默认睡眠模式设置为ARCH_EXT_SLEEP_ON。这个问题甚至在这个案例中也被观察到了。
现在,在重新启动单板以从flash启动之后,并单击start debug session选项卡之后,将显示拆卸窗口,并突出显示以下行(附带的快照)。
这是什么意思?
谢谢
你好,
此外,我已经附加的骨干项目十六进制文件,使用中卡住了。唯一的改变是将睡眠模式设置为扩展模式。
请尝试使用我共享的固件,在一个可以从我之前描述的引脚启动的板。
CLK - p0_1, cs - p0_1, di - p0_2, do - p0_3
谢谢
从keil图像,你附加的设备似乎没有停止(在反汇编窗口指示设备从内存加载一个地址),我认为,如果你按下“运行”按钮,而附加的是你可以运行代码。
您在拆卸窗口中看到的代码的部分是从睡眠中恢复后执行的指令,以便获取ARCH_RESUME_FROM_SLEEP()函数,这意味着设备不会停止,但代码继续执行,这是在哪里安装调试器时,设备将停止。因此,在我的角度来看,尽管您无法在空中看到设备,但该设备仍然运营。
因此,就我可以告诉设备正在运营,以及我们拥有的唯一线索是,当通过次级引导加载程序加载时,闪存后闪烁少数广告字符串,您无法再查看任何广告。下一步是检查设备的功耗,您可以从Pro套件中电源电源,并使用电源分布器来检查设备的功耗,这将告诉我们设备是否实际上Emmiting广告字符串和某种原因,另一侧的设备无法接收(例如,您的XTal16可能关闭,您的XTal16可能在同一频率下发送),或者由于某种原因它丢失了BLE事件并唤醒了如果没有执行广告(出于某种原因,它醒来时太晚并且堆栈取消了BLE活动),您是否正在执行任何温度测试,并且您获得该问题?您也可能想检查任何丢弃的电源。
测试了您已上传并从设备上从OTP引导中的烧焦的辅助引导加载程序从您所指示的引脚中进行的设备进行了测试,并使用无问题的FW正确启动的FW,我可以正确连接它,我想是什么you are experiencing is due to a h/w issue, and not due to the bootloader or the sw that the flash has.
最后,值得在另一个板上尝试,使用“引导特定映射”字段而不是辅助引导加载程序。
由于MT_dialog