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 )