摘要: 实时时钟(RTC)允许系统将事件同步或时间戳到用户容易理解的时间参考。由于rtc在越来越多的应用程序中使用,设计人员应该熟悉这些rtc以避免设计问题。本应用说明提供了RTC操作、设计问题和故障排除技术的基本概述。
实时时钟(rtc)可用于各种总线接口。串行接口包括I²C, 3线和串行外设接口(SPI)。并行接口包括多路总线(多路数据和地址总线)和具有单独的地址和字节范围数据输入的设计。
接口的选择通常由所使用的处理器类型决定。许多处理器包括I²C或SPI接口。其他处理器,如8051处理器及其衍生产品,支持多路地址和数据总线。计时NV RAM使用与sram相同的控制信号,许多处理器提供了一个简单的接口,并包括不同密度的电池支持的RAM。最后,幻影时钟“隐藏”在电池支持的RAM后面,并使用64位软件协议访问时钟。因此,虚拟时钟可以在不使用任何内存空间的情况下提供时间和日期信息。
在某些应用中,如录像机,如果断电,时间和日期信息将丢失。其他应用要求即使主电源关闭,时间和日期仍然有效。为了保持时钟振荡器的运行,可以使用一次或二次电池或超级电容器。在这种情况下,RTC必须能够在两个电源之间切换。
如果使用一次电池,如锂硬币电池,作为备用,RTC应该设计成在从电池运行时尽可能少的功率。在这种情况下,RTC将其内部供电总线切换到电池,并进入低功耗模式。微处理器和RTC之间的通信通常被锁定(通常称为写保护),以保持电池电流最小,并防止数据损坏。通信被锁定的V(CC)电压水平通常在数据表中定义为V(TP)(跳闸点电压)。
许多时钟包括一个振荡器控制位,通常称为时钟停止(CH)或使能振荡器(EOSC)位。这个位通常位于秒寄存器的第7位,或者在控制寄存器中。在几乎所有时钟与这个位,它是可取的振荡器是关闭时,电池最初连接。这样可以在系统通电之前节省电池电量。它还允许系统设计人员设置制造流程,以便在安装新锂电池后没有电池电流。当终端用户首次启动系统时,固件/软件应启动振荡器并提示用户输入时间和日期。
大多数包含电池输入引脚的设备产品都包含芯片上的反向充电保护电路。监管机构数据和可接受条件信息可在UL认证中找到。
锂电池通常额定工作温度为-40°C至+85°C。电池不应暴露在+85°C以上的温度下。包括电池和暴露电池引脚的包装,如SmartSockets,不应用水冲洗。水洗会使电池端子短路,从而耗尽电池的电量。
在电池供电模式下,时钟消耗的大部分电流来自振荡器。所有时钟模块与嵌入式晶体和电池是从工厂发货与振荡器禁用。当振荡器关闭时,电池电流小于电池自放电,或在室温下每年约0.5%。
一些计时NV RAM模块使用时钟控制器IC和SRAM。当从工厂发货时,振荡器被禁用,SRAM与电池断开。第一次取下V(CC)后,将电池连接到SRAM上。这个功能通常被称为“新鲜度密封”,用于在模块首次使用之前保存电池。其他计时NV RAM模块是单片(控制器和SRAM在一个IC),不需要新鲜度密封。
计时NV ram,多路总线时钟,以及一些看门狗和幻影时钟在模块和/或PowerCap包中可用。模块包括嵌入式32,768Hz晶体和锂电池,使PCB设计更容易。然而,晶体和电池不能忍受回流过程中遇到的温度。因此,模块可以手动连接或在回流后插入套接字。只要锂电池不暴露在+85°C以上的温度下,模块也可以使用波峰焊连接到PCB上。
PowerCap产品采用两件式结构,可以使用回流工艺进行表面安装。包含RAM和时钟的模块底座使用标准回流技术安装到电路板上。PowerCap顶部,包含热敏电池和晶体,焊接后被扣在底座上。
rtc中使用了三种主要的数据格式:二进制编码的十进制(BCD),具有单独寄存器的月、日、年等二进制,以及运行时间计数器。
BCD格式是最常见的。它受欢迎的一个原因是时间和日期可以很容易地以人类可读的格式显示,而不需要“转换”。每个8位寄存器表示两个数字(每个数字一点)。每个4位的小块可以保存0到9的二进制表示。图1显示了一个典型BCD格式时钟的寄存器映射示例。
由于某些位对于特定的时间或日期字段是不需要的,因此这些位可以用于特殊功能,通用读/写位,或者可以根据设计将其硬连接为始终为1或0的回读。在图1中,秒寄存器的第7位用于时钟停止(CH)位。(参见DS1307数据表中的示例。)
图1所示 典型的时间和日期寄存器映射(BCD格式)。
第二种时钟格式是二进制格式(图2),与BCD格式一样具有单独的寄存器。二进制格式通常是一些带有BCD格式的时钟的可编程选项。(请参阅DS12885数据表了解该格式的示例。)
图2 典型的时间和日期寄存器映射(二进制格式)。
运行时间计数器(ETC)使用单个多字节寄存器,表示从某个参考点(零历元)开始以秒为单位的时间。一个常见的值是1970年1月1日00:00:00 GMT。然后,寄存器中的二进制值表示从该点开始经过的时间。必须使用软件例程将32位值转换为可读的时间和日期,并将用户条目转换为二进制值。ctime 函数的作用是:将经过的时间(以秒为单位)转换为日期/时间字符串。
应用笔记511,“使用DS1672低压串行计时IC”,给出了将时间值与日期字符串进行转换的示例例程。DS1318是一个44位ETC。低12位提供亚秒级分辨率,达到244µs。上面32位每秒递增一次,如上所述。有关示例应用,请参阅应用说明2740,“访问DS1318时钟寄存器”。
当需要测量两个事件之间的时间时,ETC时钟非常有用。计算两个事件之间经过的时间需要从另一个值中减去一个值,而bcd格式的RTC则需要更复杂的转换例程。
对于bcd格式的rtc,时间和日期寄存器通常每秒更新一次。日期的滚转值将根据月份而变化,对于2月份,则根据年份而变化。日寄存器(除了多路总线时钟)不绑定到任何其他寄存器,将在午夜增加,并从7滚动到1。程序员可以选择任何特定的一天作为1,只要任务在整个程序中是一致的。然而,在多路总线时钟上,星期天必须是1,因为日寄存器用于夏令时测试。夏时制测试在前一个午夜翻转的午夜进行,测试夏时制功能时必须考虑到这一点。
当从12小时模式切换到24小时模式时,或者从BCD切换到二进制或从二进制切换到BCD时,时间、日期和告警寄存器必须重新初始化。
晶体振荡器是提供固定频率的最精确的电路之一。大多数rtc使用32,768Hz晶体。通过对振荡器的输出进行分频,可以使用1Hz的参考频率来更新时间和日期。RTC的精度主要取决于晶体的精度。音叉晶体在温度范围内呈抛物线型频率响应(图3)。23ppm的误差约为每月1分钟。更多参考,请参见实时时钟计算器。晶体在特定的容性负载下以正确的频率振荡。在RTC上使用调谐为12.5pF负载的晶体,设计为向晶体提供6pF负载,将导致时钟运行太快。
图3 晶体精度与温度的关系。
所有器件RTC振荡器都有内部偏置网络。晶体应该直接连接到X1和X2引脚,没有额外的组件(图4)。晶体也应该尽可能靠近X1和X2引脚,并且在晶体、X1和X2的下面应该放置一个接平面(图5)。数字信号线应该远离晶体和振荡器引脚。低功耗晶体振荡器电路可能对附近的射频信号很敏感,这可能导致时钟运行得很快。因此,应屏蔽具有显著RFI水平的组件,并将其置于远离晶体的位置。
图4 显示内部偏置网络的RTC等效电路。
图5 典型的晶体布局。
含有音叉晶体的PC板,如与rtc一起使用的,不应使用超声波清洗。晶体会因共振振动而损坏。
振荡器启动时间高度依赖于晶体特性和布局。高ESR和过大的容性负载是导致启动时间长的主要原因。使用具有推荐特性并遵循推荐布局的晶体的电路通常会在一秒钟内启动。
当检查振荡器工作时,设计人员可能首先考虑将示波器探头连接到振荡器输入(X1)或输出(X2)引脚。对于RTC,不建议使用这种方法。由于振荡器被设计为低功耗运行(这延长了电池的工作时间),用示波器探头观察振荡器通常会使振荡器停止工作。如果振荡器不停止,额外的长会降低信号的幅度,并可能导致不稳定的操作,如变化幅度。因此,振荡应该被间接证实。
振荡可以用几种方法来验证。一种方法是多次读取秒寄存器,查找要增加的数据。在带有OSF(振荡器停止标志)的rtc上,清除并监视该位将验证振荡器已经启动并持续运行。如果设计人员正在对设计进行故障排除并且无法与RTC通信,则这些方法将不起作用。另一种方法是用方波输出检查rtc上的方波输出。检查数据表,以验证是否必须先写入RTC以使能振荡器和方波输出。如果方波输出为开漏,则必须在方波引脚和电压电源之间连接上拉电阻才能正常工作。方波输出也可用于验证RTC的精度,尽管必须使用具有足够精度的频率计数器。
大多数设备RTC包括一个备用电源输入引脚,它使RTC在主电源关闭时保持运行。大多数RTC的设计是在没有V(CC)的情况下,可以使用锂硬币电池为RTC供电。
当V(CC)低于最小工作值(V(TP))时,RTC关闭通信接口。这有两个目的:防止在V(CC)下降时意外写入RTC;它减少了RTC维持振荡器、时间和日期操作所需的功率。当V(CC)低于V(TP)时禁止对部件的访问通常称为“写保护”。当RTC从V(CC)工作时,V(BAT)输入将处于高阻抗。如果电池没有连接到V(BAT)输入,或者与串联二极管连接(图6),则V(BAT)输入可能会浮高。这反过来又会导致RTC进入写保护。反向充电保护在大多数器件rtc内部提供,这消除了外部二极管的需要。
图6 电池连接不正确。
图7 电池连接正确。
在设计带有RTC的系统时,必须根据系统需求选择备用电源。如果一个系统预计大部分时间使用主电源运行,那么备用电源可能只需要为时钟供电几个小时。在其他应用中,备用电源必须长时间为时钟供电。
对于具有单独备用电源输入(V(BAT)或V(backup))的rtc,电池备用时间由电池容量(以安培小时为单位)除以期望备用电流计算。下面是如何计算该容量的两个示例。
例1。BR1225锂电池的额定容量为48mAH。当DS1307由V(BAT)供电时,在SQW/OUT关闭的情况下,V(BAT)输入的电流被指定为最大500nA。因此,0.048 / 500e-9 = 96,000小时,约为10.9年。请注意,这是假设电池具有可忽略不计的自放电。
例2。DS1337用于单个电池供电整个电路的应用中。有效电流(I²C串行接口工作时的电流)额定为150µA。当I²C接口处于非活动状态时,待机电流规定为最大1.5µA。我们将假设电路每通电一个小时,I²C总线大约有5%的时间处于活动状态,其余时间处于非活动状态。因此,平均电流预计为0.05 × 150µA + 0.95 × 1.5µA = 7.5µA + 1.425µA = 8.925µA /小时。这个数字将被添加到微控制器、I²C上拉电阻和任何其他由电池供电的设备所产生的电流中。然后将电池容量除以总电流,如例1所示,以获得预期的电池寿命。
对于需要从备用电源运行几个小时或几天的应用,可以使用大型电容器或超级电容器。内置涓流充电器的rtc支持超级电容器充电。请参阅应用说明3517,“在涓流充电器实时时钟上估计超级电容器备份时间”,以及在线超级电容器计算器以获取更多信息。
读取和写入时间和日期寄存器是一个异步事件,与内部寄存器的自动更新是分开的。当时间和日期寄存器在读取时增加时,可能会发生两种类型的读取错误。首先,在读取单个寄存器时数据可能发生变化,其次,在读取两个寄存器之间的时间内数据可能发生变化。例如,假设在读取秒、分和小时寄存器期间,时钟从11:59:59递增到12:00:00。读取的时间可能是12:00:59,这是不正确的。
必须使用某种方法来防止这些读取错误。大多数设备时钟确保可以访问时间和日期寄存器,而不会在读取或写入过程中由于内部寄存器更新而损坏这些值。
第二组寄存器(辅助缓冲区或“用户”寄存器)用于大多数串行时钟。当访问时间和日期寄存器时,将当前时间和日期传送到二级寄存器。突发读取将从二级寄存器获取数据,当内部寄存器继续更新时,二级寄存器保持不变。下一次访问(当CE在3线设备上激活或在I²C接口设备上发生START时)将再次传输数据。当写入时间和日期寄存器时,当写入秒寄存器时,内部倒计时链被重置。这使得程序在发生滚转之前有将近一秒钟的时间来写入剩余的时间和日期寄存器。
在计时NV RAM时钟上,要么使用传输使能(TE)位,要么使用(R)读位和(W)写位来“冻结”用户寄存器。设置R位或TE位可以防止用户寄存器从主寄存器更新。在写入用户寄存器后重置TE位或W位,用用户寄存器中的值加载内部时间和日期寄存器。
图8中的框图显示了在内部寄存器和用户界面之间传递时间和日期信息的典型函数。来自振荡器的32,768Hz信号被具有复位输入的倒计时链分解为1Hz。来自倒计时链的1Hz信号驱动BCD秒计数器/寄存器。从秒计数器的纹波输出馈送分钟计数器/寄存器,等等。改变控制寄存器中的R和W位可以同步数据从内部寄存器到用户寄存器的传输。传输控制块在将数据从用户寄存器传输到内部寄存器时向倒计时链发送重置。这允许时钟在大约244µs内同步到外部参考(大多数时钟不重置前三个分频器,到4,096Hz信号;1/4,096Hz≈244µs)。大多数串行接口时钟在写秒寄存器时重置倒计时链。
图8 显示时间和日期寄存器的内部和用户副本的框图。
在多路总线时钟上,有几种方法可以确保时间和日期寄存器在被访问时不会改变。有以下几种方法:
当寄存器B中的SET位设置为1时,双缓冲时间和日期寄存器的用户副本被锁存。内部寄存器继续正常更新。
正在进行的更新(UIP)标志将每秒脉冲一次。UIP位高后,更新传输延迟244µs。如果在UIP位上读取低电平,用户至少有244µs的时间读取时间和日期,并避免由于更新而导致的错误。
如果启用,则在每个更新周期之后发生中断,从而表明有超过999ms的时间可用于读取有效的时间和日期信息。
除非在数据手册中另有说明,否则初始上电寄存器值是未定义的。也就是说,它们应该像DRAM或sram一样被对待;在初始启动时,出于实际目的,数据将是随机的。
下面几节将讨论一些RTC问题以及如何对它们进行故障排除。
在对新设计进行故障诊断时,有几种方法可以帮助确定问题的原因。如果RTC似乎根本没有响应,请尝试确定它是不读、不写,还是两者兼而有之。如果部件具有软件启用的功能,例如方波输出,请尝试启用该功能以确定是否可以写入部件。在i2c串行设备上,示波器可用于验证时钟是否在每个字节的末尾发送确认。
下面的段落描述了与RTC通信的一些额外的故障排除提示。
电池供电的rtc使用比较器在V(CC)和V(BAT)之间切换。一些rtc使用电池电压作为参考,而其他rtc使用带隙电压参考来确定V(CC)何时有效。一旦V(CC)降到比较器跳闸点以下,读写访问就不可能了。阻止低于一定电压的访问有助于防止处理器不再具有有效电源的意外写入。当V(CC)高于跳闸点时,比较器将内部电路切换到V(CC),从而防止电池损耗。浮动电池输入,电池与V(BAT)之间有二极管输入,或电池电压过高会阻止与RTC的通信。确保V(BAT)处于有效电平,并且在电池和电池输入引脚之间没有二极管。
为了确定断电函数是否导致了RTC的写入和写入问题,观察一个仅在RTC断电时才运行的函数(即在V(CC)上运行)通常是有用的。一些rtc有RST或卵圆孔未闭可以观察到的输出。由于这些输出通常是开漏的,因此可能需要一个上拉电阻。在其他器件上,如DS12887和其他多路总线部件,方波输出仅在部件工作在V(CC)时才能工作。在一些设备上,包括许多串行接口rtc,方波输出是开漏的,必须有一个上拉电阻来观察信号。因此,检查RTC的数据表,以确定它是否有方波输出信号。如果读/写访问是间歇性的,使用示波器查看输出是否也是间歇性的。
串行时钟要求“命令字节”或“从地址”被正确地写入设备。错误的命令/地址经常导致设备忽略读例程。在这些情况下,数据I/O引脚保持在高阻抗状态。在带有上拉电阻的串行总线上,数据回读通常为0xff。在3线接口上,如果I/O引脚有一个内部下拉电阻,则数据通常为0。在其他情况下,回读的数据通常是命令字节的最后一位。一些串行时钟使用单独的电源输入作为输出,以允许在较低的电源电压下与处理器连接。连接有效电源到输入的失败将使I/O引脚无法驱动高电平。最后,如果软件没有将连接到时钟I/O引脚的微处理器端口引脚从输出(在写入命令字节时)切换到输入(用于从时钟读取数据),则输出的数据可能都是1或0。
大多数时间和日期寄存器可以接受任何值,包括无效值。如果在寄存器中输入了一个无效的值,则该值将增加,直到用于翻转比较的位匹配,或者直到计数器达到其最大计数。如果将秒寄存器写入无效值,例如60,在大多数情况下,RTC将增加无效值,直到它达到69,此时秒寄存器将滚动到40秒。如果时钟处于错误的模式,也可能导致无效值,例如,二进制而不是BCD,或者12小时而不是24小时。
如果寄存器出现从有效值到无效值的计数,原因通常是软件例程错误地将BCD值转换为ACSII或二进制值。应该检查软件例程是否正确转换了所有可能的值,因为错误通常只影响某些值。示波器还将验证RTC计数正确并生成正确的数据。
数据丢失通常是由两种情况之一引起的:无意中写入时钟,或负电压故障被应用于IC。负电压输入到IC引起的数据丢失有时可以被识别,因为CH或EOSC位(带有振荡器控制位的时钟)将处于其默认的“停止”状态。对于带有振荡器停止标志(OSF)位的时钟,通常会设置OSF位。此外,大多数(如果不是全部的话)寄存器中的数据将被损坏。无意的写操作通常也会在电源循环期间发生,但通常只会影响一个寄存器。它通常不影响串行时钟。
一些开关电源在上电和/或下电时,会在V(CC)上产生电压尖峰。这个电压尖峰可以负5V或6V,或更多。这个负电压将通过输入保护二极管耦合到时钟的内部电源上。如果电源提供的电流大于电池,数据就会丢失。在大多数情况下,肖特基二极管可以用来箝位负电压尖峰。
时钟上的负电压的另一个来源可以来自RS-232连接。如果带时钟IC的PCB断电,并且有电源的PC机或其他仪器通过RS-232连接到该板上,则RS-232收发器可以将负标记电压传递到未通电板上的其他IC上(见图9)。为了验证这是一个问题,请尝试在断开RS-232链路的情况下对系统进行循环供电。
图9 系统通过RS-232连接到PC机。
当V(CC)下降得太快时,数据也会损坏,这可能导致所有的时间、日期和RAM数据损坏,或者只损坏一个或两个字节的数据。第二个问题(一个或两个字节的损坏数据)通常会影响并行接口rtc,例如计时ram,但也会影响多路总线rtc,如下所述。
电池供电的rtc的电源故障电路通常包括一些滤波,以确保V(CC)上的瞬间故障不会引起无意的写保护。如果V(CC)下降得太快,就会发生写操作。当V(CC)下降时,微处理器的输出电压变为高电平CE,OE,我们输出(或其他控制信号)通常跟踪V(CC)。因此,RTCCE,OE,我们输入也遵循V(CC)。对于典型的静态ram,如果CE,OE,我们都是低的,RTC处于写周期。如果在V(CC)达到控制输入的输入阈值之前RTC没有进入掉电状态,RTC的内部逻辑将导致写操作发生。
在多路总线时钟的情况下,地址信息被锁存在ALE的下降沿上。如果R /W和CS在部件处于写保护之前转低,最后访问的寄存器中的数据将被损坏。应验证V(CC)上升和下降时间是否符合数据表的要求。如果秒寄存器损坏,RTC可能会在电池备份中丢失时间。秒寄存器在损坏时可以被写为零。因此,当再次应用V(CC)时,结果时间将变慢,无论V(CC)被删除时寄存器处于多少秒。
如果所有数据都损坏,则V(CC)下降得太快,RTC无法切换到备份电源并维护时间和日期信息。这个问题可能会影响串行接口和并行接口rtc。
间歇性数据问题是由未正确处理的中断例程引起的。在某些情况下,将时间和日期信息复制到RAM,并且副本不保持同步。此外,电路仿真器(ICE)硬件可能配置不当,导致不稳定的行为。
时钟不增加的最常见原因是振荡器没有启用。大多数设备时钟都有一个位,通常位于秒寄存器中,必须在振荡器运行之前设置。
振荡器电路被设计成低功耗,以延长电池寿命。晶体连接的问题会降低环路增益,阻止振荡器运行。外部电容或其他元件连接到晶体也将减少环路增益,增加启动时间,或防止振荡。ESR高于推荐最大值的晶体也会降低环路增益。一些水洗焊剂似乎可以使PCB保持清洁,同时留下足够的污染物来防止振荡。请参阅应用说明58,“器件实时时钟的晶体考虑”了解更多信息。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308