RTC DS3231MZ+TRL 低功耗配置
前言
做了一个RTC的低功耗配置。
说明
中文数据手册:
https://www.analog.com/media/cn/technical-documentation/data-sheets/DS3231_cn.pdf
硬件
典型电路:

低功耗配置
配置如下寄存器即可。
EOSC = 0 // 电池模式继续走时
BBSQW = 0 // 电池模式 INT/SQW 高阻,不输出方波
INTCN = 1 // 关闭 SQW 输出
A1IE = 0 // 关报警中断
A2IE = 0 // 关报警中断
EN32kHz = 0 // 关闭 32kHz 输出
原因:
有两个主要的耗电大户,一个是32Khz的输出,一个是温度测量。
配置器件每隔64秒(64s)测量一次温度,通过调节晶体的负载电容,使其在指定温度达到0ppm的精度,最终达到提高时钟精度的目的。

参考:
不输出32Khz的时钟
主机关闭i2c,或者直接拉低。
手册上低功耗电流的部分

代码
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脚上。

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

本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/22998681,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号