news 2026/2/7 4:40:25

nRF52832地址空间分配详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nRF52832地址空间分配详解

nRF52832地址空间分配详解

前言

nRF52832是nordic公司开发的一款经典蓝牙SOC,其性能和低功耗特性一直是标杆,其工作依赖SoftDevice(蓝牙协议栈),其占用空间地址及应用程序的地址空间分配是开发蓝牙应用的前题。

nRF52832基于ARM Cortex-M4F内核,遵循ARM Cortex-M架构的4GB地址空间划分规则,同时结合自身硬件特性(Flash、RAM、外设等)形成了特定的地址空间布局。以下是其详细的地址空间分配,包括核心内存区域、外设寄存器、特殊配置寄存器协议栈/引导程序的典型分配

一、ARM Cortex-M4F整体地址空间框架

Cortex-M4F的4GB地址空间分为5个主要区域,nRF52832的硬件资源映射到其中的关键区域:

地址范围

区域类型

说明

0x0000 0000 ~ 0x1FFF FFFF

Code区(Code Space)

存储Flash、片内ROM等代码/数据

0x2000 0000 ~ 0x3FFF FFFF

SRAM区(SRAM Space)

片内RAM,用于数据/堆栈/堆

0x4000 0000 ~ 0x5FFF FFFF

外设区(Peripheral)

片内外设寄存器映射

0x6000 0000 ~ 0xDFFF FFFF

保留(Reserved)

厂商/ARM保留

0xE000 0000 ~ 0xE00F FFFF

系统区(System)

Cortex-M4F内核外设(NVIC、SCB等)

0xE010 0000 ~ 0xFFFF FFFF

保留(Reserved)

厂商/ARM保留

二、nRF52832核心硬件地址分配

nRF52832的硬件规格主要有512KB Flash + 64KB RAM(主流版本)和256KB Flash + 32KB RAM(精简版),以下以512KB Flash + 64KB RAM为例说明:

1. 片内Flash(Code区)

Flash是非易失性存储器,用于存储程序代码、常量、配置数据等,地址范围及细分如下:

地址范围

大小

用途说明

0x0000 0000 ~ 0x0007 FFFF

512KB

主Flash存储区:裸机程序默认从0x0000 0000开始执行;若使用SoftDevice,此区域会被协议栈和应用程序分割。

0x1000 0000 ~ 0x1000 0FFF

4KB

FICR(Factory Information Configuration Register):工厂烧录的只读信息,如设备ID、射频校准数据、Flash/RAM容量信息等,用户不可修改。

0x1000 1000 ~ 0x1000 1FFF

4KB

UICR(User Information Configuration Register):用户可配置的非易失性寄存器,用于设置GPIO引脚配置、启动地址、SoftDevice启用标志等,需通过NVMC(非易失性存储器控制器)编程修改。

0x0008 0000 ~ 0x000F FFFF

保留

厂商保留(部分版本扩展Flash用)

256KB Flash版本的主Flash地址范围为0x0000 0000 ~ 0x0003 FFFF,其余FICR/UICR地址不变。

2. 片内RAM(SRAM区)

RAM是易失性存储器,用于运行时数据存储、堆栈(Stack)、堆(Heap)等,地址范围及细分如下:

地址范围

大小

用途说明

0x2000 0000 ~ 0x2000 FFFF

64KB

主RAM存储区:裸机程序默认使用此区域;若使用SoftDevice,协议栈会占用低地址部分RAM,应用程序使用剩余部分。

0x2001 0000 ~ 0x200F FFFF

保留

厂商保留(部分高性能nRF52系列扩展RAM用)

32KB RAM版本的主RAM地址范围为0x2000 0000 ~ 0x2000 7FFF,其余保留。

3. 外设寄存器(Peripheral区)

nRF52832的片内外设(GPIO、TIMER、RADIO、UART等)寄存器映射到0x4000 0000开始的外设区,关键外设的基地址如下(完整列表见nRF52832 Product Specification):

外设模块

基地址

外设模块

基地址

POWER(电源管理)

0x4000 0000

CLOCK(时钟管理)

0x4000 1000

RADIO(射频模块)

0x4000 2000

UART0

0x4000 4000

SPI0/TWI0

0x4000 5000

SPI1/TWI1

0x4000 6000

TIMER0~2

0x4000 8000~0xA000

RTC0

0x4000 B000

WDT(看门狗)

0x4000 C000

RNG(随机数发生器)

0x4000 D000

ECB/CCM(加密)

0x4000 E000~0xF000

GPIOTE(GPIO事件)

0x4001 3000

SAADC(模数转换)

0x4001 4000

NVMC(Flash控制器)

0x4001 E000

GPIO/P0

0x5000 0000

SPI2/TWI2

0x4002 9000

TIMER3~4

0x4003 0000~0x1000

RTC1~2

0x4003 2000~0x3000

4. 内核外设(System区)

Cortex-M4F的内核外设(NVIC、SCB、SysTick、MPU等)映射到0xE000 0000开始的系统区,关键模块的基地址如下:

内核外设

基地址

说明

SysTick(系统定时器)

0xE000 E010

系统滴答定时器

SCB(系统控制块)

0xE000 ED00

含CPUID、中断控制、系统控制等寄存器

NVIC(嵌套中断控制器)

0xE000 E100

中断优先级配置、中断使能/失能等

MPU(内存保护单元)

0xE000 ED90

内存访问权限控制(Cortex-M4F可选)

CoreSight调试组件

0xE004 2000

调试接口(SWD/JTAG)相关寄存器

三、SoftDevice(蓝牙协议栈)的地址分配

