复位和时钟控制 (RCC)

RCC(Reset and Clock Control)模块负责芯片全局的时钟生成与复位管理,是系统可靠运行的基础。其主要功能包括:

  • 复位控制:统一管理 POR、BOR、WDG、软件触发等多种复位来源,并记录本次启动的复位原因,方便调试与故障定位。

  • 时钟管理:支持多种时钟源(外部晶振、内部 RC 振荡器、PLL),可对各模块独立配置时钟源和分频比,兼顾性能与功耗。

  • 时钟门控:未使用的时钟可动态关闭,避免不必要的动态功耗。

复位控制

简介

芯片支持多种类型的复位信号,包括 POR(Power-On Reset)、CHIP_EN reset、BOR(Brown-Out Reset)、System reset、WDG reset 等,不同复位类型的触发条件和作用范围各不相同,覆盖从硬件上电到软件触发的不同场景。

复位架构

Reset 整体架构图如下:

RTL8721Dx:
../../_images/rcc_reset_diagram_dplus.svg

复位类型

下表列出了芯片支持的复位类型及其触发条件。可以通过 启动原因寄存器 来获取本次复位的类型。

RTL8721Dx:

Reset 类型

描述

POR

上电时由稳压器产生的上电复位。参考数据手册的 Power Sequence 章节,获取 POR 的电源时序。

CHIP_EN reset

外部 CHIP_EN 引脚拉低时产生的外部上电复位。参考数据手册的 Power Sequence 章节,获取 CHIP_EN reset 的电源时序。

BOR

检测到掉电(BOR)时由稳压器产生的掉电复位。参考数据手册的 Power Sequence 章节,获取有关 BOR 的电源时序。

System reset

CPU 写系统复位寄存器触发的系统复位。参考 System reset

Warm reset

通过写 CPU 寄存器触发的热复位。

IWDG reset

独立看门狗(IWDG)超时产生的复位。参考 WDG

WDG reset

系统看门狗(WDG)超时产生的复位。参考 WDG

DSLP

Deep sleep 产生的复位。

System Reset

System reset 是芯片提供的一种安全地对系统进行 软件 reset 的 reset 方式。所有 CPU 均可以通过以下序列进行 System Reset:

RTL8721Dx:
  1. REG_SW_RST_TRIG 寄存器 写入 0x96969696 以解锁对 REG_SW_RST_CTRL 寄存器的写控制。

  2. 获取当前 CPU 的 CPU ID,对 REG_SW_RST_CTRL 寄存器中对应 CPU 的控制位写 1。

  3. REG_SW_RST_TRIG 寄存器 写入 0x69696969 以触发 System reset。

备注

寄存器描述参考 系统复位寄存器

Plfm1 复位

Plfm1 reset 用于芯片二合一模式下 reset 位于 platform 1 的模块。

RTL8721Dx:

不支持。

复位域

各个类型的 reset 的作用域如下:

RTL8721Dx:

范围

RTC

备份寄存器,Retention RAM, Wake pin, Trap pin

其他外设

CHIP_EN

Y

Y

Y

POR

Y

Y

Y

BOR

N

N

Y

DSLP

N

N

Y

System reset

N

N

Y

IWDG reset

N

N

Y

WDG reset

N

N

Y

  • Y: 表示当复位事件发生时,相应的模块会被复位。

  • N: 表示当复位事件发生时,相应的模块不会被复位。

备注

  • Warm reset 在系统启动时会被配置为复位所有 CPU 而不仅仅是本地 CPU。参考 Bootloader 中的 Peripheral_Reset() 函数获取 warm reset 会复位的外设。

时钟控制

芯片的时钟系统由外部振荡器、内部 RC 振荡器和 PLL 三类时钟源构成,通过时钟选择与分频机制灵活分配至各功能模块。

合理配置时钟源可以在性能与功耗之间取得平衡:高性能外设使用 PLL 输出的高频时钟,低功耗模块则可切换至内部 RC 振荡器以节省能耗。

时钟树

芯片的时钟树如下所示。不同的时钟源可用于驱动不同的功能,每个时钟源可以在不使用时独立开启或关闭,以优化功耗。

RTL8721Dx:
../../_images/rcc_clock_diagram_dplus.svg

时钟源

芯片支持的时钟源及其用途如下:

