DshanMCU-R128s2启动与资源划分

2023-12-23 03:52

本文主要是介绍DshanMCU-R128s2启动与资源划分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

启动与资源划分

下面简单介绍一下 R128 方案的资源划分与启动流程。

资源划分

CPU 资源划分

这只是默认配置方案,CPU 资源划分可以按照需求任意修改

CPU功能说明
M33控制核。运行 WI-FI/BT 固件、协议栈、驱动、休眠唤醒、安全启动、安全控制
C906应用核。运行大部分驱动与主要应用,控制台
HIFI5算法核。运行音频相关驱动与算法

内存配置

R128 方案目前三个核 OS 运行的地址范围如下表。

这只是默认配置方案,CPU 资源划分可以按照需求任意修改。

CPU内存使用地址
M33lspsram,运行地址范围 0x8000000 - 0x8300000
C906lspsram,运行地址范围 0x8300000 - 0x8800000
HIFI5hspsram,运行地址范围 0xC000660 - 0xC0A0660

启动流程

R128 方案非安全启动流程如下,其中 M33 为启动核:

这只是默认配置方案,启动流程可以按照需求任意修改。

  1. BROM
    1. 加载 M33 BOOT0 至 SRAM
    2. 跳转 M33 BOOT0 运行
  2. M33 BOOT0
    1. 初始化 LSPSRAM 与 HSPSRAM
    2. 加载 M33 RTOS 至 LSPSRAM
    3. 加载 C906 RTOS 至 LSPSRAM
    4. 加载 HIFI5 RTOS 至 HSPSRAM
    5. 跳转运行 M33 RTOS
  3. M33 RTOS
    1. 启动运行 C906 RTOS
    2. 启动运行 HIFI5 RTOS
  4. C906 RTOS
    1. 启动运行用户程序
BROM SRAM BOOT0 LSPSRAM HSPSRAM M33 C906 HIFI5 load M33 Core BOOT0 to SRAM Boot BOOT0 on M33 init LSPSRAM init HSPSRAM load M33 RTOS to LSPSRAM load C906 RTOS to LSPSRAM load HIFI5 RTOS to HSPSRAM BOOT0 Boot M33 RTOS Boot C906 RTOS C906 RTOS Running on LSPSRAM Boot HIFI5 RTOS HIFI5 RTOS Running on HSPSRAM APP Running on HSPSRAM BROM SRAM BOOT0 LSPSRAM HSPSRAM M33 C906 HIFI5

修改运行核心

系统有三个不同的核心,分别是 M33,C906,HIFI5,其中M33是启动核心不可以关闭,另外两个核心都可以关闭。当不需要使用 C906 核心或者 HIFI5 DSP 核心的时候,可以将这两个核心关闭。方法如下:

关闭 HIFI5 核心

首先,选择好 M33 的方案,因为 HIFI5 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

直接取消勾选即可:

image1

关闭 C906 核心

首先,选择好 M33 的方案,因为 C906 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

直接取消勾选即可:

image1

修改核心运行内存空间

修改到 HSPSRAM 运行

R128 的 M33 和 C906 两个核运行的系统都是默认运行在 LSPSRAM,这里示例如何修改到 HSPSRAM

  1. 关闭启动 HIFI5 核心

首先,选择好 M33 的方案,因为 HIFI5 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

由于默认 HIFI5 是运行在 HSPSRAM 的,这里需要释放 HSPSRAM。运行 mrtos_menuconfig 启动配置。

直接取消勾选即可。

image1

  1. 将 M33 和 C906 设置成在 HSPSRAM 运行

首先选择 M33 的方案:

source envsetup.sh
lunch_rtos r128s2_m33

接着运行 mrtos_menuconfig 修改启动地址,所需要修改的配置如下图所示:

image2

lspsram 地址空间为 0x8000000-0x87fffff,hspsram 地址空间为 0xc000000-0xc7fffff。

这里将所需要的修改的核的地址,将8改成c即可。如修改 M33 的起始地址,将 0x08004000,修改成0x0c004000 即可,如下图。

image3

然后保存配置,重新编译 M33 方案。接下来修改 C906 的地址,选择 C906 的方案

source envsetup.sh
lunch_rtos r128s2_c906

接着运行 mrtos_menuconfig 修改启动地址,所需要修改的配置如下图所示:

image4

然后保存配置,重新编译 C906 方案。

  1. 修改配置文件

首先,确认自己方案使用的 image_header 文件,运行一次打包的命令 pack,从打包的 log 中能看出方案所选的文件,如下图:

image4-1

如果需要修改 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 命令查看代码的内存分布

image

可以在最后查看内存的总使用情况

image

配置XIP

R128-S2 内置 NOR FLASH,可以将运行效率要求不高的代码保存在 XIP 段中,减少内存的占用。

配置 XIP 需要把对应的函数和库文件加入 xip.lds.S 中,具体语法请参照 ld 语法。

image

image

配置多个堆内存

有些时候当不需要使用 DSP 核心或者 DSP 核心内存使用量较少时,可以配置多个堆内存,将一部分内存放置于不同的 RAM 上使用。这里以 R128-S2 关闭 DSP 核心并将 HSPSRAM 分配给 C906 核心使用为例:

配置前内存分布情况

配置前进入 C906 核心运行 free 命令查看当前内存使用分布情况。

image

关闭 DSP 核心

首先,选择好 M33 的方案,因为 DSP 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

由于默认 DSP 是运行在 HSPSRAM 的,这里需要释放 HSPSRAM。运行 mrtos_menuconfig 启动配置。

直接取消勾选即可。

image

修改后请重新编译 M33 核心的固件。

image

将 HPSRAM 全部分配给 C906 使用

选择好 C906 的方案,运行配置界面

source envsetup.sh
lunch_rtos r128s2_c906
image-20231017135824514

image

找到 Kernel Options

image

找到 Heap Memory Manager (Use heap-4 to allocate memory) —>

image

选中 Use heap-multiple to allocate memory

image

配置 Default Heap Ram 为 heap in lpsram 配置默认内存堆为 lpsram

image

勾选 lpsram heap 和 lpsram heap dynamic address,意思是 lpsram 的内存是动态分布的

image

配置 lpsram heap size 的大小是0x600000,因为前面 2M 给 M33 使用,所以剩下 6M

image

配置 hpsram heap 使能 HPSRAM,并配置 hpsram heap start address 为 0xc000000,hpsram heap size 为 0x7FFFFF 表示将 HPSRAM 全部分配给 C906 核心使用。

image

将 HPSRAM 部分分配给 C906 使用

如果 HPSRAM 需要运行 DSP,可以分配部分给 C906 使用,配置 hpsram heap start address为 0xc400000,0xc000000 是 HPSRAM 的开始地址,前面 4M 已经分配给 DSP 使用;并配置 hpsram heap size 为 0x400000 意思是可以用的 HPSRAM 大小是 4M。

image

配置后的内存分布情况

编译打包烧录后,可以使用 free 命令查看配置后的内存分布情况。可以看到 HPSRAM 的8M内存全部分配给 C906 使用了,C906 一共可以用 4M LPSRAM + 8M HPSRAM = 12M RAM

image

这篇关于DshanMCU-R128s2启动与资源划分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526612

相关文章

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情