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

嗨Auzzz,
probelm的描述非常通用,我看不到问题是通过提供的信息,您必须附加调试器才能检查代码停止的位置,这可能会给我们一个发生的事情你的定制hw。
谢谢你的对话
嗨mt_dialog,
我们发现这个问题是由串口引起的。DA14681 Devkit USART1 Tx的默认电压电平为低电平。我们使用的USB到TTL芯片是CH340,它的默认Tx是高电平。
不同的电压电平可能导致系统崩溃,通过拆下调试器的TX,系统可以正常运行。
我的问题是为什么DA14681的RX会导致崩溃?我们是否必须找到一个具有与DA14681相同的默认电压电平的调试器?
我们使用硬币电池作为主电源,而调试器提供了3.3v的电压水平。不同的参考电压可能会导致故障。
你好,
似乎我们也遇到了同样的问题,我们也设计了自己的主板,我下载了SDK 1.0.6的pxp reporter,大约8秒钟后,它就复位了,然后在接下来的8秒钟里又一次又一次的复位。。。
嗨Auzzz,金麦,
我不认为UART与你所经历的事情有关,我相信其他事情是错误的,你所提到的只是另一个问题引起的副作用。一些信息,你使用的是哪种封装,你的焊接轮廓是什么,你的定制硬件上的模板厚度是多少?
谢谢你的对话
嗨mt_dialog.
当我使用演示项目pxp reporter时,我认为我的板有问题,我没有对它做任何更改,它在开发工具包中运行良好。当我下载到自己的板上,并使用+Vbat和-Vbat作为电源时,它会每8秒一次地复位。但是当我给Vbus提供5V电压或者仅仅保持系统电源在pmu模式时,它工作得很好。
SDK:da1468x_sdk_btle_v_1.0.6.968
SmartSnippets Studio版本:1.2.3.588
测试项目:DA1468x\u SDK\u BTLE\u v\u 1.0.6.968\DA1468x\u SDK\u BTLE\u v\u 1.0.6.968\projects\dk\u apps\demos\pxp\u reporter
嗨金麦,
你用UART调试了吗?
嗨mt_dialog,
我们使用AQFN包,遵循dev-kit电路图。仅当CR2032为电源时,此问题才能在DA14681-01A9DEVKT-B上重现。
嗨,奥兹,
我使用UART调试,我只在任务中打印。如果打印在中断的回调中,可能会导致我认为的一些问题。
尝试在调试器中分离Tx并检查重置是否消失。
Hi Kingwheat,Auzzz,
据我所知,你的费用与你的定制印刷电路板的接地焊接有关。因为在8到10秒之后,两块板都会失速,这很可能是因为一旦DCDC激活,BOD就会启动并重置板。8秒后,系统从LDO变为DCDC电源,当系统在LDO上运行时,获得BOD复位的唯一原因是实际电压降,当系统在DCDC上运行时,可能会触发BOD事件,特别是当DCDC GND引脚或中央GND焊盘存在焊接问题时。为了检查这一点,您可以通过#define dg_configUSE_BOD(0)禁用BOD,这将禁用重置(问题仍然存在,只是为了测试这是否是实际问题)。此外,您可以尝试按下PCB上的SoC或重新加热焊料,以防这改善了您的体验,也将验证您有焊接问题。
另外要检查这是您的问题,您可以执行以下操作以检查BOD_VREF。在任何情况下,这应该准确到515mV,方差小于50mV。
因此,在开始任何新任务之前,在system_init()中添加以下代码将BoD_VREF导出为P1_7
//将BOF\ U REF导出到P1\ U 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中启用模拟测试总线
REG_SETF(GPIO,TEST_CTRL2_REG,ANA_TESTMUX_CTRL,0x3);//选择焊盘中的模拟测试空间
hw_gpio_set_pin_函数(hw_gpio_PORT_1,hw_gpio_pin_7,hw_gpio_MODE_输出,hw_gpio_FUNC_ADC);//设置为P1.7至ADC/打开模式
保持BOD处于禁用状态,这样它就不会通过在custom_config_qspi.h文件中添加#define db_configUSE_BOD(0)来启动,并禁用睡眠模式。
为了在示波器上看到这一点,您将不得不隔离电源以避免噪音,并在电池上运行笔记本电脑以将其与可通过地注入噪声的设备隔离,因此非常小心。
关于您可以在基本工具包上复制它的事实,我无法在我的设置中看到类似的内容,我下载了run并使用了UART和approximation reporter,以及运行在cr2032电池和1.0.6sdk上的multilink演示。
谢谢你的对话
嗨,MT\u dialog
非常感谢您回答我们的问题。
在测试之前,项目的配置是#define dg_configuse_bod(1),然后打开睡眠模式,它将重置
我有这个测试,
首先,定义dg#u configUSE#u 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\u对话框