RTL8721Dx:
  • 三个外部振荡器:

    • XTAL40M:直接用于外设或分频后使用。

    • XTAL20M:用作 UART 和 LOGUART 的可选时钟源之一。

    • XTAL128K:专用于分频后的 BT_32K

  • 四个内部振荡器:

    • OSC4M:为 KM0 提供 4MHz 时钟或为外设提供 2MHz 时钟(分频后)。

    • OSC131K:用作 SDM 的输入以及 Cap-Touch 和 Key-Scan 的时钟。

    • OSC100K:位于 AON 域中,用于驱动 IWDG 和 AON 模块。

    • SDM_32K:用于 Timer 等模块。

  • 四个独立的 PLL:每个都可以配置为整数或小数比率。

    • PLL_SYS300MHz ~ 600MHz,分频后为 KM4、KM0 和高性能外设提供时钟。

    • SPIC_CK:专用于 SPIC 和 PSRAM,与 PLL_SYS 频率相同但相位不同。

    • SPIC_PS_CK:专用于 SPIC 和 PSRAM 省电。

    • 一个专用于 Wi-Fi 的 PLL320MHz

寄存器

系统复位寄存器

以下寄存器用于系统软件复位。

RTL8721Dx:

系统复位寄存器的基址是 0x41008000

Name

Offset

Access

Description

REG_SW_RST_CTRL

0x260

R/W

系统复位控制寄存器

REG_SW_RST_TRIG

0x264

W

系统复位触发寄存器

REG_SW_RST_CTRL

  • 名称 : 系统复位控制寄存器

  • 大小 : 32 位

  • 地址偏移 : 0x260

  • 读/写访问 : 读/写

符号

访问

复位

描述

31

LSYS_BIT_KM4_SYS_RST

R/W

0

用于 KM4 复位系统

30

LSYS_BIT_KM0_SYS_RST

R/W

0

用于 KM0 复位系统

29:0

RSVD

N/A

0

保留,用于复位域控制

REG_SW_RST_TRIG

  • 名称 : 系统复位触发寄存器

  • 大小 : 32 位

  • 地址偏移 : 0x264

  • 读/写访问 : 只写

符号

访问

描述

31:0

LSYS_MASK_TRIG_RST

W

系统复位触发寄存器

  • 写入 0x96969696 以启用 REG_SW_RST_CTRL 寄存器的写入。

  • 如果已设置 REG_SW_RST_CTRL 寄存器,写入 0x69696969 以触发系统复位。

  • 写入其他值将清除 REG_SW_RST_CTRL 寄存器的位 [31:30]。

启动原因寄存器

以下寄存器用于提供启动原因。

备注

在系统启动后, Bootloader 将会清除此寄存器,并将启动原因保存到 REG_LSYS_BOOT_REASON_SW 寄存器。

RTL8721Dx:

启动原因寄存器的基址是 0x41008000

REG_BOOT_REASON_HW

  • 名称 : 启动原因寄存器

  • 大小 : 32 位

  • 地址偏移 : 0x20

  • 读/写访问 : 读/写(写 1 清除)

符号

访问

复位

描述

31:10

RSVD

保留

9

KM0_WARM2PERI_RSTF

R/W1C

0

当 KM0 热复位系统时,此位将被设置为 1。写入 1 清除。

8

KM4_WARM2PERI_RSTF

R/W1C

0

当 KM4 热复位系统时,此位将被设置为 1。写入 1 清除。

7

WDG2_RSTF

R/W1C

0

当 WDG2 复位系统时,此位将被设置为 1。写入 1 清除。

6

WDG1_RSTF

R/W1C

0

当 WDG1 复位系统时,此位将被设置为 1。写入 1 清除。

5

WDG0_RSTF

R/W1C

0

当 WDG0 复位系统时,此位将被设置为 1。写入 1 清除。

4

IWDG_RSTF

R/W1C

0

当 IWDG 复位系统时,此位将被设置为 1。写入 1 清除。

3

KM0SYS_RSTF

R/W1C

0

当 KM0 触发系统复位时,此位将被设置为 1。写入 1 清除。

2

KM4SYS_RSTF

R/W1C

0

当 KM4 触发系统复位时,此位将被设置为 1。写入 1 清除。

1

DSLP_RSTF

R/W1C

0

从深度睡眠(DSLP)退出时,此位将被设置为 1。写入 1 清除。

0

BOR_RSTF

R/W1C

0

当 BOR 复位系统时,此位将被设置为 1。写入 1 清除。