# ds1307 **Repository Path**: chejia12/ds1307 ## Basic Information - **Project Name**: ds1307 - **Description**: 这是一个基于RT Thread驱动框架的rtc驱动程序,这个驱动使用时请关闭其他的rtc驱动设备;同时该驱动可以使用掉电不丢失的外部56字节ram - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-17 - **Last Updated**: 2026-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ds1307驱动软件包 ## 1 介绍 - DS1307 串行实时时钟 (RTC) 是一个低功耗、全二进制编码十进制 (BCD) 的时钟/日历,外加 56 字节的 NV SRAM(非易失性静态随机存取存储器) - ds1307软件包是针对RT-Thread驱动框架实现的实时时钟驱动与mtd nor驱动,遵循RT-Thread RTC框架与mtd nor框架,可以从芯片内置RTC无缝切换使用外置高精度ds1307 RTC。软件包支持实时时钟和56 字节的 NV SRAM(非易失性静态随机存取存储器)功能。 ### 1.1 目录结构 | 名称 | 说明 | | -------- | ---------- | | doc | 其他的文档 | | examples | mtd ram 的实示例代码 | | rtc_ds1307.c |源文件 | | README.md | 软件包使用说明| |SConscript|RT-Thread默认构建脚本| |LICENSE|许可证文件| ### 1.2 许可证 ds1307 软件包遵循 Apache license v2.0 许可,详见 `LICENSE` 文件。 ### 1.3 依赖 - RT-Thread 3.0+ - RT-Thread I2C设备驱动框架 - I2C总线设备 - RT-Thread RTC设备驱动框架 - 整个工程中仅仅保留一个rtc设备,ctime依赖的是rtc设备,使能了ds1307就必须失能内部rtc或其他rtc设备 ## 2 获取 ds1307软件包 使用 ds1307 package 需要在 RT-Thread 的包管理器中选择它,具体路径如下: ``` RT-Thread online packages ---> peripheral libraries and drivers ---> [*] extren rtc drivers ---> [*] ds1307:External RTC drivers fo ds1307 Version (latest) ---> ``` 然后让 RT-Thread 的包管理器自动更新,或者使用 `pkgs --update` 命令更新包到 BSP 中。 ## 3 使用 ds1307 软件包 ### 3.1 初始化 开机系统自动初始化,“**INIT_COMPONENT_EXPORT**”自动初始化。 > 注意:如果开启了芯片内部RTC,需先禁止内部RTC > > ds1307的初始化依赖于IIC总线设备,所以ds1307的初始化必须在IIC总线初始化之后 > > 使用一个线程更新秒,减小硬件交互次数 ### 3.2 使用方式 **获取当前时间** ``` time_t time(time_t *t) time_t now; now = time(RT_NULL); ``` **设置时间** ``` #define RT_DEVICE_CTRL_RTC_SET_TIME 0x11 /**< set time */ rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg); ``` **获取闹钟时间** ``` #define RT_DEVICE_CTRL_RTC_GET_ALARM 0x12 /**< get alarm */ rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg); ``` **设置闹钟时间** ``` #define RT_DEVICE_CTRL_RTC_SET_ALARM 0x13 /**< set alarm */ rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg); ``` ### 读写ds1307外部ram接口 ```c int ds1307_examples(int argc, char *argv[]) { if(argc!=2) { LOG_W("ds1307_examples "); return 0; } uint8_t buff[56] = {0}; struct rt_mtd_nor_device *ds1307ram = (struct rt_mtd_nor_device *)rt_device_find("ds1307ram"); RT_ASSERT(ds1307ram != RT_NULL); LOG_D("ID= %d", rt_mtd_nor_read_id(ds1307ram)); int start = atoi(argv[1]); for (int i = 0; i < 56; i++) { buff[i] = i+(start&0xff); } LOG_HEX("write:", 16, buff, 56); rt_mtd_nor_write(ds1307ram, 0, buff, 56); rt_mtd_nor_read(ds1307ram, 0, buff, 56); LOG_HEX("read:", 16, buff, 56); return 1; } ``` ### 3.3 msh/finsh测试 ``` msh /> msh />date 读取时间 local time: Wed Apr 22 15:13:09 2026 timestamps: 1776841989 timezone: UTC+08:00:00 设置时间 msh />date 2026 04 22 15 13 00 [29680] V/DS1307 tshell: set 26/04/22 07:13:00 tick 1776841980 [29688] V/DS1307 tshell: get 126/03/22 07:13:00 tick 1776841980 RTC: set rtc_time 1776841980. old: Wed Apr 22 15:13:26 2026 now: Wed Apr 22 15:13:00 2026 msh /> 读写ram ds1307_examples msh />ds1307_examples 2 [4903] D/DS1307 tshell: ID= 1307 [4906] D/write: tshell: 0000-0010: 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 ................ [4916] D/write: tshell: 0010-0020: 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 .............. ! [4925] D/write: tshell: 0020-0030: 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 "#$%&'()*+,-./01 [4935] D/write: tshell: 0030-0038: 32 33 34 35 36 37 38 39 23456789 [4954] D/read: tshell: 0000-0010: 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 ................ [4964] D/read: tshell: 0010-0020: 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 .............. ! [4974] D/read: tshell: 0020-0030: 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 "#$%&'()*+,-./01 [4983] D/read: tshell: 0030-0038: 32 33 34 35 36 37 38 39 23456789 msh /> ``` ## 4 注意事项 使用RT-Thread的RTC框架,RTC设备注册名称为“rtc”,注意需先屏蔽内置芯片RTC驱动。 ## 5 联系方式 - 维护:1085582540@qq.com - 主页:[https://gitee.com/chejia12/ds1307](https://gitee.com/chejia12/ds1307)