nRF52832常用的蓝牙协议栈为S132(蓝牙5.0),不同版本的S132占用的Flash和RAM不同,以S132 v7.3.0(主流版本)为例:

区域

协议栈占用地址范围

大小

应用程序可用地址范围

Flash

0x0000 0000 ~ 0x0002 5FFF

152KB

0x0002 6000 ~ 0x0007 FFFF(360KB)

RAM

0x2000 0000 ~ 0x2000 3FFF

16KB

0x2000 4000 ~ 0x2000 FFFF(48KB)

S132 v6.1.0的占用更小:Flash占用0x0000 0000 ~ 0x0001 FFFF(128KB),RAM占用0x2000 0000 ~ 0x2000 2FFF(12KB),应用程序可用Flash为0x0002 0000 ~ 0x0007 FFFF(384KB),RAM为0x2000 3000 ~ 0x2000 FFFF(52KB)。

四、Bootloader(引导程序)的典型地址分配

Bootloader用于实现固件升级(DFU),通常放置在Flash的高地址区,以512KB Flash为例,典型分配为:

  • Bootloader占用:0x0007 0000 ~ 0x0007 FFFF(64KB)
  • 应用程序(含SoftDevice)占用:0x0000 0000 ~ 0x0006 FFFF(448KB)

若Bootloader需更大空间(如支持蓝牙DFU+USB DFU),可调整为0x0006 0000 ~ 0x0007 FFFF(128KB),应用程序占用0x0000 0000 ~ 0x0005 FFFF(384KB)。

五、向量表的地址分配

nRF52832的中断向量表默认位于Flash起始地址(0x0000 0000),若使用SoftDevice或Bootloader,向量表需重定位

  • 裸机程序:向量表地址=0x0000 0000(默认),可通过SCB->VTOR寄存器修改至RAM或Flash其他地址。
  • 含SoftDevice的应用程序:向量表需重定位到应用程序的Flash起始地址(如S132 v7.3.0的0x0002 6000)或RAM(0x2000 4000),由sd_softdevice_vector_table_set()函数配置。
  • 含Bootloader的程序:应用程序的向量表重定位到应用程序Flash起始地址,Bootloader的向量表位于自身Flash起始地址。

六、关键注意事项

  1. 内存越界:程序代码/数据若超出Flash/RAM的实际地址范围,会导致芯片跑飞、调试异常(如之前提到的无法进入main()、无法单步执行)。
  1. MPU配置:Cortex-M4F的MPU可对地址空间进行访问权限控制,若配置错误,会导致外设访问失败、内存读写错误(触发HardFault)。
  1. NVMC操作:Flash/UICR的写/擦除需通过NVMC寄存器配置,直接对Flash地址写数据会导致操作无效或硬件故障。
  1. SoftDevice兼容性:不同版本的SoftDevice对地址分配的要求不同,需严格遵循对应的SoftDevice规格书(S132 Specification)。

nRF52832的地址空间分配可参考Nordic官方文档:《nRF52832 Product Specification (v1.5)》Chapter 2 “Memory map”和《S132 SoftDevice Specification (v7.3.0)》Chapter 4 “Memory layout”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 4:31:29

共商AI时代发展新路径 第十六届亚洲电子论坛举办

12月4日,海风温润,思想激荡,一场亚洲电子信息产业的年度思想盛宴与创新庆典在澳门拉开帷幕。当天下午,第十六届亚洲电子论坛(AEF)暨全球智能科技峰会在澳门举办。来自全球多个国家与地区的产业代表、专家学…

作者头像 李华
网站建设 2026/2/5 10:33:44

软考—系统集成项目管理工程师计算公式汇总

系统集成项目管理工程师虽然技术题目不算多,但考试中也会涉及到一些计算题。一、计算公式 基础: 1.计划值(PV):PV 计划工作量 计划单价,与检查时间点有关。 2.挣值(EV)&#xff1a…

作者头像 李华
网站建设 2026/2/6 17:07:37

AI元人文构想:在黑箱与元白箱之间的抉择分析

AI元人文构想:在黑箱与元白箱之间的抉择分析一、关于本文论述策略与理论立场的说明本文采用 “LLM黑箱”与“AI元人文元白箱” 的二元对立框架进行论述,旨在通过极致的对比张力,揭示当前技术路径潜藏的文明风险与另一条根本性道路的存在。我们…

作者头像 李华
网站建设 2026/2/6 0:09:28

AI元人文构想:意义行为原生论——回应质疑

AI元人文构想:意义行为原生论——回应质疑面对关于“AI元人文构想”的诸多深刻质疑,我认为首要之事,是澄清一个根本性的范式跃迁。许多担忧,源自于不自觉地用旧时代的“硅基工具范式”眼镜,来审视一个试图超越该范式的…

作者头像 李华
网站建设 2026/2/7 4:24:14

15、网络相似度与二分网络的构建与分析

网络相似度与二分网络的构建与分析 一、构建相似度网络的前期准备 在构建基于相似度的网络时,若列表 protein 包含每个食品项中的蛋白质含量,可对其进行二分处理。以下是两种实现方式: 1. 普通 Python 方式 import statistics threshold = statistics.mean(protein) …

作者头像 李华
网站建设 2026/2/5 20:59:23

1.5 LangChain vs. DeepSeek:MCP 客户端开发与框架集成的终极对决

1.5 LangChain vs. DeepSeek:MCP 客户端开发与框架集成的终极对决 导语:在上一章,我们成功构建了一个遵循 MCP 协议的标准化工具服务。但“酒香也怕巷子深”,强大的工具服务需要同样强大的客户端来消费。当 Agent 的“大脑”(如 LangChain、DeepSeek)需要调用这些外部工具…

作者头像 李华