下面簡單介紹一下 R128 方案的資源劃分與啟動流程。
資源劃分
CPU 資源劃分
這只是默認配置方案,CPU 資源劃分可以按照需求任意修改
CPU | 功能說明 |
---|---|
M33 | 控制核。運行 WI-FI/BT 固件、協議棧、驅動、休眠喚醒、安全啟動、安全控制 |
C906 | 應用核。運行大部分驅動與主要應用,控制臺 |
HIFI5 | 算法核。運行音頻相關驅動與算法 |
內存配置
R128 方案目前三個核 OS 運行的地址范圍如下表。
這只是默認配置方案,CPU 資源劃分可以按照需求任意修改。
CPU | 內存使用地址 |
---|---|
M33 | lspsram ,運行地址范圍 0x8000000 - 0x8300000 |
C906 | lspsram ,運行地址范圍 0x8300000 - 0x8800000 |
HIFI5 | hspsram ,運行地址范圍 0xC000660 - 0xC0A0660 |
啟動流程
R128 方案非安全啟動流程如下,其中 M33 為啟動核:
這只是默認配置方案,啟動流程可以按照需求任意修改。
- BROM
- 加載 M33 BOOT0 至 SRAM
- 跳轉 M33 BOOT0 運行
- M33 BOOT0
- 初始化 LSPSRAM 與 HSPSRAM
- 加載 M33 RTOS 至 LSPSRAM
- 加載 C906 RTOS 至 LSPSRAM
- 加載 HIFI5 RTOS 至 HSPSRAM
- 跳轉運行 M33 RTOS
- M33 RTOS
- 啟動運行 C906 RTOS
- 啟動運行 HIFI5 RTOS
- C906 RTOS
- 啟動運行用戶程序
sequenceDiagram
BROM-- >>SRAM: load M33 Core BOOT0 to SRAM
BROM-- >>BOOT0: Boot BOOT0 on M33
BOOT0-- >>LSPSRAM: init LSPSRAM
BOOT0-- >>HSPSRAM: init HSPSRAM
BOOT0-- >>LSPSRAM: load M33 RTOS to LSPSRAM
BOOT0-- >>LSPSRAM: load C906 RTOS to LSPSRAM
BOOT0-- >>HSPSRAM: load HIFI5 RTOS to HSPSRAM
BOOT0-- >>M33: BOOT0 Boot M33 RTOS
M33-- >>C906: Boot C906 RTOS
C906-- >>LSPSRAM: C906 RTOS Running on LSPSRAM
M33-- >>HIFI5: Boot HIFI5 RTOS
HIFI5-- >>HSPSRAM: HIFI5 RTOS Running on HSPSRAM
C906-- >>HSPSRAM: APP Running on HSPSRAM
修改運行核心
系統有三個不同的核心,分別是 M33,C906,HIFI5,其中M33是啟動核心不可以關閉,另外兩個核心都可以關閉。當不需要使用 C906 核心或者 HIFI5 DSP 核心的時候,可以將這兩個核心關閉。方法如下:
關閉 HIFI5 核心
首先,選擇好 M33 的方案,因為 HIFI5 是由 M33 來啟動的。
source envsetup.sh
lunch_rtos r128s2_m33
直接取消勾選即可:
關閉 C906 核心
首先,選擇好 M33 的方案,因為 C906 是由 M33 來啟動的。
source envsetup.sh
lunch_rtos r128s2_m33
直接取消勾選即可:
修改核心運行內存空間
修改到 HSPSRAM 運行
R128 的 M33 和 C906 兩個核運行的系統都是默認運行在 LSPSRAM,這里示例如何修改到 HSPSRAM
- 關閉啟動 HIFI5 核心
首先,選擇好 M33 的方案,因為 HIFI5 是由 M33 來啟動的。
source envsetup.sh
lunch_rtos r128s2_m33
由于默認 HIFI5 是運行在 HSPSRAM 的,這里需要釋放 HSPSRAM。運行 mrtos_menuconfig
啟動配置。
直接取消勾選即可。
- 將 M33 和 C906 設置成在 HSPSRAM 運行
首先選擇 M33 的方案:
source envsetup.sh
lunch_rtos r128s2_m33
接著運行 mrtos_menuconfig
修改啟動地址,所需要修改的配置如下圖所示:
lspsram 地址空間為 0x8000000-0x87fffff,hspsram 地址空間為 0xc000000-0xc7fffff。
這里將所需要的修改的核的地址,將8改成c即可。如修改 M33 的起始地址,將 0x08004000
,修改成0x0c004000
即可,如下圖。
然后保存配置,重新編譯 M33 方案。接下來修改 C906 的地址,選擇 C906 的方案
source envsetup.sh
lunch_rtos r128s2_c906
接著運行 mrtos_menuconfig
修改啟動地址,所需要修改的配置如下圖所示:
然后保存配置,重新編譯 C906 方案。
- 修改配置文件
首先,確認自己方案使用的 image_header
文件,運行一次打包的命令 pack
,從打包的 log
中能看出方案所選的文件,如下圖:
如果需要修改 M33 的地址,則只修改 M33 的即可,C906同理。如果取消啟動 DSP,則直接注銷掉 DSP的配置代碼。
最后,修改 M33 和 C906 在 HSPSRAM 運行,并且取消運行 HIFI5 的 image_header
文件修改可如下所示:
diff --git a/r128s2/pro/configs/image_header_xip.cfg b/r128s2/pro/configs/image_header_xip.cfg
index 5c83ac1..fc87d06 100755
--- a/r128s2/pro/configs/image_header_xip.cfg
+++ b/r128s2/pro/configs/image_header_xip.cfg
@@ -30,9 +30,9 @@
{"id": "0xa5e05a00", "bin": "boot0_spinor.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"},
{"id": "0xa5e05a00", "bin": "boot0_sdcard.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"},
{"id": "0xa5e15a01", "bin": "freertos-gz.fex", "attr": "0x01"},
- {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0x8004000", "ep": "0x8004000"},
- {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0x8200000", "ep": "0x8200000"},
- {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"},
+ {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0xc004000", "ep": "0xc004000"},
+ {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0xc200000", "ep": "0xc200000"},
+ // {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"},
{"id": "0xa5e05a01", "bin": "etf.fex", "attr": "0x01", "sram_offs": "0x4000000", "ep": "0x4000000"},
{"id": "0xa5e05a01", "bin": "rtos_xip_rv.fex", "attr": "0x02"},
{}
查看代碼內存分布
可以在 SDK 中運行 kamp 命令查看代碼的內存分布
可以在最后查看內存的總使用情況
配置XIP
R128-S2 內置 NOR FLASH,可以將運行效率要求不高的代碼保存在 XIP 段中,減少內存的占用。
配置 XIP 需要把對應的函數和庫文件加入 xip.lds.S 中,具體語法請參照 ld 語法。
配置多個堆內存
有些時候當不需要使用 DSP 核心或者 DSP 核心內存使用量較少時,可以配置多個堆內存,將一部分內存放置于不同的 RAM 上使用。這里以 R128-S2 關閉 DSP 核心并將 HSPSRAM 分配給 C906 核心使用為例:
配置前內存分布情況
配置前進入 C906 核心運行 free 命令查看當前內存使用分布情況。
關閉 DSP 核心
首先,選擇好 M33 的方案,因為 DSP 是由 M33 來啟動的。
source envsetup.sh
lunch_rtos r128s2_m33
由于默認 DSP 是運行在 HSPSRAM 的,這里需要釋放 HSPSRAM。運行 mrtos_menuconfig 啟動配置。
直接取消勾選即可。
修改后請重新編譯 M33 核心的固件。
將 HPSRAM 全部分配給 C906 使用
選擇好 C906 的方案,運行配置界面
source envsetup.sh
lunch_rtos r128s2_c906
image-20231017135824514
找到 Kernel Options
找到 Heap Memory Manager (Use heap-4 to allocate memory) --->
選中 Use heap-multiple to allocate memory
配置 Default Heap Ram 為 heap in lpsram 配置默認內存堆為 lpsram
勾選 lpsram heap 和 lpsram heap dynamic address,意思是 lpsram 的內存是動態分布的
配置 lpsram heap size 的大小是0x600000,因為前面 2M 給 M33 使用,所以剩下 6M
配置 hpsram heap 使能 HPSRAM,并配置 hpsram heap start address 為 0xc000000,hpsram heap size 為 0x7FFFFF 表示將 HPSRAM 全部分配給 C906 核心使用。
將 HPSRAM 部分分配給 C906 使用
如果 HPSRAM 需要運行 DSP,可以分配部分給 C906 使用,配置 hpsram heap start address為 0xc400000,0xc000000 是 HPSRAM 的開始地址,前面 4M 已經分配給 DSP 使用;并配置 hpsram heap size 為 0x400000 意思是可以用的 HPSRAM 大小是 4M。
配置后的內存分布情況
編譯打包燒錄后,可以使用 free 命令查看配置后的內存分布情況。可以看到 HPSRAM 的8M內存全部分配給 C906 使用了,C906 一共可以用 4M LPSRAM + 8M HPSRAM = 12M RAM
審核編輯 黃宇
-
mcu
+關注
關注
146文章
17185瀏覽量
351735 -
R128
+關注
關注
0文章
41瀏覽量
110
發布評論請先 登錄
相關推薦
評論