DS1302时钟模块

DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟电路, 它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。且能自动对少于31天的月份日期进行调整,支持12小时制和24小时制。
工作电压为 2.5V~ 5.5V。其内部包含一个实时时钟/日历以及一个31字节的RAM,同时采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。

DS1302时钟模块快速使用可直接使用DS1302.h文件,本部分主要介绍DS1302内部原理。

操作指南

DS1302模块主要由这几部分构成:

  • 转换寄存器(shift register)
  • 控制逻辑
  • 振荡器(晶振,oscillator)
  • 实时时钟(real time clock)
  • RAM
    如下框图:

引脚说明

  • Vcc1: Vcc1连接电池等备用电源,电能消耗特别低。在一些可以提供涓流充电功能的电路中,电源应连接到此处。

  • Vcc2:在使用过程中最主要的供电来源,而VCC1连接到备用电源,以在没有主电源的情况下保持时间和日期的数据。DS1302有限选择Vcc1和Vcc2中的更大电压者提供电源,只有当Vcc2超出Vcc1至少0.2V时,Vcc2才会给DS1302供电。

  • SCLK(Serial Clock Input):SCLK用于同步串行通信接口上的数据传输。

  • I/O:I O引脚是3线接口的双向数据引脚。

  • RST:当读写时,必须将复位引脚电平输出更改为高电平。

命令字节

DS1302的操作顺序如下:

  • 选择需要访问的寄存器(利用地址),并设置需要进行的操作(读/写 )。
  • 访问相应时钟/日历寄存器或者RAM,并传输数据。

而访问地址、传输数据通过命令字节来实现。

命令字节如下图所示。每次数据传输均由命令字节启动。

当需要读写时,最高位必须为逻辑1(即Bit 7),否则无法读写。Bit 6代表访问的内容是时钟和日历(逻辑0),还是RAM(逻辑1)。剩余的Bit 1到Bit 5指定要输入/输出的寄存器。最低位指定具体的操作(读:逻辑1;写:逻辑0)。始终从最低位(bit 0)开始输入命令字节。

1.RAM命令

寄存器名 命令字节 范围 位内容
D7 D6 D5 D4 D3 D2 D1 D0
写保护 8EH 8FH 00H~80H WP
涓流充电 90H 91H - TCS DS RS
时钟突发 8EH BFH - -
RAM突发 BEH FFH - -
RAM0 C0H C1H 00H~FFH RAM数据
…… …… …… 00H~FFH
RAM30 FCH FDH 00H~FFH

2.日历时钟寄存器命令

寄存器名 命令字节 范围 位内容
D7 D6 D5 D4 D3 D2 D1 D0
80H 81H 00~59 CH 秒的十位 秒的个位
82H 83H 00~59 0 分的十位 分的个位
84H 85H 01~12或00~23 12/24 0 AM/PM或者12进制 小时十位 小时个位
86H 87H 01~31 0 0 日的十位 日的个位
88H 89H 01~12 0 0 0 0/1 月的个位
星期 8AH 8BH 01~07 0 0 0 0 0 星期几序号
8CH 8DH 00~99 年份十位 年份个位

复位与时序控制

数据传输可以通过命令字节来控制,但是需要遵循一定时序,从而保证数据有条不紊的传输。简而言之,需要遵循:

  • 数据传输前,需要设置RST为高电平,直到传输完毕,设置RST为低电平,结束传输。
    RST输入有两个作用。第一,打开控制逻辑(该部分允许访问地址/命令序列的移位寄存器。)第二,RST信号提供了终止单字节或者多字节数据传输的方法。

  • 数据开始传输前,在设置RST为高电平前,需将SCLK设置为低电平。
    时钟周期是下降沿跟着上升沿的序列。在时钟处于上升沿时数据才被传输,在时钟的下降沿时停止输出。因此当RST设置为高电平开始传送数据前,SCLK必须设置为低电平。

  • 如果RST输入为低电平,则所有的数据传输终止,并且IO引脚变为高阻抗状态,因此数据传输过程中,RST要一直置为1。

  • 上电时,RST必须为逻辑0,直到VCC> 2.0V。此时RST也必须被置为逻辑1状态时,SCLK为逻辑0。

