嗨,对话框中,
我们为DA14680开发了一个定制板,每8秒经历一次BOD重置。
只有在DCDC打开时才发生BOR。
在一个BOR事件之后,CRG_TOP->BOD_STATUS_REG寄存器读取十进制值19,有时是21。这表明1V8或1V8P导轨有问题,但我找不到原因。
DA14680是aQFN-60封装。
另外,我们使用了一个稍微修改过的ble_peripheral示例和最新的SDK (SDK_1.0.14.1081)。
请在附件中找到BOR事件的跟踪。
GPIO输出的高信号如下:
1.Peak: GPIO端口在进入main()函数时设置为HIGH(端口配置为input + pull-up),之后立即设置为LOW(端口配置为input + pull-down)。
2.Peak: GPIO端口在进入vLPTimerCallback()函数时被设置为HIGH(端口配置为input + pull-up)。我猜它被设置为LOW作为BOR的一部分,因为我没有手动将它设置为低。
3.Peak:在BOR事件之后再次调用main()函数。
正如在其他论坛帖子和硬件指南中所述,正确连接DCDC接地垫是重要的,一个不良的接地连接可能是原因。另一方面,你可以看到在底部的QFN包装,所有接地垫是相互连接的。
同样的代码运行在DA14681开发工具包-基本版上没有问题。
你能给我额外的帮助吗?
设备:
嗨martinfehre,
BOD问题最可能的原因是由于不良的接地。8秒后,芯片第一次进入休眠状态,然后开始使用DCDC。因此,接地不良(BOD ref被解除)会导致POR。请注意,680 qfn60包装需要坚实的接地垫。强烈建议在接地垫上加9个孔到接地层,一个孔靠近DCDC接地针。这个引脚是VBAT1, VBUS, VBAT2之间的接地。
谢谢,PM_Dialog
嗨PM_Dialog,
请看附件中的PDF文件。它是我们顶层gerber文件的一个部分。
接地垫上有16个孔,其中一个孔靠近DCDC接地短节。你有什么推荐吗?
你能确认一下GND pads是连接在芯片上的吗?
嗨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
Dcdc -> dcdc_v14_0_reg &= ~(reg_msk (Dcdc, dcdc_v14_0_reg, dcdc_v14_cur_lim_min) |
REG_MSK (DCDC DCDC_V14_0_REG DCDC_V14_FAST_RAMPING));
Dcdc -> dcdc_v18_0_reg &= ~(reg_msk (Dcdc, dcdc_v18_0_reg, dcdc_v18_cur_lim_min) |
REG_MSK (DCDC DCDC_V18_0_REG DCDC_V18_FAST_RAMPING));
Dcdc -> dcdc_v18p_0_reg &= ~(reg_msk (Dcdc, dcdc_v18p_0_reg, dcdc_v18p_cur_lim_min) |
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_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_fast_ramp);
Dcdc -> dcdc_v18_0_reg &= ~ reg_msk (Dcdc, dcdc_v18_0_reg, dcdc_v18_fast_ramp);
Dcdc -> dcdc_v18p_0_reg &= ~ reg_msk (Dcdc, dcdc_v18p_0_reg, dcdc_v18p_fast_ramp);
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问题。