打印
[资料分享]

实时时钟DS3231读取信息出错的分析

[复制链接]
1053|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FCCdsp|  楼主 | 2018-9-28 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 FCCdsp 于 2018-9-28 16:33 编辑

实时时钟DS3231读取信息出错的分析


实时时钟芯片DS3231

   Maxim Integrated新型实时时钟(RTC) DS3231,内部集成了TCXO、RTC和32.768kHz晶体,并采用低成本、标准型、16引脚SOIC封装。在-40°C至+85°C温度范围内,计时精度为±2分钟/年。这一出色性能使DS3231成为当前要求高计时精度应用的最佳解决方案。而RTC的其它集成功能也扩展了系统应用领域,适合那些对计时精度要求极高的应用。应用包括:服务器、电表、安防及门禁控制系统、车队管理、远程信息处理系统、GPS导航装 置、POS终端以及ATM。

除计时精度高之外,DS3231还具有一些其它功能, 这些功能扩展了系统主机的附加功能和选择范围。该器件内部集成了一个非常精确的数字温度传感器,可通过I2C* 接口对其进行访问(如同时间一样)。这个温度传感器的精度为±3°C。片上控制电路可实现自动电源检测,并管理主电源和备用电源(即低压电池)之间的电源 切换。如果主电源掉电,该器件仍可继续提供精确的计时和温度,性能不受影响。当主电源重新加电或电压值返回到容许范围内时,片上复位功能可用来重新启动系 统微处理器。


DS3231 RTC主要指标

Device Name Extremely Accurate Real-TIme Clock_TCXO_Crystal

Package Size 16-Pin, 300 mil SOIC

OperaTIng Voltage (V) 2.3 to 5.5

TImekeeping Accuracy (over temp)± 3ppm (-40 degrees Celsius to +85 degrees Celsius)

± 1ppm (0 to +40 degrees Celsius)

Current ConsumpTIon (µA)1.5 (typ); 4.0 (max)

在单片机系统设计中 ,对系统的抗干扰设计、信号完整性设计、时序设计大都能引起关注;但对由于备用电池与系统电源上电或电源切换导致个别芯片的时序不稳定 ,引起不能正常工作或启动的问题 ,很多设计者还是认识不清。下面通过对实时时钟 DS3231 在使用中出现上电读异常的实例分析 ,说明由于系统电源上电或电源切换带来的冲击波动 ,引起芯片时序不稳定导致的系统工作不稳定现象。


系统描述

时钟接口典型电路如图1所示。CPU通过I2C总线与DS3231连接,DS3231的RST与CPU的RESET相连。DS3231的VCC接系统电源VCC,VBA T接3.6 V可充电NIHI电池,电池通过二极管V1和电阻R1平时处于浮冲状态,系统掉电后切换到电池供电。CPU可通过I2C总线向时钟芯片DS3231写时间信息,DS3231以写入的时间信息为基准进行精确走时。整个单片机系统可以随时从DS3231读取精确的时间信息。

系统上电读取信息出错问题分析及解决问题描述

系统程序设计为:上电后CPU从时钟芯片读取时间信息放入内存供系统使用,然后每隔5 s读取1次时钟,刷新CPU系统时间。

系统在CPU的仿真工作下,时钟芯片DS3231的时间能正常地写入;系统断电一段时间后重新上电,时钟芯片内的实时数据能正确读出。

生成固化程序后将程序固化,在100块批量生产中,发现有37块板的时钟芯片上电后读出的时间有误,但通过CPU重新写入时钟芯片时间信息,并读取时钟芯片时间,结果正确。断电后重新上电,再读时间仍是错误的。


问题分析

图 2 为时钟芯片的电源切换原理及开关时序。


电源控制功能由温度补偿电压基准(VPF)和监视VCC电平的比较器电路提供。当VCC高于V PF时,DS3231由VCC供电;当VCC低于V PF但高于VBA T时,DS3231由VCC供电;当VCC低于V PF且低于VBAT时,DS3231由VBA T供电。引脚RST用来指示电源故障报警情况。当VCC低于V PF时,会产生内部电源故障报警信号,并强制拉低RST引脚。当VCC返回并超过V PF电平时,RST引脚保持低电平大约250 ms(tREC),以使供电电源稳定下来。如果在VCC加载时振荡器没有工作(参考电源控制部分),则会跳过tREC,RST立刻变为高电平。

系统正常运行时DS3231内部由VCC供电,如图3(a)所示。在系统断电时VCC消失,DS3231切换到VBA T,如图3(b)所示。在系统上电时由VBAT切换到VCC供电,如图3(c)所示。

nt]

上电后通过CPU重新写入当前时间信息,断电一段时间后重新上电,使用仿真器进入仿真调试状态。程序单步执行,从时钟芯片内读取的时间是正确的当前时间,表明时钟在电池状态下正确走时。

既然断电后时钟能正确走时、保持,并且上电后能在仿真下正确读取时间信息,说明系统断电时刻没有造成时钟芯片内数据混乱。我们认为是上电时刻造成了时钟芯片内的数据混乱。


解决方法

通过上面的分析,可知是上电时刻的电源切换冲击造成的,采取下面的措施进行解决。

①如图4所示,在DS3231的VCC上串联一个小电阻,减缓图3(c)中电源切换时从VBA T到VCC的上升沿斜率。串联电阻后,37片DS3231中有30片在程序固化后能正常读取时钟信息,其余7片仍然无法正确读取。

②如图5所示,将DS3231的VCC接地,VBAT直接接电池后,系统上电后DS3231芯片内的电源将不再进行切换。程序固化后,37片DS3231都能正常读取时钟信息,说明电源切换确实影响到DS3231的正常工作。

③仿真程序状态与固化程序状态的区别在于:仿真下,系统上电后程序没有立刻执行,而是等待人工干预,这一段时间使得DS3231内部电源切换造成的波动彻底稳定下来;而固化程序则是系统一上电立刻从DS3231中读取时钟,这时时钟还没有稳定下来。将程序修改为上电后不立刻读取时钟,而是执行一段程序延时,或先执行其他任务后再读取时钟。这样,37块时钟芯片都能正常读取时钟信息。

原因分析

由于DS3231内的VCC与VBAT在上电时刻的切换产生电源波动冲击,使得DS3231在短时间内不能按正常时序工作,而对DS3231进行读/写的CPU已正常启动,并执行对DS3231的读/写操作,因而造成DS3231内存储器的数据混乱。

单片机系统中,在上电时刻由于CPU与外围接口芯片对上电初始时序的要求不同,使得系统不能正常工作的情况较为常见。可以通过改变不同芯片的上电时序,或程序上电运行后的延时等措施,确保CPU与不同外设芯片的时序配合。




相关帖子

沙发
FCCdsp|  楼主 | 2018-9-28 16:33 | 只看该作者
实时时钟DS3231读取信息出错的分析

文档1.pdf

259.61 KB

使用特权

评论回复
板凳
airwill| | 2018-9-29 06:29 | 只看该作者
功能不错啊, 不知道这个器件为啥搞那么多假肢, 这不是浪费成本嘛, 还低成本封装!
难道比8脚的封装还低?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

967

主题

1447

帖子

9

粉丝