复位和时钟控制 (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_SYS:300MHz ~ 600MHz,分频后为 KM4、KM0 和高性能外设提供时钟。

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

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

    • 一个专用于 Wi-Fi 的 PLL:320MHz

寄存器

系统复位寄存器

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

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 清除。