我有4个电路板,在SPI闪光启动后不久被看门狗定时器重置。
这些板使用Pan1740模块。
通过在整个代码中添加GPIO切换,我确定软件永远不会从rwip_init调用中返回。
我在之前的一篇文章中看到有人因为硬件(接地)问题而遇到了这个问题。由于我们使用的是PAN1740,这有点不太可能,但仍然是可能的。这是复杂的事实,这个设计已经在之前的董事会运行,但这个lot是由一个新的供应商(对我们来说是新的,他们是一个成熟的,好的制造商)。
您能建议如何继续排除这些问题吗?我很乐意通过电子邮件提供源代码、原理图等。
谢谢,
凯文
设备:
嗨Hughesk,
如果您尝试在没有睡眠模式的情况下运行,设备是否可运行,或何时取消定义看门狗?还可以尝试在开发套件上运行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()对应的ROM地址中,无论您使用哪个SDK(您都可以在硬符中查看PC或NMI,并将地址与地图文件匹配)?
谢谢mt_dialog.
硬故障处理程序:看起来像smpc。Obj在0x20004002298(链接在0x200002280-
这只会发生在我的板子上,当DA14580是用吹风机手暖的时候;如果冷静下来,问题就解决了。引脚复位或上电复位都不能可靠地恢复,尽管上电复位有时会恢复。我将重新访问SDK5的后期版本。
atts_task.obj(.text)
.text 0x20002280部分0 smpc.obj(.text)
.text 0x2000236C部分0 SMPC_TASK.OBJ(.text)
嗨nzbackpackers,
所以你必须让它升温以便设备有这样的行为,关于重置和设备不能正常恢复可能与引导加载程序依赖于温度这一事实有关,这是由于启动期间ADC的测量错误,但这将导致引导加载程序的单个或多个执行,而不是失败的执行,当设备无法启动时,它在引导过程中暂停或它总是由于硬件故障?
事实上,你的设备上面有一个吹风机可能会影响太多的参数,580推荐的操作条件是在85摄氏度,但温度可能会影响晶体(减少稳定时间)。请使用最新的SDK尝试一下,但你应该检查设备到达的准确温度,然后开始出现这些问题,此外,烤箱比吹风机更适合测试温度。
谢谢mt_dialog.
故障出现随机,但确保温暖(热手温度,远低于85度)而不是冷却增加了电力应用失败的频率。有时,设备永远不会到解硬盘,而且代码甚至无法踩踏,而是当然运行调试会话会影响行为。
关于你提到的Bootloader使用的ADC和温度测量,我没有看到任何关于Bootloader测试和随后采取的行动的文档。有时间吗?我看到几个可能正在测试的值:
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中的图12中的12在DA14580数据表中暗示VDCDC-VDCDC_RF连接(ADC&RF)是外部平滑电容的外部,但这些隐藏在模块内。
我正在测试最新的SDK,到目前为止,我在启动时看到了错误:
NVIC_ClearPendingIRQ
ble_rxdesccnt.getf.
我将继续测试-谢谢您对这个问题的帮助。
嗨nzbackpackers,
的ADC functionallity是ROM引导装载程序的一部分,不可用,就像我说的虽然不应影响设备的操作,因为温度的变化影响的次数,引导装载程序将执行顺序启动过程,而不是引导装载程序本身。因为设备运行和在某个点上,当代码已经启动,我不认为这是你的问题。
我不知道如果锅的内部连接模块可用,但自从崩溃是随机的,据我理解你有时失去连接与调试器也许你应该检查你的电源(应该很稳定没有涟漪)或有电路板的组装的问题,我正在和松下核实,当我对你的要求有一些反馈时我会让你知道,但是最合理的解释是PCB组装的问题。
谢谢mt_dialog.
我终于能够在SDK5上使用对话框emply_peripheral_template软件重现问题;当冷却时,它运行正常,但是当热量热(小于65度)时,代码失败。代码仅在冷却和重置后恢复。我正在使用北欧部分嗅出数据包。我会尝试捕获失败的失速点,目前看起来像一个nmi。
电力很干净,我认为没有问题;该供应是甲酸甲特特LDO,在输入和输出上清洁。
一旦运行温度不是问题,即使在相当热 - 至少65度。
对话框empty_peripheral_template软件
从我的测试温度敏感的组件是PAN1740模块,因为通过接触加热模块而没有提高周围组件的温度,我得到了故障。在使用Keil SDK5 v5.22.0.0构建的Dialog empty_peripheral_template软件上,我从位于0x200004B2的NMI_Handler中获得一个位于0xFFFFFFFE的可重复中断,它似乎起源于DA14580 ROM。调用地址指示为0x40FFFFFC。直到电源循环发生,简单的复位即使在冷却模块后也会重复故障。经过一个稍微冷却后的电源循环,故障被排除。然而在Dialog empty_peripheral_template软件中,boot_vectors中的NMI_Handler()代码。s不调用NMI_HandlerC(),因此堆栈跟踪不会被捕获到0x81850的STATUS_BASE中。Keil指示NMI_Handler称为0xFFFFFFFE,这可能意味着一个硬故障,尽管HardFault_Handler()似乎没有到达,所以HardFault_HandlerN()没有被调用,并且再次没有信息被复制到STATUS_BASE(这次是0x81800)。定义了DEVELOPMENT_DEBUG,但是堆栈信息显然没有保存在Dialog代码中(NMI all = 0)。手动预先编写的测试值不会改变。除非像之前的文章中提到的那样稍微加热,否则这段代码工作得很好,并且像预期的那样广播广告包,一旦成功启动加热,没有观察到失败。
客户的应用程序代码
在客户机的应用程序代码上,会到达HardFault_HandlerN(),但是没有真正的调试工具出现。
堆栈跟踪:
0 xfffffffe
nmi_handler位置/值0x200004b2类型void(f)
0 x00000000
development_debug定义,但堆栈信息来自上一个失败;调试模式下的后续失败不会生成任何堆栈跟踪信息。status_base在0x81850的保留RAM中为NMI和0x81800 for HardFault处理程序:
//堆栈跟踪 - 启动失败后的客户端代码
// ==============================================
// 0x81800 0x81850 <== status_base
//
// HardFault NMI寄存器地址
// ========== ========== ======== ==========
// 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做任何事情,并且还提供给SDK的例子超过测试。此外,我想你在多个设备中测试这个问题。
谢谢mt_dialog.