news 2026/2/15 1:51:59

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/3 20:09:17

LobeChat系统通知分类管理

LobeChat系统通知分类管理 在构建现代AI对话系统的实践中,一个常被忽视却至关重要的问题浮出水面:当模型越来越多、插件越来越丰富时,如何让用户和开发者不被满屏的弹窗淹没?又该如何快速定位“为什么我的回答卡住了”这类问题&am…

作者头像 李华
网站建设 2026/2/8 0:08:37

Character Animator 2025 2D 角色动画软件下载安装教程

前言 Character Animator 2025(简称 CH 2025)是 Adobe Creative Cloud 旗下的专业实时 2D 角色动画软件,凭借 AI 动作捕捉、新手友好操作及强大跨软件协作能力,覆盖虚拟直播、短视频动画、网课课件等多场景创作需求。 高效双模式…

作者头像 李华
网站建设 2026/2/8 6:46:32

EmotiVoice语音合成系统备份与恢复机制建议

EmotiVoice语音合成系统备份与恢复机制建议 在虚拟偶像直播中,主播临时更换设备却无法还原原有声音情绪;游戏开发团队迭代版本后,NPC的“愤怒”语调突然变得平淡;有声书创作者数月前录制的情感样本因服务器故障永久丢失……这些真…

作者头像 李华
网站建设 2026/2/9 17:52:46

EmotiVoice语音合成引擎:打造富有情感的AI声音解决方案

EmotiVoice语音合成引擎:打造富有情感的AI声音解决方案 在虚拟主播直播中突然切换成“撒娇音”回应粉丝弹幕,有声书朗读时随着剧情推进自动从温柔低语转为紧张急促的叙述——这些曾属于科幻场景的交互体验,如今正通过EmotiVoice这样的新型语音…

作者头像 李华
网站建设 2026/2/10 12:42:52

2.1 Agent 开发新范式!LangGraph 从链式思维到图状态的革命

2.1 Agent 开发新范式!LangGraph 从链式思维到图状态的革命 导语:欢迎进入课程的第二周!在第一周,我们聚焦于构建和强化单个 Agent 的能力。我们学会了如何让它使用工具、拥有记忆、并遵循我们的指令。然而,当我们面对真正复杂的、需要多个角色分工协作才能完成的任务时,…

作者头像 李华
网站建设 2026/2/4 2:04:31

EmotiVoice语音合成噪音抑制后处理:提升最终输出纯净度

EmotiVoice语音合成噪音抑制后处理:提升最终输出纯净度 在智能语音内容爆发式增长的今天,用户早已不满足于“能说话”的AI语音。从虚拟偶像直播到有声书自动播讲,从游戏NPC互动到数字员工客服,人们期待的是像真人一样富有情感、自…

作者头像 李华