数据传输时序如下图所示。

数据输入

在输入写命令字节的八个SCLK周期之后,在接下来的八个SCLK周期的上升沿输入数据字节。如果其他SCLK周期意外发生,则将被忽略。数据从bit 0开始输入。

数据输出

在输入读命令字节的八个SCLK周期之后,在接下来的八个SCLK周期的下降沿输出一个数据字节。注意,要发送的第一个数据位出现在写入命令字节的最后一位之后的第一个下降沿。只要RST保持高电平,其他SCLK周期就可能意外地重传数据字节。
该操作允许批量读写模式(Contibuous Burst Mode)下的读取功能。
同样,在SCLK的每个上升沿,IO引脚均处于三态(高电平、低电平、高阻态)。仍旧从位0开始输出数据。

BURST MODE批量读写模式

可以通过寻址小数点后的第31个地址(地址/命令位1至5 =逻辑1)来为时钟/日历或RAM寄存器指定批量读写模式。

如前所述,bit 6指定访问对象为时钟还是RAM,而bit 0指定读还是写操作。时钟/日历寄存器中的位置9到31或RAM寄存器中的位置31没有数据存储容量。批量模式下的读取或写入是从地址0H的bit 0开始。

在批量模式下写入时钟寄存器时,必须写入前八个寄存器,以便传输数据。但是,在以批量模式写入RAM时,无需写入所有31个字节即可传输数据。不管是否写入所有31个字节,写入的每个字节都将传输到RAM。

数据储存结构

时钟/日历寄存器

时钟/日历包含在七个写/读寄存器中,如下图所示。时钟/日历寄存器中包含的数据采用二进制编码。

时钟停止(HALT)标志

秒寄存器(上图左一,sec)的bit 7定义为时钟停止标志。当该位置1时,时钟振荡器停止工作,DS1302进入低功耗待机模式,电流消耗小于100纳安。当该位写入逻辑0时,时钟将启动工作。初始开机状态并没有被定义。

AM-PM/12-24制显示模式设置

时寄存器(时钟寄存器左三,HR)第七位(bit 7)用来选择12小时制还是24小时制的时间显示模式。当为逻辑1时,为12小时制;当为逻辑0时,为24小时制。

在12小时制下,时寄存器第五位(bit 5)决定AM/PM,其中逻辑1代表PM(下午),而逻辑0为AM(上午)。

在24小时制下,第五位(bit 5)代表第几个12时。(0:011;1:1223)

写保护位

控制寄存器(CONTROL,上图左边第八个)的位7是写保护位。前七个位(位0 – 6)被强制为0,并且在读取时始终为0。在对时钟或RAM进行任何写操作之前,位7必须为0。当高电平时,写保护位可防止对其他任何寄存器的写操作。初始开机状态并未定义,因此,在尝试写入设备之前,应将最高位置0。

涓细电流充电设置寄存器

该寄存器用来配置备用电源的充电选项。其中高四位(TCS)只有在1010的情况下才能使用充电选项;低四位的情况,与DS1302内部电路配置,这里不做详细讲述。

时钟/日历批量读写模式

时钟/日历命令字节指定批量模式操作。在这种模式下,可以从地址0的位0开始连续读/写前八个时钟/日历寄存器(上图)。
如果指定了时钟/日历批量读写模式,同时将写保护位设置为高电平,则这八个时钟/日历寄存器不会发生任何的数据传输(包括控制寄存器)。

涓细电流无法在该模式下使用。

在读取时钟批量模式开始时,当前时间数据实际被传输到第二组寄存器。从这组辅助寄存器中读取时间信息,而时钟寄存器可以继续运行。这样在读取期间更新主寄存器的情况下,无需重新读取寄存器。

RAM

静态RAM是在RAM地址空间中连续寻址的31 x 8字节。

RAM批量模式

RAM命令字节指定批量操作模式。在这种模式下,可以从地址0的位0开始连续读取或写入31个RAM寄存器。

文档更新时间: 2020-07-30 08:13   作者:Astilbe