nRF52840等nRF52系列keil 环境:ROM与RAM 开始地址及大小设置
芯片型号:nRF52840
模块型号:RF-BM-ND05/RF-BM-ND06
硬件: NORDIC nRF 52840 DK (FLASH ROM: 1MB, RAM: 256 KB)
协议栈: s140_nrf52_6.1.0
Keil: u version ver 5.23.0.0
1. 设置界面;
IROM1 对应 1MB FLASH ROM; IRAM1 对应 256KB RAM.
2. 于 s140 包中文件 s140_nrf52_6.1.0_release-notes.pdf 查到, s140 协议栈分别占用 FLASH ROM,RAM 尺寸;
3. IROM1 start address 开始地址和 size 尺寸设置算法
IROM1 Start Address 开始地址: 0x26000, 152KB=152 * 1024 bytes = 155648 bytes = 0x26000 bytes.
IROM1 Size: 1MB - 152KB = (1024 - 152) * 1024 bytes = 892928 bytes = 0xDA000 bytes.
4. 剩余 FLASH ROM 尺寸, 用于存放: Code + RO-data + RW-data, 留意编译时这三者字节数,注意其总和不得超过剩余 FLASH ROM;
5. s140 协议栈最小需求 RAM 是 5.54KB ( 0x1628 bytes), 但实际 RAM 空间需求还依赖 sd_ble_enable() 配置;
先在RAM开始区域设置一个较小的开始值,让程序运行时报错, nrf_sdh_ble.c 中设置断点, 查看真实 RAM 需求的开始地址;
6. IRAM1 Start Address 开始地址设置为上述调试获取的值 (变量: p_app_ram_start);
7. IRAM1 Size 算法
IRAM1 Size 按上述调试显示,可快捷设置为值 ram_end_address_get() - (*p_app_ram_start);
RAM 总尺寸 256 KB = 256 * 1024 bytes = 262144 bytes = 0x40000 bytes.
注: RAM 起始基地址是 0x2000 0000;
假设 IRAM1 Start Address: 0x2001 8000, 则 IRAM1 Size = 0x40000 - 0x18000 bytes = 28000 bytes
8. 存放 s140 协议栈后, 剩余 RAM 用于应用程序运行; 剩余 RAM 空间尺寸须 > (pZI-data + RW-data).
9. KEIL 编译输出参考 (Code,RO-data,RW-data,ZI-data )
10. 备注, 关于 NRF_LOG_DEBUG 输出于sdk_config.h 中配置