高精度时钟芯片SD2001E及其应用
摘要:介绍一种内置晶振、充电电池、串行NVRAM的高精度和免调校实时时钟芯片SD2001E。由该芯片构成的时钟电路具有精度高、外围电路和接口电路简单的特点。文中详细描述芯片的主要特性、引脚说明及其工作原理,给出在嵌入式系统中的应用方法、硬件接口电路及应用程序。
关键词:SD2001E 实时时钟 单片机
实时时钟电路在以单片机为核心构成的智能仪器仪表、测控系统、工业控制等领域有着广泛的应用,但现有的时钟电路存在着外围电路(如需外接晶振、电池)和接口电路(并行接口)复杂、功能单一等缺点。SD2001E则是在内部集成了实时时钟电路、串行非易失性SRAM、可充电电池、晶振及电池管理电路的新型实时时钟芯片。该芯片与单片机的接口电路采用工业标准I2C总线,从而简化了接口电路设计。利用该芯片无需扩展任何外围元件,即可构成一个高精度实时时钟及具有256Kb非易失性SRAM的数据存储电路。javascript:window.open(this.src);" style="cursor:pointer;"/>
1 主要特性及引脚说明
SD2001E时钟芯片的主要特性如下:
*年、月、日、星期、时、分、秒的BCD码输入/输出;
*I2C总线接口(包括实时时钟部分和SRAM部分);
*自动日历到2099年(包括闰年自动换算功能);
*内置晶振,出厂前已对时钟进行校准,保证精度为±4×10 -6,即时钟年误差小于2min;
*低功耗,典型值为1.0μA(VDD=3.5V);
*工作电压为3.0~5.5V(其中NVRAM在4.5~5.5V工作);
*可设置的两路闹钟输出及32 768Hz~1Hz的方波信号输出;
*可设置的每分钟固定中断输出或选定频率固定中断输出;
*内置充电电路和充电电池,充满一次可保持内部时钟走时时间超过1年以上,可满充电次数达200次;
*内置电源管理电路,当VDD≥3.0V,内部电池不耗电;
*内置稳定电路及电池掉电检测电路;
*内置256Kb的非易失性SRAM,其擦写次数为100亿次,且没有内部写延时。
SD2001E采用24脚DIP封装形式。各引脚的功能如表1所列,其外形及引脚排列如图1所示。
表1 SD2001E引脚说明
引脚号 | 标 廖 | 功 能 | 特 征 |
3 | TEST | 测试 | 内部电池电压检测 |
4 | ON/OFF | 打开/关闭SRAM,接低电平为打开SRAM,接高电平时关闭 | 此功能引脚主要用来降低芯片整体功耗 |
10~12 | GND | 接地 | |
13 | SCL | 串行时钟输入脚 | CMOS输入(与VDD间无保护二极管) |
14 | VOUT | 3.3V稳压输出脚,当VDD≥3.4V时有效 | 可供电流≤30mA,电压精度3.3(1±0.02)V |
15 | SDA | 串行数据输入/输出脚 | N沟道开路输出(与VDD间无保护二极管)CMOS输入 |
1、2、22 16~18、5~9 | NC | 空引脚 | |
19 | INT1 | 报警中断1输出脚,根据中断寄存器与状态寄存器来设置其工作的模式,当定时时间到达时输出低电平或时钟信号。它可通过重写状态寄存器来禁止 | N沟道开路输出(与VDD端之间无保护二极管) |
20 | SDAE | SRAM串行数据输入/输出脚 | 开路输出 |
21 | SCLE | SRAM串行数据时钟脚 | CMOS输入 |
23 | INT2 | 报警中断2输出脚,同INT1 | |
24 | VDD | 正电源 |
2 工作原理
SD2001E内部包括实时时钟与NVRAM两部分,内部原理框图如图2所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.1 实时时钟
SD2001E实时时钟是基于I2C总线的器件,故对该器件的操作必须严格遵守总线时序。当CPU发出起始条件,建立与实时时钟连接后,CPU通过SDA总线连续输出4位器件地址、3位操作指令和1位读/写指令,其格式如下:
DB7 | DB6 | DB5 | DB5 | DB3 | DB2 | DB1 | DB0 |
0 | 1 | 1 | 0 | C2 | C1 | C0 | R/W |
实时时钟器件的地址固定为“0110”,接下来的3位操作指令构成了对实时时钟部分的8条操作指令,具体指令含义如表2所列。
表2 SD2001E实时时钟指令表
C2 | C1 | C0 | 操 作 | ACK数目 |
0 | 0 | 0 | 复位00(年),01(月)有,01(天),0(星期)00(分),00(秒) | 1 |
0 | 0 | 1 | 状态寄存器存取 | 2 |
0 | 1 | 0 | 实时数据1(从年数据开始)存取 | 8 |
0 | 1 | 1 | 实时数据2(从小时数据开始)存取 | 4 |
1 | 0 | 0 | 频率事件设置1(INT1脚) | 3 |
1 | 0 | 1 | 频率事件2(INT1脚) | 3 |
1 | 1 | 0 | 测试模式开始 | 1 |
1 | 1 | 1 | 测试模式结束 | 1 |
CPU通过发送不同操作指令,选择相应的寄存器从而完成相应的操作功能。SD2001E实时时钟部分共包括4个寄存器,分别分别如下:
(1)实时数据寄存器
实时数据寄存器是一个56位的存储器。它以BCD码方式存储,包括年、月、日、星期、时、分、秒的数据,数据格式如图3所示。任何读/写操作或实时数据存取命令都通过发送或接收年数据的第一位“LBS”执行的。
*年数据(00~99):设置最后两位数字(00~99),通过自动日历功能计至2099年。
*月数据(01~12):每月包含天数通过自动日历功能来更改。1、3、5、7、8、10、12为1~31;4、6、9、11为1~30;2(闰年)为1~29;2(普通)为1~28。
*天数(01~31)。
*星期数据(00~06):七进制计数器,对应于星期内每一天来设置。
*小时数据(00~23或00~11):12小时进制,0为AM,1为PM;对于24小时进制,这一位没有意义,但必须设置为“0”或“1”。
*分数据(00~59)。
*秒数据(00~59)与测试标志。
*TEST:在测试模式变为“1”。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(2)状态寄存器
状态寄存器是一个8位寄存器。该寄存器用来显示和设置实时时钟的工作模式,状态寄存器格式如下。
javascript:window.open(this.src);" style="cursor:pointer;"/>
Power:电源标志位,为只读位。
12/24:设置12小时制或24小时制:0为12小时制;1为24小时制。
INT1AE:设置从INT1脚输出的报警中断的状态。设定报警时间并设此位为“1”时INT1寄存器开始有效,0:报警中断输出禁止;1:报警中断输出允许。
INT1ME:确定INT1脚的输出为每分钟边沿中断或每分钟固定中断。为了设为每分钟固定中断输出,应将INT1ME和INT1FE置1。0:报警中断或可选的频率的固定中断输出;1:每分钟边沿中断或每分钟固定中断输出。
INT1FE:设定INT1脚的输出为每分钟固定中断(周期1分钟,占空比50%)或选定频率的固定中断。如果选定频率固定中断输出被允许时,INT1寄存器被认为是频率/事件的数据,0:报警中断或每分钟边沿中断输出;1:每分钟固定中断输出或选定频率固定中断输出。
INT2AE、INT2ME、INT2FE位用于设置从INT2脚输出的报警中断的状态,各位含义同上。
(3)两组报警时间/频率事件设置寄存器
有两组16位报警时间/频率事件设置寄存器,用于设置报警时间或频率事件,由INTxAE与INTxFE控制。设定的AM/PM标志位必须同12小时制或24小时制相对应,否则,设定的小时数将与报警数据不匹配。该寄存器为只写寄存器(x:1或2)。
javascript:window.open(this.src);" style="cursor:pointer;"/>