告别时钟误差!高精度RTC芯片RX8025T全解析:从芯片对比到Arduino/ESP32/STM32实战
- 模块简介
- 时钟芯片对比
- RX8025T 与 DS1302、DS1307、DS3231 对比
- 模块引脚定义
- 寄存器说明
- 获取时钟数据代码
- Arduinio/ESP8266/ESP32/ESP32S3驱动代码
- STM32驱动代码
- 总结
- QA
模块简介
RX8025T 是爱普生(EPSON)推出的一款高精度低功耗实时时钟(RTC)芯片,参考官方手册可以知道,RX8025T内部集成 32.768kHz 数字温度补偿晶体振荡器(DTCXO),无需外部晶振即可实现稳定计时。该芯片采用 I²C 通信接口,支持最高 400kHz 通讯速率,具备年、月、日、星期、时、分、秒完整日历功能,同时支持闹钟、中断、频率输出(FOUT)、振荡停止检测等功能。RX8025T 工作电压范围为 1.7V~5.5V,备用电流低至微安级,具有高精度、低功耗、宽温度适应等特点,广泛应用于智能电表、工业控制设备、数据采集终端、物联网设备等需要长期稳定计时的场合。这里使用的是优信电子的8025时钟模块,电池型号使用的是CR1220。
时钟芯片对比
RX8025T 与 DS1302、DS1307、DS3231 对比
| 参数 | RX8025T | DS1302 | DS1307 | DS3231 |
|---|---|---|---|---|
| 厂商 | EPSON(爱普生) | Maxim / Analog Devices | Maxim / Analog Devices | Maxim / Analog Devices |
| 通信接口 | I²C | 三线 SPI(CLK、I/O、RST) | I²C | I²C |
| 最大通信速率 | 400kHz | 无明确高速限制(约 MHz 级) | 100kHz | 400kHz |
| 工作电压 | 1.7V~5.5V | 2.0V~5.5V | 4.5V~5.5V | 2.3V~5.5V |
| 内置晶振 | ✅ 内置32.768kHz DTCXO | ❌ 外接32.768kHz晶振 | ❌ 外接32.768kHz晶振 | ✅ 内置32.768kHz TCXO |
| 温度补偿 | ✅ 数字温度补偿 | ❌ 无 | ❌ 无 | ✅ 高精度温补 |
| 典型精度 | ±3~±5ppm | ±20~±100ppm(受晶振影响) | ±20~±100ppm | ±2ppm(0~40℃) |
| 年误差 | 约几十秒以内 | 数分钟级 | 数分钟级 | 约1分钟以内 |
| 时间保持电流 | 约0.8μA | 约0.3~1μA | 约300~500nA | 约1μA |
| 日历功能 | 年/月/日/星期/时/分/秒 | 年/月/日/星期/时/分/秒 | 年/月/日/星期/时/分/秒 | 年/月/日/星期/时/分/秒 |
| 闰年补偿 | ✅ | ✅ | ✅ | ✅ |
| 闹钟功能 | ✅ 支持 | ❌ | ❌ | ✅ 2组Alarm |
| 周期中断 | ✅ | ❌ | ❌ | ✅ |
| 秒脉冲输出 | ✅ | ✅ | ✅ | ✅ |
| 频率输出 | ✅ FOUT | ❌ | ❌ | ✅ |
| 振荡停止检测 | ✅ | ❌ | ❌ | ✅ |
| 温度检测 | ❌ | ❌ | ❌ | ✅ |
模块引脚定义
| 引脚名称 | 引脚功能 |
|---|---|
| VCC | 供电正极,DC 1.6V~5.5V 输入(推荐工作电压 DC 3.3V) |
| GND | 电源负极 |
| FOUT | 频率输出引脚,可输出内部时钟频率信号 |
| FOE | FOUT 输出使能控制引脚。 当该引脚为高电平时,FOUT 引脚开启输出模式; 当该引脚为低电平时,FOUT 输出功能关闭 |
| SCL | I²C 时钟信号线,用于 MCU 与 RX8025T 通信 |
| SDA | I²C 数据信号线,用于 MCU 与 RX8025T 数据传输 |
| /INT | 中断输出引脚,低电平有效,用于闹钟、定时中断等功能触发 |
寄存器说明
| 地址 | 寄存器名称 | 功能 |
|---|---|---|
| 0x00 | SEC | 秒寄存器 |
| 0x01 | MIN | 分钟寄存器 |
| 0x02 | HOUR | 小时寄存器 |
| 0x03 | WEEK | 星期寄存器 |
| 0x04 | DAY | 日期寄存器 |
| 0x05 | MONTH | 月份寄存器 |
| 0x06 | YEAR | 年份寄存器 |
| 0x07 | RAM | 用户RAM |
| 0x08 | MIN Alarm | 分钟报警寄存器 |
| 0x09 | HOUR Alarm | 小时报警寄存器 |
| 0x0A | WEEK/DAY Alarm | 星期/日期报警寄存器 |
| 0x0B | Timer Counter0 | 定时器计数器0 |
| 0x0C | Timer Counter1 | 定时器计数器1 |
| 0x0D | Extension Register | 扩展功能寄存器 |
| 0x0E | Flag Register | 状态标志寄存器 |
| 0x0F | Control Register | 控制寄存器 |
以上寄存器说明均参考RX8025T芯片手册整理。
RX8025T 所有时间相关寄存器均采用 BCD 编码格式存储,例如:
59秒 = 0x59
23时 = 0x23
2026年 = YEAR寄存器存储 0x26
获取时钟数据代码
Arduinio/ESP8266/ESP32/ESP32S3驱动代码
接线
Arduino
SCL=A5,SDA=A4
ESP8266
SCL = 5(D1),SDA = 4(D2)
ESP32
SCL = 22,SDA = 21
ESP32-C3/S3
SCL = 9,SDA = 8
#include <RTC_RX8025T.h> #include <TimeLib.h> #include <Wire.h> tmElements_t tm; void setup(void) { Serial.begin(9600); delay(3000); //RX8025T initialization RTC_RX8025T.init(); //The Time library is a software RTC_RX8025T. //"system time" it is referring to the current time according to the software RTC_RX8025T. //Set the system time to 17h 10m 30s on 17 July 2026 setTime(17, 10, 30, 17, 07, 26); //Set the RTC from the system time RTC_RX8025T.set(now()); } void loop(void) { //Read the time from the RTC and store it in the tm structure RTC_RX8025T.read(tm); printDateTime(); delay(1000); } void printDateTime(void) { Serial.print("Date: "); //Time library macro for convenient Year conversion to calendar format Serial.print(tmYearToCalendar(tm.Year)); Serial.print("."); if(tm.Month < 10) Serial.print("0"); Serial.print(tm.Month); Serial.print("."); if(tm.Day < 10) Serial.print("0"); Serial.print(tm.Day); Serial.print(" "); Serial.print("Time: "); if(tm.Hour < 10) Serial.print("0"); Serial.print(tm.Hour); Serial.print(":"); if(tm.Minute < 10) Serial.print("0"); Serial.print(tm.Minute); Serial.print(":"); if(tm.Second < 10) Serial.print("0"); Serial.println(tm.Second); }输出数据现象
STM32驱动代码
接线
OLED–SCL:PB8; SDA:PB9
RX8025T–SCL:PB10; SDA:PB11
串口输出:uart1(可选,程序有相关代码,这里现象只展示oled显示)
获取时间从oled显示
#include"stm32f10x.h"#include"Delay.h"#include"RX8025T.h"#include<string.h>#include"OLED.h"#include"Serial.h"intfputc(intch,FILE*f){USART_SendData(USART1,(uint8_t)ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);returnch;}intmain(void){uint8_tyear;uint8_tmonth;uint8_tday;uint8_tweek;uint8_thour;uint8_tmin;uint8_tsec;OLED_Init();USART1_Init(115200);RX8025T_Init();// RX8025T_SetTime(26, 10, 19, 1, 19, 55, 00);//设置时间,首次可以手动设置时间进行校准,设置完成后,就不需要再重新设置了,模块断电后有电池持续计时//year,mon,day,week,hour,min,sec ,这里设置的是24小时制//printf("RX8025T CLOCK TEST\r\n");OLED_Clear();OLED_ShowString(1,3,"RX8025T_RTC");while(1){RX8025T_GetTime(&year,&month,&day,&week,&hour,&min,&sec);//获取时间//年,月,日OLED_ShowNum(2,4,year+2000,4);OLED_ShowString(2,8,".");OLED_ShowNum(2,9,month,2);OLED_ShowString(2,11,".");OLED_ShowNum(2,12,day,2);//时,分,秒OLED_ShowNum(3,5,hour,2);OLED_ShowString(3,7,":");OLED_ShowNum(3,8,min,2);OLED_ShowString(3,10,":");OLED_ShowNum(3,11,sec,2);//周OLED_ShowString(4,6,"WEEK:");OLED_ShowNum(4,11,week,1);// //串口输出// printf("%d年%d月%d日 \r\n",year+2000,month,day);// printf("%d:%d:%d \r\n",hour,min,sec);// printf("星期%d \r\n",week);}}实测现象
总结
在嵌入式与物联网项目中,精准、稳定的时间基准至关重要。与常见的普通外接晶振时钟芯片(如 DS1302、DS1307)相比,EPSON RX8025T 最大的优势在于内部直接集成了 32.768kHz 数字温度补偿晶体振荡器(DTCXO),既规避了外部晶振引脚受 PCB 走线杂散电容和温漂干扰的问题,又将年累积误差控制在几十秒以内;而在低至 1.7V 的宽工作电压与微安级维持电流支持下,搭配一颗 CR1220 纽扣电池即可提供极佳的断电走时寿命。
本文梳理了 RX8025T 的性能指标、引脚映射与 BCD 寄存器结构,并分别给出了 Arduino/ESP 系列(基于成熟库开发)与 STM32(结合 OLED 实时显示)的实机驱动方案。无论是在追求极致精简的高速开发原型中,还是对长期走时可靠性要求严苛的工控设备与智能电表场景下,RX8025T 都是一款兼顾高精度、低功耗与高性价比的理想 RTC 选型方案。
QA
Q: RX8025T可以直接替换DS1302吗?
A:对比两者的芯片手册可知两者通讯方式不同,驱动代码不兼容。
Q:RX8025T需要外接晶振吗?
A:RX8025T的芯片手册明确指出,RX8025T内置32.768kHz的晶振,无需外接晶振。
Q:RX8025T和常用的DS1302、DS1307时钟芯片比,哪个性能更优?
A:对比三者的芯片手册可知,RX8025T的精度高于DS1302和DS1307,且RX8025T的闹钟功能是DS1302和DS1307不具备的。DS1307的时间保持电流低于RX8025T和DS1302。