DA14681的程序意外停止

13个帖子/ 0个新
最后发表
auzzz
离线
最后看到:5个月1天前
加入:2016-06-20十43
DA14681的程序意外停止

嗨,对话框中,
我们开发了一个基于BASIC DevKit的最小DA14681系统开发板。
我们在BASIC Dev kit上正确运行的代码,它只是简单地定期打印“hello world”到COM端口。
但当我把图片下载到自己设计的电路板上时,代码只运行了很短的时间,10秒后,程序就停止了。我们制作了5个开发板,都出现了相同的错误。

开发环境:
1.SmartSnippets工作室v1.2.3.588
2.SDK DA1468x_SDK_BTLE_v_1.0.6.968
3.外部flash Winbond W25Q16DWSSIG QSPI 16Mbit
4.演示项目:pxp_reporter

我的问题是什么可能导致这个问题?谢谢

设备:
MT_dialog
离线
最后看到:4个月5天前
工作人员
加入:2015-06-08 34
嗨auzzz,

嗨auzzz,

问题的描述是相当通用的,我不能看到的问题是由提供的信息,你将不得不附加调试器,以检查代码已经停止,这可以给我们一个线索发生了什么与您的自定义hw。

由于MT_dialog

auzzz
离线
最后看到:5个月1天前
加入:2016-06-20十43
嗨MT_dialog,

嗨MT_dialog,
我们发现问题是由串口引起的。DA14681 Devkit USART1 Tx的默认电压电平是低电平。我们使用的USB to TTL芯片是CH340,它默认的Tx是高电平。
不同的电压等级可能导致系统崩溃,通过分离调试器的Tx,系统可以正常工作。
我的问题是为什么DA14681的Rx会导致坠机?我们是否必须找到与DA14681相同的默认电压水平的调试器?

auzzz
离线
最后看到:5个月1天前
加入:2016-06-20十43
我们用硬币电池作主电池

我们使用硬币电池作为主电源,调试器给出3.3v的电压水平。不同的参考电压可能导致问题。

kingwheat
离线
最后看到:1年1个月前
加入:2016-12-08 09:21
你好,

你好,
看来我们遇到了同样的问题,我们也设计了自己的板子,我下载了SDK 1.0.6的pxp reporter。大约8秒后,它复位,然后在接下来的8秒中再次复位,如此反复……

MT_dialog
离线
最后看到:4个月5天前
工作人员
加入:2015-06-08 34
嗨auzzz kingwheat,

嗨auzzz kingwheat,

我不认为UART与你的经历有什么关系,我相信是别的什么东西不对,你所提到的只是另一个问题引起的副作用。一些信息,你使用的包装,什么是你的焊接概况,什么是你的模具厚度在你的定制hw ?

由于MT_dialog

kingwheat
离线
最后看到:1年1个月前
加入:2016-12-08 09:21
嗨MT_dialog

嗨MT_dialog
我认为我的板有问题,当我使用演示项目pxp记者,我没有做任何改变,它在开发工具包中工作良好。当我下载到我自己的板,并使用+Vbat和-Vbat供应,它重置一次又一次每8秒。但是当我给Vbus提供5V或者只是保持系统的电源在pm_mode_active时,它工作得很好。

SDK: DA1468x_SDK_BTLE_v_1.0.6.968
SmartSnippets Studio版本:1.2.3.588
测试项目:DA1468x_SDK_BTLE_v_1.0.6.968 \ DA1468x_SDK_BTLE_v_1.0.6.968 \ \ dk_apps \ demo \ pxp_reporter项目

auzzz
离线
最后看到:5个月1天前
加入:2016-06-20十43
嗨Kingwheat,

嗨Kingwheat,
您是否使用UART进行调试?

嗨MT_dialog,
我们使用AQFN封装,遵循开发套件电路图。只有CR2032为电源时,该问题才能在DA14681-01A9DEVKT-B上重现。

kingwheat
离线
最后看到:1年1个月前
加入:2016-12-08 09:21
嗨auzzz,

嗨auzzz,
我使用UART进行调试,并且只在任务中打印tf。如果printf在中断的回调中,我认为可能会引起一些问题。

auzzz
离线
最后看到:5个月1天前
加入:2016-06-20十43
试着在调试器中分离Tx

试着在调试器中分离Tx并检查重置是否消失。

