news 2026/4/3 0:15:03

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/3/11 22:03:44

2025全球智能机械与电子产品博览会创新科技成果发布会在澳门举办

2025全球智能机械与电子产品博览会(AIE)创新科技成果发布会于12月4日至5日在澳门威尼斯人金光会展中心举行。本次发布会以“智造,全球共享”为主题,吸引了来自人工智能、新能源、高端制造等领域的百余家创新科技企业报名&#xff…

作者头像 李华
网站建设 2026/4/1 19:21:11

中小企业如何低成本部署EmotiVoice语音服务?

中小企业如何低成本部署 EmotiVoice 语音服务 在短视频、有声书和智能客服内容爆炸式增长的今天,企业对高质量语音合成的需求从未如此迫切。一个能“说话”的AI角色,不仅能降低人力配音成本,还能让品牌声音更具辨识度。然而,当市面…

作者头像 李华
网站建设 2026/3/26 12:55:20

回收西门子PLC,触控屏

西门子PLC是工业自动化领域的核心控制设备,以可靠性高、编程通用性强著称。其产品线覆盖全面,主要分为以下几大主流系列: S7-1200:紧凑型中小规模系统的理想选择,集成PROFINET接口,性价比高,适…

作者头像 李华
网站建设 2026/4/1 7:27:29

Activiti7工作流(三)Activiti类关系图

文章目录1、Activiti7 核心类体系架构2、流程引擎配置类 - ProcessEngineConfiguration2.1 StandaloneProcessEngineConfiguration2.2 SpringProcessEngineConfiguration2.3 创建processEngineConfiguration3、工作流引擎创建 - ProcessEngine3.1 默认创建方式3.2 通用方式4、S…

作者头像 李华
网站建设 2026/3/24 7:25:37

JAVA红娘婚恋相亲交友系统源码支持微信小程序+微信公众号+H5+APP

温馨提示:文末有资源获取方式~ 一、婚恋红娘软件概述 婚恋红娘软件是一种基于互联网平台的社交应用,旨在帮助单身人士找到理想的伴侣。与传统婚恋方式,如相亲、朋友介绍等相比,它具有独特的优势。传统方式往往受限于…

作者头像 李华