【超实用手册】DS1337芯片引脚功能全解析,一目了然!

本文详细介绍了DS1337芯片的时钟/日历功能、I2C通信以及寄存器结构,包括报警设置、控制寄存器的使用和I2C接口参数,为开发者提供硬件设计和通信指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、芯片功能及引脚

  DS1337串行实时时钟是一种低功耗时钟/日历,具有两个可编程的时间报警和一个可编程方波输出。

  主控芯片通过I2C总线读写DS1337芯片内部的寄存器。时钟/日历提供秒、分、小时、日、日期、月和年信息,对于少于31天的月份,将自动调整月末日期,包括对闰年的更正,有24小时或12小时格式。当VCC在1.8V~5.5V之间时,可以通过I2C读取芯片内部寄存器的数据,在1.8V以下不保证I2C正常工作,低至1.3V,时钟保持功能可保证正常工作。

在这里插入图片描述

图1 手册推荐使用方式

  DS1337引脚功能如下表所示:

表1 DS1337芯片引脚
引脚功能
X1、X2标准32.768kHz石英晶体的连接。外部32.768kHz振荡器也可以驱动DS1337,在这种配置中,X1引脚连接到外部振荡器信号,X2引脚悬空。
INTA‘启用中断输出后,当时间/日期与报警寄存器中设置的值匹配时,INTA被置位为低电平。 此引脚为开漏输出,需要一个外部上拉电阻。如果不使用,此引脚可以悬空。
SCLI2C通信的串行时钟线。
SDAI2C通信的双向串行数据线。
SQW/INTB‘可编程方波或中断输出信号,此引脚为开漏输出,也需要一个外部上拉电阻如果不使用,此引脚可以悬空。
VCCVCC在1.8V~5.5V之间时,主机可以通过I2C读取芯片内部寄存器的数据,在1.8V以下不保证I2C正常工作,低至1.3V,时钟保持功能可保证正常工作。

  开发板上该芯片的原理图如下所示,中断管脚和方波编程输出引脚均悬空处理,没有使用,这是因为FPGA一般不需要中断功能。外部接入32.768KHz的晶振作为时钟参考信号,使用了I2C通信接口。

在这里插入图片描述

图2 DS1337原理图

  该芯片的内部功能框图如下所示,外部晶振引脚X1、X2与内部构成一个振荡电路,生成芯片所需要的参考时钟信号。1Hz信号猜测就是提供给计时器作为最基本的秒计数器的参考时钟。

  右侧的模块用于生成可编程的方波输出和中断信号,左下角模块应该是I2C从机的解析模块,将接收的数据拆解出来传输给后面模块进行存储,同时也可以将需要输出的寄存器数据以I2C时序格式输出。

在这里插入图片描述

图3 DS1337内部功能框图

2、寄存器

  根据该芯片的功能,大致能够猜测其内部寄存器的种类,能够记录年、月、日、时、分、秒,肯定有相关的寄存器。还能够实现报警功能,就好比闹钟一样,那是不是还应该有一组设置目标时间的寄存器呢?还应该有中断、输出方波频率相关的寄存器吧。

  该芯片寄存器分布如下图所示,用七个寄存器来存储年、月、日、星期、时、分、秒,如图中黄色寄存器。

  该芯片的报警方式有两种,一种根据时、分、秒进行报警,如图中蓝色寄存器用于存储报警时间。另一种根据日期报警,如图中粉色寄存器用于存储报警的年月日信息。

在这里插入图片描述

图4 寄存器表格

2.1、时间寄存器

  时间和日历寄存器(黄色部分寄存器)的内容采用BCD格式,星期几寄存器在晚上0时后递增。对应于星期几的值由用户定义,但必须是连续的(如果1表示星期日,则2表示星期一,依此类推),不合逻辑的时间和日期输入会导致未定义的操作。

  DS1337可以在12小时或24小时模式下运行。小时寄存器的位6定义为12小时或24小时模式选择位,高电平表示选择12小时模式。在12小时模式下,位5是AM/PM位,逻辑高电平为PM(也就是表示下午的时间段)。 如果使用24小时模式,那么就需要6位BCD码才能存下0~23的数据,此时位5也用于存储小时数据。

  每当小时寄存器的位6状态翻转时,包括报警在内的所有小时寄存器的值都必须重新初始化。年份寄存器只有8位空间,能够存储的BCD码范围是[0,99],当年份寄存器溢出时,月份寄存器的第7位(称为世纪位)就会置一。