MT_dialog
离线
最后看到:4个月5天前
工作人员
加入:2015-06-08 34
嗨kingwheat auzzz,

嗨kingwheat auzzz,

据我所知,你所经历的与焊接接地在您的定制PCB的。因为在8到10秒后,两个板子都在停转,这很可能是因为BOD启动并在DCDC激活后立即重置您的板子。8秒后系统LDO DCDC供应的变化,当系统运行在LDO的BOD重置的唯一原因就是通过一个实际的电压降,当系统运行在DCDC BOD事件可能触发尤其是DCDC接地针或中央接地垫焊接问题。为了检查这一点,你可以通过#define dg_configUSE_BOD(0)禁用BOD,这将禁用重置(问题仍然存在,只是为了测试这是否是实际问题)。此外,您可以尝试按下PCB上的SoC或重新加热焊锡,以防止这改进了您正在经历的,也将验证您有焊接问题。

此外,为了检查这确实是您的问题,您可以执行以下操作来检查BOD_VREF。这应该准确到515mV,在任何情况下方差都小于50mV。

因此,在开始任何新任务将BOD_VREF导出到P1_7之前,在system_init()中添加以下代码

//导出BOF_REF到P1_7
Reg_setf (gpio, test_ctrl5_reg, test_bod_vref_out, 1);//将BOD引用缓冲区输出映射到testbus
Reg_setf (anamisc, ana_test_reg, acore_testbus_en, 1);//在ACORE中启用analog-testbus
REG_SETF(GPIO, TEST_CTRL2_REG, ANA_TESTMUX_CTRL, 0x3);//在PADs中选择analog-testbus
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_7, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_ADC);// P1.7 ADC/open mode

保持禁用BOD,这样就不会在custom_config_qspi.h文件中添加#define db_configUSE_BOD(0)并禁用睡眠模式。

为了在示波器上看到这一点,你必须隔离电源,以避免噪音,运行笔记本电脑的电池,以隔离它从设备,可以注入噪音通过地面,所以要非常小心。

关于您可以在一个基本工具包上复制它的事实,我不能在我的设置上看到类似这样的东西,我下载了运行和使用UART与接近报告程序和多链接演示运行在cr2032电池上的1.0.6 SDK。

由于MT_dialog

kingwheat
离线
最后看到:1年1个月前
加入:2016-12-08 09:21
嗨,MT_dialog

嗨,MT_dialog
非常感谢你回答我们的问题。
在测试之前,项目的配置是#define dg_configUSE_BOD(1),并打开睡眠模式,它将重置
我有个测试
首先,#define dg_configUSE_BOD(0),关闭休眠模式,运行良好。
其次,#define dg_configUSE_BOD(0),并打开睡眠模式,它将复位。
正如所示,我发现重置更多的是与电源模式管理有关。

当我使用硬件IIC时,我还遇到了另一个问题。
我这样操作IIC写函数:ad_i2c_write();读取:ad_i2c_transact(dev, ®_addr, 1, reg_data, cnt);
如果我关闭ble堆栈,它工作得很好。否则,某些事件可能会干扰IIC接口。
我很困惑,因为我使用硬件iic,在我操作读或写函数后,我可以让我的cpu做另一件事,在那完成操作后,他们会给我回调…在这种情况下,这一事件对硬件有何影响?有时iic会错过回调,让我的任务留在Block..

MT_dialog
离线
最后看到:4个月5天前
工作人员
加入:2015-06-08 34
嗨kingwheat,

嗨kingwheat,

请如果你发现之前的回答有帮助,标记为接受的答案,也请不要回应一个与线程的主题无关的附加问题的答案,如果你想问一个新的问题,你总是可以创建一个新的线程。

关于你的问题,我不确定我是否理解对了,我所理解的是你正在错过打断。通常BLE中断比其他中断具有更高的优先级,但这并不意味着您将错过I2C中断。可能发生的是,你的I2C中断与ble临界区同时发生,当ble要休眠时,它有一个临界区,它禁用了大约600us的中断,也许这就是你的程序停止的地方。

关于操作完成时所引用的回调,你提到你是使用同步函数ad_i2c_transact()和ad_i2c_write()而不是相对应的异步函数ad_i2c_async_transact()这样的函数作为参数的回调,不会等待操作完成和相应的操作结束时将调用回调。

Thansk MT_dialog