Files
bishe-STM32/DS1302时序.md
T
2026-05-01 20:29:02 +08:00

89 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
好的,这张图片详细说明了DS1302实时时钟(RTC)模块的工作原理、读写时序和寄存器定义。下面我将分部分进行文字描述。
### 1. 总体概述
这张图片是DS1302芯片的技术资料片段,主要包含两部分:
* **读/写时序图 (Timing Diagram)**:展示了微控制器如何通过三线串行接口与DS1302进行单字节的读取和写入操作。
* **寄存器地址/定义表 (Register Map)**:列出了存储时间、日期等信息的各个寄存器的地址、位定义和取值范围。
---
### 2. 工作原理与读/写时序
这部分解释了DS1302的通信协议。
**核心通信方式:**
* **三线串行接口**:DS1302使用三根信号线与微控制器(如单片机)通信:
1. **RST (Reset/Enable)**:复位/使能引脚。当RST为高电平时,DS1302被使能,可以进行通信。通信结束后,RST应恢复为低电平。
2. **SCLK (Serial Clock)**:串行时钟引脚。由微控制器产生,用于同步数据的传输,在每个时钟脉冲的**上升沿**采样数据。
3. **I/O (Input/Output)**:双向数据引脚。数据的输入和输出都通过这根线完成。
* **数据格式**:时间、日期数据均采用**BCD码 (Binary-Cododed Decimal)** 格式存储。简单来说,一个字节(8位)的高4位表示十位上的数字,低4位表示个位上的数字。例如,数字59在BCD码中表示为 `0101 1001`。
**时序图详解:**
#### a. SINGLE BYTE READ (单字节读取)
此过程用于从DS1302的某个寄存器中读取一个字节的数据。
1. **启动通信**:微控制器将 **RST** 引脚拉高,使能DS1302。
2. **发送命令字节**:微控制器通过 **I/O** 线发送一个8位的命令字节。这个命令字节在8个 **SCLK** 时钟脉冲的驱动下逐位传输。
* 命令字节的格式为 `R/W A0 A1 A2 A3 A4 R/C 1`。
* **R/W (Bit 7)**:读写控制位。对于读取操作,该位必须为 **1**。
* **A0-A4 (Bit 1-5)**:寄存器地址位。
* **R/C (Bit 6)**:寄存器类型选择位。选择时钟/日历寄存器或RAM寄存器。
* **Bit 0**:必须为 **1**。
* 综合来看,一个读取命令的地址字节,其最高位和最低位都必须是1。例如,读取秒寄存器(地址81h)的命令字节是 `1000 0001`。
3. **接收数据字节**:在发送完命令字节后的接下来8个 **SCLK** 时钟脉冲期间,DS1302会通过 **I/O** 线将其寻址寄存器中的数据逐位发送给微控制器。此时,I/O线的控制权从微控制器转移到DS1302。
4. **结束通信**:数据接收完毕后,微控制器将 **RST** 引脚拉低,结束本次通信。
#### b. SINGLE BYTE WRITE (单字节写入)
此过程用于向DS1302的某个寄存器写入一个字节的数据。
1. **启动通信**:微控制器将 **RST** 引脚拉高。
2. **发送命令字节**:微控制器通过 **I/O** 线发送一个8位的命令字节。
* **R/W (Bit 7)**:读写控制位。对于写入操作,该位必须为 **0**。
* 其余地址位(A0-A4, R/C)用于选择要写入的目标寄存器。
* **Bit 0**:必须为 **0**。
* 综合来看,一个写入命令的地址字节,其最高位和最低位都必须是0。例如,写入秒寄存器(地址80h)的命令字节是 `1000 0000`。
3. **发送数据字节**:在发送完命令字节后的接下来8个 **SCLK** 时钟脉冲期间,微控制器继续通过 **I/O** 线将要写入的数据(D0-D7)逐位发送给DS1302。
4. **结束通信**:数据发送完毕后,微控制器将 **RST** 引脚拉低,结束本次通信。
---
### 3. 寄存器地址/定义
这张表详细定义了DS1302内部各个寄存器的功能。
* **READ / WRITE**:分别列出了读取和写入某个功能寄存器时需要使用的十六进制地址。可以看出,同一功能的写地址通常是读地址减1(例如秒寄存器:读地址`81h`,写地址`80h`)。这实际上是因为命令字节的最低位(Bit 0)不同。
* **BIT 7 - BIT 0**:描述了一个字节内每一位(或某几位)的含义。
* **RANGE**:表示该寄存器存储数值的有效范围。
**主要寄存器解析:**
* **秒 (Seconds, 80h/81h)**:
* `BIT 7`: **CH (Clock Halt)**。当此位为1时,时钟振荡器停止工作,时钟暂停,可以降低功耗。设为0时正常工作。
* `BIT 6-4`: 秒的十位 (10 Seconds)。
* `BIT 3-0`: 秒的个位 (Seconds)。
* 范围:00-59。
* **分 (Minutes, 82h/83h)**:
* `BIT 6-4`: 分的十位 (10 Minutes)。
* `BIT 3-0`: 分的个位 (Minutes)。
* 范围:00-59。
* **时 (Hour, 84h/85h)**:
* `BIT 7`: **12/24** 模式选择。为1时是12小时制,为0时是24小时制。
* **12小时制下**:`BIT 5` 为 **AM/PM** 标志(1=PM, 0=AM),`BIT 4` 是小时的十位,`BIT 3-0` 是小时的个位。
* **24小时制下**:`BIT 5-4` 是小时的十位,`BIT 3-0` 是小时的个位。
* 范围:1-12 (12小时制) 或 0-23 (24小时制)。
* **日 (Date, 86h/87h)** / **月 (Month, 88h/89h)** / **星期 (Day, 8Ah/8Bh)** / **年 (Year, 8Ch/8Dh)**:这些寄存器同样采用BCD码格式存储对应的日期信息。
* **写保护 (Write Protect, 8Eh/8Fh)**:
* `BIT 7`: **WP (Write Protect)**。当此位为1时,所有时间、日期寄存器被保护,无法写入,防止数据被意外修改。要更新时间,必须先将此位清零。
* **涓流充电 (Trickle Charge, 90h/91h)**:此寄存器用于配置对备用电池或超级电容的涓流充电功能,图中只列出了其地址,具体位定义不完整。
**总结**,这张图是DS1302芯片的核心使用说明,它清晰地定义了如何通过一个精确的时序协议来读写芯片内的寄存器,从而实现对实时时钟的设置和读取。
![image-20260206145924158](image/image-20260206145924158.png)