嗨,对话框中,
我们开发了一个基于BASIC DevKit的最小DA14681系统开发板。
我们在基本开发套件上正确运行的代码,只需定期打印“Hello World”到COM端口。
但是当我将图像下载到自己的设计板时,代码只运行短时间,10秒后,程序停止。我们建立了5个Dev板,所有这些都会显示相同的错误。
开发环境:
1.SmartSnippets Studio v1.2.3.588.
2. SDK DA1468x_sdk_btle_v_1.0.6.968
3.外部flash Winbond W25Q16DWSSIG QSPI 16Mbit
4.演示项目:PXP_Reporter
我的问题是什么可能导致这个问题?谢谢
设备:

嗨Auzzz,
probelm的描述非常通用,我看不到问题是通过提供的信息,您必须附加调试器才能检查代码停止的位置,这可能会给我们一个发生的事情你的定制hw。
由于MT_dialog
嗨mt_dialog,
我们发现问题是由串口引起的。DA14681 Devkit USART1 Tx的默认电压电平是低电平。我们使用的USB to TTL芯片是CH340,它默认的Tx是高电平。
不同的电压电平可能导致系统崩溃,通过拆下调试器的TX,系统可以正常运行。
我的问题是为什么DA14681的RX会导致崩溃?我们是否必须找到一个具有与DA14681相同的默认电压电平的调试器?
我们使用硬币电池作为主电源,调试器给出3.3v的电压水平。不同的参考电压可能导致问题。
你好,
看来我们遇到了同样的问题,我们也设计了自己的板子,我下载了SDK 1.0.6的pxp reporter。大约8秒后,它复位,然后在接下来的8秒中再次复位,如此反复……
嗨Auzzz,金麦,
我不认为UART与你的经历有什么关系,我相信是别的什么东西不对,你所提到的只是另一个问题引起的副作用。一些信息,你使用的包装,什么是你的焊接概况,什么是你的模具厚度在你的定制hw ?
由于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项目
嗨金麦,
您是否使用UART进行调试?
嗨mt_dialog,
我们使用AQFN封装,遵循开发套件电路图。只有CR2032为电源时,该问题才能在DA14681-01A9DEVKT-B上重现。
嗨auzzz,
我使用UART调试,我只在任务中打印。如果打印在中断的回调中,可能会导致我认为的一些问题。
试着在调试器中分离Tx并检查重置是否消失。
Hi 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。
因此,在开始任何新任务之前,在system_init()中添加以下代码将BoD_VREF导出为P1_7
//导出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);//选择焊盘中的模拟测试空间
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
嗨,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,REG_ADDR,1,REG_DATA,CNT);
如果我关闭BLE堆栈,它会很好。如果没有,则某些事件可能会打扰IIC接口。
我很困惑,因为我用了硬件IIC,在我操作读取或写作功能后,我可以让我的CPU在完成迁移后做另一件事,因为他们会给我一个回调......在这种情况下,如何使用漏洞事件效果硬件IIC?有时iic会错过回调,让我的任务留在块中..
嗨金麦,
如果您发现以前的响应帮助,请将答案标记为已接受,请不要回复答案与线程的主题无关的额外问题,如果您想问一个新的问题,您可以始终创建一个新的线程。
关于你的问题,我不确定我是否理解对了,我所理解的是你正在错过打断。通常BLE中断比其他中断具有更高的优先级,但这并不意味着您将错过I2C中断。可能发生的是,你的I2C中断与ble临界区同时发生,当ble要休眠时,它有一个临界区,它禁用了大约600us的中断,也许这就是你的程序停止的地方。
还要对您所指的回调何时完成操作完成,您将提及使用同步函数AD_I2C_TRANSACT()和AD_I2C_WRITE()而不是异步相应的函数AD_I2C_ASYNC_TRANACT()这些功能将回调作为参数和不会等待完成操作,并且在操作结束时将调用相应的回调。
Thansk MT_dialog