【兴威帆RTC应用经验】SD2059 RTCF莫名复位详情原因分析
深圳市兴威帆RTC SD2059作为一款官方对标8563的产品,在客户实际替换过程中虽软件不能百分百兼容,但是对于不大熟悉此款芯片应用的工程师,在调试过程中或多或少会遇到比较棘手与不得其解的问题。
本文意在通过实际案例呈现SD2059在客户复杂电源环境中频繁出现RTCF(芯片所有电源掉电指示位)置位的现象,最终证实为RTC“掉电”假象。希望通过此篇文字经验总结,帮助各工程师更能深入理解SD2059 RTCF设计初衷,避免后续出现类似问题。
案例主要问题与现象如下:客户产品为一款气体探测及报警器,在产品试产过程中,出现一半产品时间复位,万用表测电池电压却又基本是满电,符合RTC的供电要求。主要异常点可归纳为产品会随机出现时间误差大、有些刚测试良好的产品,在下一个工序就测试出时间乱、或者本身已经包装为OK品的产品,在抽检过程中又出现时间乱等的现象。但是把NG品上电后一直通电测试走时,又能稳定计时。客户工程师与产线IE经过多次试验均无法解释问题疑点,请求笔者协助,笔者将分析过程简述如下:
1、 查找客户硬件,客户原理图RTC部分与电源部分如下,从电路中可以看到主板中集成了整流桥,恒流恒压的原边反馈控制器,其输出的VCC电压直接为RTC与主控供电,又有12V与5V供电,同时备用电源使用电池利用BAT54C双路二级管隔开。询问SCL/SDA上拉电阻使用MCU内部4.7k上拉,RTC部分原理图符合兴威帆官方推荐电路的应用,并无疑点。
2、 RTCF位作为兴威帆引以为傲的掉电复位检测位,可以监测RTC的供电是否正常,一旦出现芯片断电,那内部的时间数据自然不再可靠,也是居多用户判断RTC正常工作的标志之一,其使用正常情况从未出现过差错。但在本次应用中显然出现了特例,RTCF无法准确预报RTC掉过电,理由是客户产品表现出来的各种异常现象与RTC掉电情况几乎一致,所以笔者暂时从VDD电源开始分析,试图从板子上电与下点过程中抓到引起RTCF置位的”元凶”,因笔者对此类电源设计的分析在以往异常案例中屡试不爽,暂且感性先入为主认为RTC供电电源确实有异常,需要着重分析。
3、 拆开客户产品取出PCB板,使用示波器探头挂接到VDD,果然在板子上电与下电过程中便抓取到如下异常波形。上电瞬间VDD端总会出现幅度较高的振荡杂波,电源有时会掉得很低,窃以为是电源端的波动让SD2059 芯片以为掉电了,从而主动置位RTCF,同时据客户说,在他们前期的产品中电源输出端均会添加热敏电阻、TVS管、电阻等器件尽量减小来自电源端的干扰,但在此款产品中为了达到降成本目的,此类物件直接被省略了。为了验证笔者猜想,直接手工焊接上之前方案中降低电源干扰的器件,希望问题得以解决。
4、 如前述,在解决了电源干扰的问题后继续做RTC不断上下电的实验,满以为问题即将解决时继续试验还是出现了RTCF置位的情况,此时电源端的干扰导致RTCF置位的解释就不攻自破了,从硬件方式查找问题目前已无计可施了,转而尝试软件方式看下客户代码是否有问题。使用逻辑分析仪抓取客户读取0x0F寄存器时序,因为RTCF寄存器在0xF寄存器的bit0位置(如下图)
5、 通过逻辑分析仪多次抓取时序发现如下问题,0x0F寄存器值总是在变动,有时变成0x21,有时变成0x44等随机数值,通过询问客户软件判断RTCF位置位方式,客户自述,读到0x0F的值&0x01,一旦判断为1则认为RTCF置位了,此方式是大多数软件工程师的惯常操作方式,但是多次抓取0x0F寄存器值时,偶然发现实际上读到的0x0F值不是真正的0x0F寄存器值,而是秒寄存器0x00的值,进而修改代码同时打印0x00与0x0F寄存器的值,发现二者一致。
6、 此时笔者恍然大悟,客户一直认为的RTCF位置位了,并不是真正地置位了,而是因为读到了秒寄存器值,当为奇数秒时误以为RTCF置位了就主动改写了SD2059的时间,同时再展开读取0x00秒寄存器值与0x0F寄存器值波形分析发现如下异常信号。客户在读取指定地址值时发送完器件地址、寄存器地址后,理应再发送Restart信号,但是无意间因为代码的不完善引入了一个Stop信号,放大时序图之后才真正发现导致此批产品时间总是变乱,RTCF莫名出现置位报警“元”凶,至此真相大白,再修改好时序问题后产品异常现象消失,用户得以正常生产出货。