AHB 总线
AHB(Advanced High-performance Bus)是一种在 ARM 体系结构中广泛使用的高性能总线标准,主要用于连接各种处理器和外设。它是 AMBA(Advanced Microcontroller Bus Architecture)的一部分,AMBA 是 ARM 设计的总线标准,用于增强不同模块之间的通信。
AMBA 架构通过不同的总线协议(AXI、AHB、APB、ACE 和 ATB),提供了从高带宽、高性能的数据传输到低功耗、简单控制的各种通信方式。设计师可以根据具体应用的需求,选择适合的总线类型,以优化性能、功耗和系统复杂度。
GD32F407xx 微控制器框图
模块分析:
1.ARM Cortex-M4 Processor
- 处理器核心,最高频率为 168MHz,负责执行代码和处理数据。
- TPIU:核心支持 JTAG/SWD 调试接口,便于调试和编程。
- TPIU(Trace Port Interface Unit)是一种用于调试和追踪的接口单元。它可以将处理器的调试和追踪信息输出到外部调试器或分析仪中,以帮助开发人员进行软件调试和性能分析。
- 通过 AHB(Advanced High-performance Bus) 总线与其他模块相连,AHB 最大频率也为 168MHz。
2.存储器模块
- 包括 Flash Memory(闪存)、SRAM0、SRAM1 和 TCMSRAM,用于存储程序代码、数据和高速缓存。
- FMC(Flash Memory Controller) 用于控制闪存的访问。
3.DMA(Direct Memory Access)控制器
- 包括 DMA0 和 DMA1,用于在外设和存储器之间进行数据传输,而不占用处理器资源。
- 通过 AHB总线 直接访问存储器和外设。
4.外设接口
- 包括 USBHS、ENET(以太网接口) 和 EXMC(外部存储控制器),可以连接外部设备和网络。
- AHB1外设和AHB2外设通过 AHB接口矩阵连接主总线,这些外设包括 GPIO(通用输入输出)、CRC(循环冗余校验)、BKP SRAM(备用SRAM)、TRNG(真随机数生成器)、DCI(数字摄像接口)等。
5.APB总线(Advanced Peripheral Bus)
- APB1 和 APB2 两条总线用于连接相对低速的外设。
- APB1 包括 UART、I2C、SPI 等串行通信接口、I2S 音频接口以及定时器(TIMER)等。
- APB2 连接 ADC(模数转换器)、SPI0、USART、SDIO(SD卡接口)等外设模块。
6.电源管理模块
- 包括 LDO(低压差稳压器)、PMU(电源管理单元)、POR/PDR(上电复位/掉电复位)等,用于管理芯片的电源供应和复位。
- 支持多个电源域,以降低功耗并提供稳定的电源管理。
7.时钟和振荡器
- 包括 HXTAL(高频晶振)、LXTAL(低频晶振)、IRC16M(16MHz内部时钟)和 IRC32K(32kHz内部时钟)。
- 时钟树由 RCU(复位和时钟控制器)负责,生成整个系统所需的时钟信号,支持多种时钟源和分频选项。
8.其他模块
- SAR ADC(逐次逼近模数转换器):用于模拟信号的采集和转换。
- DAC(数模转换器):将数字信号转换为模拟信号。
- LVD(低电压检测):用于监控系统电压是否在安全范围内。
- RTC(实时时钟):用于时间和日期的管理。
9.AHB和APB总线接口矩阵
- 主要通过 AHB总线矩阵 和 APB总线接口 将不同的外设模块连接到主总线上,从而实现灵活的数据传输。
- AHB总线用于高速外设和存储器,APB总线用于较低速的外设。
时钟
在 ARM Cortex-M 微控制器(例如 ARM32 架构)中,时钟系统是核心模块之一,负责为整个系统和各个外设提供时钟信号。时钟信号是微控制器正常运行的基础,时钟系统通常包括多个时钟源、分频器和控制模块。
在 ARM 微控制器中,几乎每个操作都需要一个时钟信号来驱动。这是因为时钟信号在微控制器中用于同步操作,确保每一步执行都有明确的时间基准。
GD32F407xx 时钟树结构图
详细介绍:
1.时钟源
- 外部时钟(HXTAL):这是一个高频晶振输入,通常可以在 4 到 32 MHz 之间。它被用作系统主时钟的外部来源。
- 内部振荡器(IRC16M 和 IRC48M):这是微控制器内部集成的振荡器,IRC16M 提供 16 MHz 时钟源,而 IRC48M 提供 48 MHz 的固定时钟源。
- 低速时钟源(LXTAL 和 IRC32K):32.768 kHz 的外部低速晶振(LXTAL)和内部 32 kHz 的低速振荡器(IRC32K)用于实时时钟(RTC)和看门狗定时器(FWDGT)等低功耗应用。
2.锁相环(PLL)
- PLL 电路:有多个 PLL(如 PLL、PLL1、PLL2 等)可以将外部时钟(HXTAL)或内部时钟(如 IRC16M)倍频到更高频率。它们用于生成系统所需的高频时钟,比如 168 MHz 的主系统时钟。
- PLL 配置:图中显示了 PLL 的输入、输出及其倍频系数选择。不同的倍频系数可以让用户灵活设置主时钟的频率。
3.时钟选择和分配
- 系统时钟选择(CK_SYS):系统时钟可以由不同的源(如 PLL 输出、HXTAL、IRC16M 等)选择得到。通过
SCS[1:0]
选择信号,可以在这些时钟源之间切换,以适应不同的应用需求。 - AHB、APB1、APB2 分频器:时钟树包含了 AHB 和两个 APB 总线的分频器,允许将系统时钟分别分配到不同的外设总线。这些总线频率可以通过预分频器调节,以满足外设的时钟要求。APB1 最多支持 42 MHz,而 APB2 最多支持 84 MHz。
4.特殊外设时钟
- USB、SDIO、ADC 等外设时钟:有些外设(如 USB 和 ADC)对时钟有特定的要求。USB 需要 48 MHz 时钟,因此会使用 IRC48M 或通过 PLL 分频得到。ADC 也有其特定的时钟路径和分频器,以确保符合采样速率要求。
- 以太网和 I2S 时钟:以太网 PHY(物理层)和 I2S(音频接口)外设也各有独立的时钟选择,确保它们能够满足高速数据通信的需求。
5.时钟输出和监控
- 时钟输出:可以通过 CK_OUT0 和 CK_OUT1 引脚将特定的时钟信号输出,以供外部设备使用。这些输出时钟信号可以是 HXTAL、PLL 输出等,具体由 CKOUTDIV 和 CKOUTSEL[1:0] 设置。
- 时钟监控器(Clock Monitor):在 HXTAL 和 PLL 的路径上有一个时钟监控器,用于检测是否有时钟失效的情况(比如晶振失效)。当检测到问题时,系统可以切换到备用的时钟源。
6.RTC 和低功耗时钟
- RTC(实时时钟):图中显示 RTC 可以选择低速外部晶振(LXTAL)或内部 32 kHz 振荡器(IRC32K)作为其时钟源。
- 看门狗定时器(FWDGT):低功耗时钟(IRC32K)还可以提供给看门狗定时器。