我有4块板,在SPI闪存启动后不久,看门狗定时器将其重置。
这些板使用PAN1740模块。
通过在整个代码中添加GPIO切换,我确定软件永远不会从调用rwip_init返回。
我在之前的一篇文章中看到,由于硬件(接地)问题,其他人也有这个问题。由于我们使用的是PAN1740,这种情况不太可能发生,但仍然是可能的。这是复杂的事实,这个设计已经在以前的板运行,但这批是由一个新的供应商(对我们来说是新的,他们是一个建立的,好的制造商)。
您能建议如何继续排除这些问题吗?我很乐意通过电子邮件提供源代码,原理图等。
谢谢,
凯文
设备:

嗨,休斯克,
如果您尝试在没有睡眠模式的情况下运行,设备是运行的还是未定义看门狗?也试着在一个开发工具包上运行fw,检查设备是否在那个板上运行,或者试着在你提到的板上运行最新SDK上的任何例子。您还可以通过检查NMI_Handler()来检查(确定)代码停顿的位置,通过检查代码停顿和看门狗出现的确切位置。
谢谢你的对话
我也在关注这个问题,我发现行为的变化可能受到一些微妙的硬件时间的影响。
禁用睡眠不会改变行为,使用SDK 5.0.4也不会改变行为。SPS配置文件示例DA1458x_DSP_v_5.150.2(仅更改了Tx和Rx端口引脚)表现出相同的行为,有时为硬故障,有时为正常。
由于CFG_HOST和BLE_HOST_PRESENT都已定义,因此rwip_init()不可单步执行,因为调用的是ROM堆栈中的rwip_init(),而不是源代码中的版本。除非堆栈源可用,否则尝试跟踪ROM代码的异常捕获实际上是不可能的。
嗨,背包客
无论您使用哪个SDK版本,设备都会在硬故障或NMI(看门狗)中暂停?设备是否正确执行代码与任何特定事件无关?您可以看到,无论您使用的是哪一个SDK,中断后的PC都会出现在与rwip_init()相对应的ROM地址中(您可以在Hardfault或NMI中检查PC,并将地址与映射文件匹配)?
谢谢你的对话
硬故障处理程序:看起来像smpc。Obj在0x20002298(链接在0x200002280-
这只有在DA14580用吹风机暖手时才会发生;如果凉爽一点,问题就会消失。管脚复位或断电复位都不能可靠地恢复,尽管有时断电复位可以恢复。我将重新访问后续的SDK5版本。
.text 0x20002194 Section 0 atts_task.obj(.text).text 0x200002280第0节smpc.obj(.text)
.text 0x2000036C第0节smpc_任务.obj(.text)
嗨nzbackpackers,
所以你必须预热它以便设备有这样的行为,关于复位和设备不能正确地恢复可能与事实有关,引导加载程序是温度依赖于一个错误的测量ADC在引导期间,但是这会导致单个或多个引导加载程序的执行而不是执行失败,当设备启动失败时,它在引导期间停止或它总是由于Hardfault而停止?
事实上,在设备上方有一个吹风机会影响太多的参数,580的建议操作条件是在85摄氏度,但温度会影响晶体(减少稳定时间)。请给它与最新的SDK,但你应该检查设备达到的确切温度,你开始有这些问题,烤箱将是一个更合适的温度测试比电吹风。
谢谢你的对话
故障看起来是随机的,但确保温暖(热手温度,远低于85度)而不是冷却会增加通电故障的频率。有时,设备永远不会出现硬故障,甚至无法对代码进行步进,但运行调试会话当然会影响行为。
关于你提到的Bootloader使用的ADC和温度测量,我没有看到任何关于Bootloader测试和后续操作的文档。有空位吗?我看到了几个可能被测试的价值:
DA14580模数转换器单端模式
=================
0000-0011=P0[0]…PO[3]
0100 =住客
0101 = VDD_REF
0110 = VDD_RTT
0111 = VBAT3V
1000 = VDCDC
1001 = VBAT1V
(其他保留)
差模
=================
0000=P0[0]与P0[1]
else=P0[2]与P0[3]
我也找不到PAN1740 DA14580模块内的电源连接详细信息;你知道他们是否有空吗?我的松下数据表没有给出详细信息。对话框DA14580数据表中的图9和图12表示VDCDC-VDCDC_RF连接(ADC和RF)是外部的,带有外部平滑电容器,但这些都隐藏在模块内。
我正在用最新的SDK进行测试,到目前为止,我在启动时看到了错误:
NVIC_ClearPendingIRQble_rxdesccnt.getf
我将继续测试-感谢这个问题的帮助。
嗨nzbackpackers,
的ADC functionallity是ROM引导装载程序的一部分,不可用,就像我说的虽然不应影响设备的操作,因为温度的变化影响的次数,引导装载程序将执行顺序启动过程,而不是引导装载程序本身。自从设备运行和停滞在一些点,当代码已经启动,我不认为这是你的问题。
我不知道如果锅的内部连接模块可用,但自从崩溃是随机的,据我理解你有时失去连接与调试器也许你应该检查你的电源(应该很稳定没有涟漪)或有电路板的组装的问题,我正在检查松下,我会让你知道,当我有一些反馈关于你的要求,但最合理的解释这是一个问题的PCB组装。
谢谢你的对话
我终于能够使用SDK5上的对话框empty_peripheral_模板软件重现问题;当冷却时运行良好,但当加热到手热(低于65度)时,代码失败。代码仅在冷却和重置后恢复。我正在用北欧的部分嗅包。我将尝试捕捉故障时的失速点,目前看起来像一个nmi。
电力是干净的,我看不出有任何问题;电源是一个独立的LDO,输入和输出都是干净的。
一旦运行温度不是一个问题,即使非常热-至少65度。
对话框empty_peripheral_template软件
从我的测试来看,温度敏感组件是PAN1740模块,因为通过接触加热模块而不提高周围组件的温度,我得到了故障。在使用Keil SDK5 v5.22.0.0构建的Dialog empty_peripheral_template软件上,我从NMI_Handler在0x200004B2处得到一个可重复的中断,它似乎起源于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 xfffffffeNMI_处理程序位置/值0x200004B2类型无效(f)
0 x00000000
定义了DEVELOPMENT_DEBUG,但堆栈信息来自上一次失败;调试模式下的后续失败不会生成任何堆栈跟踪信息。对于NMI,状态_BASE位于0x81850的保留RAM中;对于硬故障处理程序,状态_BASE位于0x81800的保留RAM中:
//堆栈跟踪-启动失败后的客户端代码// ==============================================
//0x81800 0x81850<==基本状态
//
// 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个人计算机
//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的示例已经过测试。我还假设您正在多个设备中测试这个问题。
谢谢你的对话