RTC DS3231MZ+TRL 低功耗配置

前言

做了一个RTC的低功耗配置。

说明

中文数据手册:

https://www.analog.com/media/cn/technical-documentation/data-sheets/DS3231_cn.pdf

硬件

典型电路:

alt text

低功耗配置

配置如下寄存器即可。

EOSC    = 0     // 电池模式继续走时
BBSQW   = 0     // 电池模式 INT/SQW 高阻,不输出方波
INTCN   = 1     // 关闭 SQW 输出
A1IE    = 0     // 关报警中断
A2IE    = 0     // 关报警中断
EN32kHz = 0     // 关闭 32kHz 输出

原因:

有两个主要的耗电大户,一个是32Khz的输出,一个是温度测量。

配置器件每隔64秒(64s)测量一次温度,通过调节晶体的负载电容,使其在指定温度达到0ppm的精度,最终达到提高时钟精度的目的。

alt text

参考:

https://www.analog.com/cn/resources/design-notes/power-considerations-for-accurate-realtime-clocks.html

不输出32Khz的时钟

主机关闭i2c,或者直接拉低。

手册上低功耗电流的部分

alt text

代码

commit 4ef42e3f5007bf30db72aac0260e6711b1627b80
Author: yangx <yangx@.com>
Date:   Wed Sep 16 16:14:46 2026 +0800

    QY: RTC 的低功耗配置

diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 1832f5b383b6..0abb17ae4268 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -1809,6 +1809,15 @@ static int ds1307_probe(struct i2c_client *client,
                if (want_irq || ds1307_can_wakeup_device) {
                        regs[0] |= DS1337_BIT_INTCN | chip->bbsqi_bit;
                        regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
+               } else if (ds1307->type == ds_3231) {
+                       /*
+                        * No interrupt or wakeup use: keep INT/SQW high-Z on
+                        * battery, disable the square-wave output and both alarm
+                        * interrupts to minimize VBAT current.
+                        */
+                       regs[0] &= ~DS3231_BIT_BBSQW;
+                       regs[0] |= DS1337_BIT_INTCN;
+                       regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
                }

                regmap_write(ds1307->regmap, DS1337_REG_CONTROL,

硬件问题

断电的供电电容不应该连接到RTC的VCC上,应该接到VBAT脚上。

alt text

电池,电容\VCC供电是自动切换的,会自己配置到电池模式。

alt text

posted @ 2026-09-16 15:55  杨旭0324  阅读(20)  评论(0)    收藏  举报