嗨,对话框中,
我们为DA14680开发了一个定制板,并体验了BOD重置每8秒。
只有DCDC开启时才会发生BOR。
在BOR事件之后,CRG_TOP->BOD_STATUS_REG寄存器读取Decimal值19,有时是21。这表明1V8或1V8P轨道有问题,但我找不到原因。
DA14680封装在aQFN-60包中。
此外,我们使用ble_peripheral示例的一个稍微修改的版本和最新的SDK (SDK_1.0.14.1081)
请查看附件中关于BOR事件的线索。
GPIO输出的高信号如下:
1.Peak: GPIO端口在进入main()函数时设置为HIGH(端口配置为输入+下拉),然后立即设置为LOW(端口配置为输入+下拉)。
2.Peak:在进入vLPTimerCallback()函数时,GPIO端口设置为HIGH(端口配置为输入+上拉)。我猜它被设置为LOW,作为BOR的一部分,因为我没有手动设置它为LOW。
3.Peak:在BOR事件之后再次调用main()函数。
正如其他论坛帖子和硬件指南中所述,DCDC接地板的正确连接很重要,接地不良可能是原因。另一方面,你可以看到在底部的QFN包,所有地垫是相互连接的。
同样的代码在DA14681 Development Kit - Basic上运行也没有问题。
你能给我额外的帮助吗?
设备:
嗨martinfehre,
BOD问题最可能的原因是接地不良。8秒后,芯片第一次进入睡眠状态,然后开始使用DCDC。所以,当接地不好(BOD ref被提起)时,会引起POR。请注意,680 qfn60包装需要接地垫的牢固接地。强烈建议在接地垫中应用大约9个通道到接地层,一个通道靠近DCDC降压接地脚。这个引脚是VBAT1, VBUS, VBAT2之间的接地。
谢谢,PM_Dialog
嗨PM_Dialog,
请查看附件中的PDF文件。它是我们顶层gerber文件的一部分。
在接地垫中有16个通道,其中一个靠近DCDC接地根。你有什么建议吗?
能否确认GND pad在芯片上是连接在一起的?
嗨martinfehre,
根据布局,680似乎是很好的焊接到中心垫。16个通往地面的通道应该足够了。为了降低噪音,我们有专门的块接地板,所以不需要所有的接地板都连接在芯片上。强烈建议在PCB上提供一个坚实的接地。
谢谢,PM_Dialog
嗨PM_Dialog,
我仍然在寻找BOR问题,到目前为止,这个论坛的支持并没有帮助。你基本上是在重复硬件设计指南中所写的内容。
为了再次检查是否是我的PCB的布局问题,我的一个同事设计了第二个PCB -结果是一样的。
我们还实验了不同的模板厚度和垫块切割,以确保GND垫正确连接。焊接过程明显更好,但它没有解决BOR问题。
最终,我开始怀疑BOR是由于糟糕的接地。所以我开始编写源代码。经过数小时的数据读取、调试和测试,我在hw_cpm_dcdc_config(void)中找到了以下代码:
#if dg_configBLACK_ORCA_IC_REV == BLACK_ORCA_IC_REV_A . #if dg_configBLACK_ORCA_IC_REV == black_orca_ic_rev . #
= ~(reg_msk (Dcdc, dcdc_v14_0_reg, dcdc_v14_cur_lim_min)
REG_MSK (DCDC DCDC_V14_0_REG DCDC_V14_FAST_RAMPING));
= ~(reg_msk (Dcdc, dcdc_v18_0_reg, dcdc_v18_cur_lim_min)
REG_MSK (DCDC DCDC_V18_0_REG DCDC_V18_FAST_RAMPING));
= ~(reg_msk (Dcdc, dcdc_v18p_0_reg, dcdc_v18p_cur_lim_min)
REG_MSK (DCDC DCDC_V18P_0_REG DCDC_V18P_FAST_RAMPING));
= ~(reg_msk (Dcdc, dcdc_vdd_0_reg, dcdc_vdd_cur_lim_min)
REG_MSK (DCDC DCDC_VDD_0_REG DCDC_VDD_FAST_RAMPING));
其他#
Dcdc -> dcdc_v14_0_reg &= ~ reg_msk (Dcdc, dcdc_v14_0_reg, dcdc_v14_ramping);
Dcdc -> dcdc_v18_0_reg &= ~ reg_msk (Dcdc, dcdc_v18_0_reg, dcdc_v18_ramping);
Dcdc -> dcdc_v18p_0_reg &= ~ reg_msk (Dcdc, dcdc_v18p_0_reg, dcdc_v18p_fast_ramping);
Dcdc -> dcdc_vdd_0_reg &= ~ reg_msk (Dcdc, dcdc_vdd_0_reg, dcdc_vdd_fast_ramping);
reg = DCDC - > DCDC_CTRL_2_REG;
REG_SET_FIELD(DCDC, DCDC_CTRL_2_REG, DCDC_LSSUP_TRIM, reg, 0);
REG_SET_FIELD(DCDC, DCDC_CTRL_2_REG, DCDC_HSGND_TRIM, reg, 0);
DCDC - > DCDC_CTRL_2_REG =注册;
# endif
如果我编译了用#else编写的代码,并将固件写入DA14680,那么BOR就不再发生了。
所以我仔细看了看,把整条线缩小到4行:
reg = DCDC - > DCDC_CTRL_2_REG;
REG_SET_FIELD(DCDC, DCDC_CTRL_2_REG, DCDC_LSSUP_TRIM, reg, 0);
REG_SET_FIELD(DCDC, DCDC_CTRL_2_REG, DCDC_HSGND_TRIM, reg, 0);
DCDC - > DCDC_CTRL_2_REG =注册;
这4行代码阻止了微控制器重新启动。这些注册表设置应该做什么?
嗨martinfehre,
你发布的代码与BOD问题无关正如我在之前的帖子中提到的,BOD问题的原因是接地不良,所以这是你们定制PCB上的问题。您是否尝试改善PCB上的坏接地?
谢谢,PM_Dialog
我也有同样的问题。
我们现在已经做了两个板,8秒后仍然得到BOR。
嗨point85,
你能检查一下你们定制板的接地情况吗?正如我在之前的文章中提到的,BOD问题最可能的原因是接地不良。
谢谢,PM_Dialog
是的,我在第一块板之后看到了,所以我们做了第二块板。仍然有同样的问题。
我刚刚发现所用的470nH感应器不符合规格。这可能会导致同样的问题吗?
嗨point85,
在切换到4层设计后,我们摆脱了BOR。地面层现在比顶部层低0.15毫米。之前是1.5毫米。
谢谢Martinfehre。虽然不太确定这会对设计产生什么影响。
谢谢Martinfehre。虽然不太确定这会对设计产生什么影响。
我已经在两个主板上尝试了新的感应器,仍然有同样的问题。我真的坚持了下来。
嗨point85,
答案由martinfehre给出。4层板解决了我的BOR问题。