【GD32】存储器架构介绍

🗺️ 1. 存储器映射概述

GD32 基于 ARM Cortex-M 内核,遵循其规定的存储器映射结构。整个 4GB 的地址空间被划分为多个预定义区域,用于不同的存储器和外设。

地址范围 区域类型 说明
0x0000 0000 - 0x1FFF FFFF 代码区 用于存放程序代码,通常映射到内部 Flash 或系统存储器。
0x2000 0000 - 0x3FFF FFFF SRAM 区 用于存放运行时的数据(变量、栈、堆),直接对应芯片的物理 RAM。
0x4000 0000 - 0x5FFF FFFF 外设区 所有片上外设(如 GPIO、USART、定时器等)的寄存器都映射到此区域。
0x6000 0000 - 0xDFFF FFFF 外部存储器 用于连接外部存储设备(如 SDRAM、NOR Flash),通过 EXMC(外部存储器控制器)访问。
0xE000 0000 - 0xFFFF FFFF Cortex-M 内核外设 包括 NVIC、SysTick、调试组件等。

💾 2. 内部存储器

GD32 芯片内部集成了两种主要的存储器:Flash 和 SRAM。

片上 Flash 存储器
  • 功能 :主要用于存储程序代码和只读数据(如常量字符串)。
  • 地址 :通常起始于 0x0800 0000
  • 结构 :通常分为几个部分:
    • 主存储块 (Main Memory):用户程序的主要存放区域。按页(Page)组织,不同型号的页大小可能不同(例如 1KB 或 2KB)。在写入前需要先擦除。
    • 信息块 (Information Block)
      • 系统存储器 (System Memory) :存储芯片厂商预置的 Bootloader(串口下载程序),用户不可修改。
      • 选项字节 (Option Bytes):用于配置芯片的读写保护、看门狗、复位电平等功能。
片上 SRAM 存储器
  • 功能 :用于程序运行时的数据存储,如全局变量、局部变量、堆栈等。
  • 地址 :起始于 0x2000 0000
  • 特性易失性存储器,断电后数据丢失。支持字节、半字(16位)和字(32位)访问。

下表对比了 GD32 内部两种主要存储器的特性:

特性 片上 Flash 片上 SRAM
用途 存储程序代码、常量数据 存储运行时变量、堆栈
起始地址 0x0800 0000 0x2000 0000
易失性 非易失性 (断电数据不丢失) 易失性 (断电数据丢失)
写入方式 需先擦除页(Page)再写入 可直接按字节/半字/字写入
寿命 擦写次数有限 (通常 1万-10万次) 几乎无限次读写
速度 读取较快,写入和擦除较慢 读写速度都非常快

🔄 3. 启动配置

GD32 的启动模式通过 BOOT0BOOT1 引脚的电平组合在复位时选择,决定了芯片上电后从哪个存储器开始执行程序。

BOOT1 Pin BOOT0 Pin 启动模式 启动地址 (示例) 典型应用场景
0 0 主闪存启动 0x0800 0000 最常用模式,从用户 Flash 程序启动
0 1 系统存储器启动 0x1FFF F000 (F1系列) 通过串口下载程序 (ISP)
1 1 SRAM 启动 0x2000 0000 调试程序,减少对 Flash 的擦写磨损

关键点

  • 芯片复位后,Cortex-M 内核总是从 0x0000 0000 地址获取主堆栈指针 (MSP),并从 0x0000 0004 地址获取复位向量,开始执行程序。
  • 上述的启动地址(如 0x0800 0000)会被硬件自动映射到 0x0000 0000 开始的空间,以便内核访问。

🧠 4. 外部存储器控制器 (EXMC)

对于需要扩展存储空间的场景,GD32 提供了 EXMC(External Memory Controller)。

  • 功能 :EXMC 可以连接各种外部存储器,如 SRAM, ROM, NOR Flash, NAND Flash, PC CardSDRAM
  • 地址映射 :外部存储器的地址被映射到 GD32 的地址空间中(例如 0x6000 0000 - 0xDFFF FFFF),CPU 可以像访问内部内存一样直接访问它们。
  • 配置:使用 EXMC 需要初始化相关的时序参数和控制寄存器,以匹配所连接存储器的规格。

🛡️ 5. 存储保护

GD32 提供了存储器保护机制,增强安全性:

  • 读保护 (RDP):防止通过调试接口(如 SWD/JTAG)读取 Flash 中的程序代码,保护知识产权。
  • 写保护 (WRP):可以保护特定的 Flash 页免受误写或擦除,提高可靠性。

💡 6. 编程提示

  • 代码优化 :对于性能关键的代码,尽量将其放在 0x0800 0000 开始的前 256KB Flash 中,因为这部分空间CPU执行指令是零等待的,访问速度最快。
  • 数据存放
    • 常量、只读数据可存放在 Flash 中(使用 const 关键字)。
    • 频繁读写的数据、堆栈应放在 SRAM 中。
  • 选项字节:修改选项字节(如读保护)需谨慎,错误的配置可能导致芯片无法正常下载或运行程序。

💎 总结

GD32 的存储架构清晰且强大,涵盖了从内部 Flash 和 SRAM 到丰富的外部存储器扩展能力。理解其存储器映射、启动模式以及各类存储器的特性和用途,是进行高效GD32开发的基础。

相关推荐
伴杯猫13 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
茯苓gao13 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
点灯小铭15 小时前
基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计
stm32·单片机·智能手机·毕业设计·课程设计
沐欣工作室_lvyiyi15 小时前
基于单片机的智能路灯(论文+源码)
单片机·嵌入式硬件·毕业设计
Yyq1302086968215 小时前
SIT1050 5V 供电,±40V 接口耐压,1Mbps 高速 CAN 总线收发器
单片机·嵌入式硬件
云伴枫轻舞15 小时前
我对 OTA 的理解随记,附GD32/STM32例程
stm32·单片机·嵌入式硬件
LS·Cui17 小时前
单片机按键示例功能
单片机
【ql君】qlexcel17 小时前
MCU上电到运行的全过程
单片机·嵌入式硬件·mcu·启动过程
搞一搞汽车电子17 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车