2.2、报警寄存器

  DS1337包含时间/日期两个报警,时间报警可以通过写入寄存器07h–0Ah来设置,日期报警可以通过写入寄存器0Bh–0Dh来设置。报警可以编程(通过控制寄存器的INTCN位)在两种不同模式下工作——每个报警可以驱动自己单独的中断输出,或者两个报警都可以驱动一个公共中断输出。时间/日期报警寄存器的位7是屏蔽位。

  当每个报警的所有屏蔽位都为低电平时,仅当计时寄存器00h–06h中的值与日期时间报警寄存器中存储的值匹配时才会报警。报警的方式于下图中的表格对应的寄存器位确定,比如当A1M4~AIM0全为1时,那么DS1337每秒就会报警一次。

在这里插入图片描述

图5 报警掩码位

  上表未列出的配置会导致不合逻辑的操作,DY/DT位(报警日/日期寄存器的位6)控制该寄存器的位0–5中存储的报警值是反映星期几还是月几。如果DY/DT写入低电平,报警是与月份日期匹配的结果,否则报警表示是与星期几匹配的结果。

  当RTC寄存器值与报警寄存器设置匹配时,相应的报警标志(A1F或A2F)位设为高电平,这些位将保持高电平,直到用户写入低电平。如果相应的报警中断使能(控制寄存器中的A1IE或A2IE)设置为高电平,报警条件会把中断输出(INTA或SQW/INTB)引脚拉低,从而输出中断信号。

2.3、控制和状态寄存器

  DS1337有两个额外的寄存器(控制和状态),用于控制RTC、报警和方波输出。控制寄存器各位的含义如下表所示。

表2 控制寄存器
名称含义
bit7EOSC‘该位低电平时启动振荡器,设为逻辑高电平时振荡器停止工作。首次通电时,该位为低电平。
bit 60保留位
bit 50保留位
bit 4RS2RS2、RS1控制方波输出的频率,首次通电时,RS2、RS1均为高电平。
bit 3RS1RS2、RS1控制方波输出的频率,首次通电时,RS2、RS1均为高电平。
bit 2INTCN中断控制位,该位控制两个报警和中断输出引脚之间的关系。当INTCN位设为高电平时,计时寄存器和报警2寄存器(ALARM1)寄存器之间的匹配会激活INTA引脚(前提是报警已使能),计时寄存器和报警2寄存器(ALARM2)之间的匹配会激活SQW/INTB引脚(前提是报警已使能)。当INTCN位设为低电平时,SQW/INTB引脚输出方波。首次上电时,该位为低电平。
bit 1A2IE报警2中断使能,当设置为高电平时,该位允许状态寄存器中的报警2标志(A2F)位拉低INTA引脚(当INTCN = 0时)或拉低SQW/INTB引脚(当INTCN = 1时)。当A2IE位设为低电平时,A2F位不会发出中断信号。 首次通电时,该位为低电平。
bit 0A1IE报警1中断使能,设置为高电平时,该位允许状态寄存器中的报警1标志(A1F)位拉低INTA引脚。当A1IE位设为低电平时,A1F位不会启动INTA信号。 首次上电时,该位为低电平。

  其中RS2和RS1两位数据控制SQW引脚输出方波的频率,RS2、RS1的真值表如下表所示。首次上电时,这两位寄存器数据均为高电平,默认SQW引脚输出32.768KHz频率的方波。

表3 RS2与RS1真值表
INTCNRS2RS1SQWA2IE
0001HzX
0014.096KHzX
0108.192KHzX
01132.768KHzX
1XXA2F‘1

  当INTCN位为1时,SQW/INTB引脚就作为中断引脚了,不会输出方波了,此时RS2、RS1的状态就不用关心了。

  下表是状态寄存器的数据,体现芯片内部的工作状态,该寄存器各位的含义如下表所示。

