1. 程式人生 > >NORDIC nRF52840 ROM與RAM 開始地址及大小設定 (keil 環境)

NORDIC nRF52840 ROM與RAM 開始地址及大小設定 (keil 環境)

目的:NORDIC nRF52840 ROM與RAM 開始地址及大小的正確設定方法(keil 環境)

硬體: 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 )