下面文章中使用nRF52832-QFAA(RAM64K, FLASH512K)举例.
FLASH分配
Nordic BLE Soc可以实现三类软件,
- 不带SoftDevice(蓝牙协议栈)的软件
- 将Soc当成普通MCU用,不使用蓝牙协议栈。
- 程序包括Application(有时候也可以包括Bootloader,不讨论这种情况)。
- 带SoftDevice,不支持DFU(OTA)的软件
- 蓝牙协议栈提供API接口进行调用。
- FLASH和RAM各自划分成两部分,一部分给SoftDevice,一部分给Application。
- FLASH分配如下,
FLASH分区 | 地址范围 | 大小 |
---|---|---|
Application area (incl. free space) | 0x0002 6000 - 0x0008 0000 | 360 kB |
SoftDevice | 0x0000 1000 - 0x0002 6000 | 148 kB |
Master Boot Record (MBR) | 0x0000 0000 - 0x0000 1000 | 4 kB |
从官网上下载的SoftDevice是包含MBR的,因此可以理解成 SoftDevice 在FLASH里的位置是0x0000 0000 - 0x0002 6000, Application 在FLASH里的位置是0x0002 6000 - 0x0008 0000。
因此,带SoftDevice,不支持DFU(OTA)的软件中,Application工程的FLASH配置如下,
- 带SoftDevice,且支持DFU的应用。
- 蓝牙协议栈提供API接口进行调用。
- FLASH分配如下(也见SDK文档),分别给SoftDevice,Application和Bootloader相关。
FLASH分区 | 地址范围 | 大小 |
---|---|---|
Bootloader settings | 0x0007 F000 - 0x0008 0000 | 4 kB |
MBR parameter storage | 0x0007 E000 - 0x0007 F000 | 4 kB |
Bootloader | 0x0007 8000 - 0x0007 E000 | 24 kB |
Application area (incl. free space) | 0x0002 6000 - 0x0007 8000 | 328 kB |
SoftDevice | 0x0000 1000 - 0x0002 6000 | 148 kB |
Master Boot Record (MBR) | 0x0000 0000 - 0x0000 1000 | 4 kB |
RAM分配
虽然从工程上,程序分为SoftDevice, Application和Bootloader, 但是我们对RAM空间的分配重点考虑会同时访问RAM的程序。比如SoftDevice和Application(或者SoftDevice和Bootloader
)。
这种情况我们将RAM空间分为两部分,
- SoftDevice的RAM空间
- 根据查阅官网下载的SoftDevice的压缩包里的s132_nrf52_x.x.x_release-notes.pdf可以获得SoftDevice所需的最小RAM空间。
然而,这是所需的最小RAM空间,实际使用的话,要将RAM空间上调到nrf_sdh_ble_enable
函数调用时执行成功为止。我暂时分配的是0x3000。 - SoftDevice 的RAM空间要求分配在RAM开始的位置,也就是0x20000000 - 0x20003000。
-
Application的RAM空间
根据上述SoftDevice 的RAM空间要求分配在RAM开始的位置,也就是0x20000000 - 0x20003000
,Application工程里的RAM空间配置如下,
Bootloader的RAM空间
Bootloader也需要用到SoftDevice,因此Bootloader和SoftDevice需要共用RAM。因此,Bootloader工程配置可以参考Application的工程配置。
详细可以参考[SDK ROOT]\examples\dfu\secure_bootloader\pca10040_s132_ble\arm5_no_packs\secure_bootloader_ble_s132_pca10040.uvprojx
。