表4 状态寄存器含义
名称含义
bit7OSF振荡器停止标志,振荡器停止时,该位设为高电平。这几种情况可能导致该位为高电平:芯片第一次上电、VCC上的电压不足以支持振荡、EOSC位为低电平、对晶体的外部影响(例如噪声、泄漏等)。该位保持高电平,直到写入低电平。
bit 60保留位
bit 50保留位
bit 40保留位
bit 30保留位
bit 20保留位
bit 1A2F报警2标志位,高电平表示时间与报警2寄存器相匹配。根据控制寄存器中INTCN位的状态,该标志可用于在INTA或SQW/INTB上产生中断。 如果INTCN位设为低电平,A2F为高电平(A2IE位也为高电平),INTA引脚变为低电平。如果INTCN位设为高电平,A2F为高电平(A2IE位也为高电平),SQW/INTB引脚变为低电平。写入低电平时,A2F清零,该位只能写入低电平,写入高电平无效。
bit 0A1F报警1标志位、高电平表示时间与报警1寄存器相匹配。如果A1IE位也是高电平,INTA引脚变为低电平。 写入低电平时,A1F清零,该位只能写入低电平。

  DS1337内部的寄存器就这么多了,也比较简单,根据功能主要就是计时和报警。计时相关寄存器采用BCD码编码,报警的时候可以分为星期报警和日期报警,根据对应寄存器设置确定。最后通过控制寄存器去控制晶体振荡器的工作、两个报警中断的使能、中断2驱动INTA还是INTB引脚。最后状态寄存器可以获取晶体振荡器的工作状态,报警中断是否触发和清零。

  要注意控制寄存器很多位第一次上电是不会正常工作的,需要用户写入初始状态。在对寄存器进行读写之前,最好通过状态寄存器获取晶体振荡器的状态,或者直接向控制寄存器中写入有效数据。

  如果使用FPGA控制,是不需要使用中断的,而前面原理图可知方波输出引脚也是悬空的,所以可以直接向控制寄存器写入8’h80,之后再读取状态寄存器的数据,确定是否为8’h80,确保晶体振荡器工作。

3、I2C接口

  关于I2C接口时序的具体含义,可以查看前文前文对I2C时序的具体讲解,本节只对DS1337的I2C相关功能做讲解,不对I2C本身时序做过多赘述。

  对于I2C的从机,最重要的就是器件地址,与人的身份证号一致,DS1337的器件地址就是7’b1101000

  手册中表示DS1337芯片支持I2C的突发读写模式,对应的时序图如下所示,前文设计的I2C驱动模块可以轻松实现,既然支持连续读写,那应该也是支持单字节数据读取的。

在这里插入图片描述

图6 连续写时序

在这里插入图片描述

图7 连续读时序

  DS1337的I2C读写时序就上述这么多了,接下来需要知道这颗芯片对I2C的一些时间参数的取值,比如I2C时钟频率、建立时间、保持时间、两次读写之间的时间间隔有没有限制等,DS1337的I2C接口参数如下图所示。

在这里插入图片描述

图8 I2C接口时序参数

  上图中的各个时序参数可以在下表中查看具体数值。

在这里插入图片描述

图9 I2C接口时序参数

  由图可知DS1337的I2C支持快速和标准模式,串行时钟SCL频率可以位于0~400KHz。而建立时间Tsu和保持时间Thd在快速模式下都小于1us,I2C的数据都是在时钟SCL低电平中部赋值,在SCL高电平中部采集数据线状态,所以这两个时间要求一般不会违例。

  这里并没有说明芯片内部对两次读写操作的最小间隔时间,但是上述表格提供了I2C接口STOP条件和START条件之间的最小间隔时间(Bus Free Time Between a STOP and START Condition)。在快速模式(Fast mode)下,这个时间是1.3微秒(μs),而在标准模式(Standard mode)下,这个时间是4.7微秒。这个时间是指在发送一个STOP条件后,到发送下一个START条件之前,总线上必须保持空闲的时间。

  所以我们在读写DS1337内部寄存器数据时,必须满足这个最小值,保证稳定读写数据。

  关于DS1337芯片的讲解就这么多了,通过前文也能够看出该芯片还是比较简单的,对应的寄存器就分为时间和报警、控制及状态寄存器。I2C时序也与前文介绍的一致,该芯片可以输出4种频率的方波信号,具体频率通过控制寄存器的RS2和RS1进行设置。

  可以在公众号后台回复“DS1337手册“(不包括引号)获取该芯片手册,下文通过FPGA去读取DS1337的数据进行显示。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电路_fpga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值