我有4个电路板,在SPI闪光启动后不久被看门狗定时器重置。
这些板使用Pan1740模块。
通过在整个代码中添加GPIO切换,我确定了软件永远不会从对RWIP_INIT呼叫返回。
I saw on a previous post that someone else had this problem due to a hardware (grounding) issue. Since we're using the PAN1740, this is a little less likely, but still possible. This is complicated by the fact that this design has worked on prior board runs, but this lot was built by a new vendor (new to us, they're an established, good manufacturer).
您能推荐如何继续排除这些问题吗?我很乐意通过电子邮件提供源代码,原理图等。
Thanks,
凯文
设备:
嗨Hughesk,
如果您尝试在没有睡眠模式的情况下运行,那么设备是否可操作或删除看门狗?另外尝试在DEV套件上运行FW,并检查设备是否在该板上运行,或者尝试在您提到的电路板上的最新SDK上运行任何示例。您还可以通过检查代码丢失和看门狗的位置,检查(肯定)通过检查nmi_handler()来检查代码停止。
谢谢mt_dialog.
我也在看这个问题,我看到可能受到一些微妙硬件时机的影响。
禁用睡眠不会改变行为,也不使用SDK 5.0.4。SPS配置文件示例DA1458x_DSPS_V_5.150.2只有TX&RX端口引脚更改呈现相同的行为,有时硬故障有时可以。
由于CFG_HOST和因此BLE_HOST_PRESENT都定义,因此RWIP_INIT()不可用用于踩到RWIP_INIT()调用RWIP_INIT(),而不是源代码中的版本。尝试跟踪ROM代码的异常捕获并不是真正可能的,除非堆栈源可用。
嗨nzbackpackers.
无论您使用哪个SDK版本,设备都会在硬脱机或NMI(看门狗)中摊位?如果设备正确执行代码或不与任何特定事件无关?您看到从中断的PC最终在RWIP_INIT()对应的RWIP_INIT()上的ROM地址中,无论您使用哪个SDK(您可以在硬盘跳闸或NMI中检查PC并将地址与地图文件匹配)?
谢谢mt_dialog.
hardfault处理程序:看起来像smpc.obj 0x20002298(链接在0x200002280-
这只发生在DA14580使用吹磨机的DA14580手动温暖时的电路板上;如果较冷,问题会消失。销重置或断电复位两者都不会可靠地恢复,但有时断电复位会恢复。我将重新访问稍后的SDK5版本。
.text 0x20002194第0个atts_task.obj(.text)
.text 0x20002280部分0 smpc.obj(.text)
.text 0x2000236C部分0 SMPC_TASK.OBJ(.text)
嗨nzbackpackers,
所以你必须温暖为了设备to have such behaviour, regarding the reset and that the device doesn't recover properly is probably related to the fact that the bootloader is temperature depended due to a faulty measurement of the ADC during booting, but that will result either to single or multiple execution of the bootloader and not fail of execution, when the device fails to start, it stalls during booting or it always stalls due to the Hardfault ?
The fact that you have a hair dryer above the device can affect too many parameters, the 580 recommended operating conditions is at 85 degrees Celcius, but the temperature could affect the crystal (decrease the stabilizing time). Please give it a shot with the latest SDK, but you should check the exact temperature that device reaches and you start having those problems, also an oven would be a more proper temperature test than a hair dryer.
谢谢mt_dialog.
故障出现随机,但确保温暖(热手温度,远低于85度)而不是冷却增加了电力应用失败的频率。有时,设备永远不会到达硬盘,并且甚至无法逐步踩到代码,而是运行调试会话会影响行为。
关于ADC和温度测量,您提到了引导加载程序使用,我没有看到引导加载程序测试和随后采取的操作的任何文档。那可用吗?我看到可能正在测试的几个值:
DA14580 ADC
单一结束模式
=================.
0000-0011 = P0 [0] .. PO [3]
0100 = AVS.
0101 = vdd_ref.
0110 = VDD_RTT.
0111 = vbat3v.
1000 = VDCDC.
1001 = vbat1v.
(其他人保留)
差分模式
=================.
0000 = P0 [0] VS P0 [1]
else = p0 [2] vs p0 [3]
我在Pan1740 DA14580模块中找不到电源连接细节;你知道他们是否有空吗?我没有提供细节的松下数据表。图9和图12,在对话框DA14580数据表中暗示VDCDC-VDCDC_RF连接(ADC&RF)是外部平滑电容的外部,但这些隐藏在模块内。
我正在使用最新的SDK测试,到目前为止,我在此处看到启动的错误:
nvic_clearpendingirq.
ble_rxdesccnt.getf.
我会继续测试 - 感谢您对此问题的帮助。
嗨nzbackpackers,
ADC功能属性是ROM引导程序的一部分,并且不可用,因为我说不应该影响设备的操作,因为温度的变化会影响引导加载程序将执行顺序引导过程的次数而不是引导加载程序本身。由于设备在某些时候运行和摊位,当代码已启动时,我不认为这是您的问题。
我不知道是否有PAN模块中的内部连接,但由于崩溃是随机的,并且据我所知,你有时会与调试器失去连接,也许你应该检查你的电源(应该没有涟漪是否相当稳定)或者在PCB的组装中存在一些问题,我正在使用Panasonic检查,当我有一些关于您的请求的反馈时,我会告诉您,但是最逻辑的解释是PCB组件的问题。
谢谢mt_dialog.
我终于能够在SDK5上使用对话框extent_peripheral_template软件重现问题;当冷却时,它运行正常,但是当热量热(小于65度)时,代码失败。代码仅在冷却和重置后恢复。我正在使用北欧部分嗅出数据包。我会尝试捕捉失败的失败点,目前看起来像NMI。
电力很干净,我认为没有问题;供应是一种甲酸甲酸甲板,在输入和输出上清洁。
一旦运行温度不是问题,即使在相当热的时候 - 至少65度。
对话框extent_peripheral._template software
从我的测试,温度敏感元件是PAN1740模块,因为通过接触加热模块而不提高周围部件的温度,我得到了故障。在对话框中,使用Keil SDK5 v5.22.0.0构建的Office_peripheral_template软件,我从0x200004b2的nmi_handler获得一个可重复的断裂,似乎源于DA14580 ROM。调用地址表示为0x40FFFFC。在发生电源周期之前,即使在冷却模块后,即使在冷却模块后,简单地发出重置会重复故障。在冷却后的电源循环后,稍微删除故障。但是在Office_Peripheral_Template软件对话框中,Boot_Vectors中的NMI_Handler()代码不会调用NMI_Handlerc(),因此在0x81850时不会捕获堆栈跟踪。keil表示名为0xfffffffe的nmi_handler,暗示可能是一个硬故障,尽管何未触及hardfault_handler(),但尚未调用solutfault_handlern(),并且再次不会调用到status_base中(此时间为0x81800)。development_debug定义,但在对话框代码上没有显然保存堆栈信息(nmi all = 0)。手动预先写入的测试值不会改变。除非在早期帖子中注明的稍微加热,否则此代码正常工作并按预期广告广告数据包,在加热一次成功启动时没有观察到的故障。
Client's Application code
在客户端的应用程序代码上,达到HardFault_Handlern(),但没有真正的调试设施看起来功能。
调用堆栈跟踪:
0xfffffffe.
nmi_handler位置/值0x200004b2类型void(f)
0x00000000.
development_debug定义,但堆栈信息来自上一个失败;Debug模式下的后续失败不会生成任何堆栈跟踪信息。status_base在0x81850的保留RAM中为NMI和0x81800 for HardFault处理程序:
//堆栈跟踪 - 启动失败后的客户端代码
// ==============================================.
// 0x81800 0x81850 <== status_base
//
//HardFault NMI Register Address
// ========== ========== ======== ==========
// 0x00000000 0x00000013 R0
// 0x00000000 0x00000000 R0
// 0x00000000 0x00000000 R1
// 0x00000000 0x00000000 R2
// 0x00000000 0x00000000 R3
// 0x00000000 0x00010100 R12
//0x00000000.0x00000000.LR
// 0x00000000 0x01000000 PC
// 0x00000000 0x00000000 PSR
//
// 0x00000000 0x00000000 CFSR 0xe000ed28
// 0x00000000 0x00000000 hfsr 0xe000ed2c
//0x00000000.0x00000000.DFSR 0xE000ED30
// 0x00000000 0x00000000 AFSR 0xe000ed3c
// 0x00000000 0x00000000 mmar 0xe000ed34
// 0x00000000 0x00000000 bfar 0xe000ed38
嗨nzbackpackers,
由于它在低于85的温度下,设备是非功能,因此您确定模块的电源没有问题,则PCB的组装是应检查的东西(升温设备时出现问题可能由于焊接不足而发生)。只要没有看门狗经过,虽然模板具有定义的看门狗,但是,只要没有看门狗,就不应该发生nmi_handler(),尽管没有看门狗,但是没有看守的看门狗。我不认为你在遇到的情况下,只要我能够告诉你所拥有的错误,你没有任何一致性,并且还提供给SDK的示例超过了测试。此外,我想你在多个设备中测试这个问题。
谢谢mt_dialog.