S100的MCU侧四个物理核如何充分利用起来?

你好!针对你关于 RDK S100 MCU 侧四个物理核利用 的问题,结合社区现有资料和 S100 的架构特性,为你做如下解答:

核心结论

  1. MCU1 (Split-Lock 架构):官方 SDK 默认支持 将其作为两个独立核使用,但不支持分别运行两个独立的 FreeRTOS 系统。官方方案是在一个 FreeRTOS 系统内,将两个核配置为 AMP(非对称多处理)模式,即一个核做主核(Master)运行 FreeRTOS 调度,另一个核做从核(Slave)运行裸机代码或特定任务,通过共享内存和中断通信。
  2. MCU0 (DCLS 架构)不对普通用户开放开发。MCU0 运行的是地平线私有的实时操作系统(非 FreeRTOS),主要负责芯片启动、电源管理、安全启动、视频编解码底层控制等核心底层任务。用户无法在此运行自定义 FreeRTOS 或进行功能开发。

详细解答与技术路径

1. 关于 MCU1 (Split-Lock) 的双核利用

现状:
目前的官方 SDK (mcu-community) 默认配置是将 MCU1 的两个核作为一个整体(Lockstep 或 Split 模式下的单系统)来编译和运行。

可行性与难度:

  • 双 FreeRTOS 实例(不可行/极难):在每个物理核上分别运行一个完整的 FreeRTOS 内核(即两个独立的 OS 实例)在 S100 上没有官方支持,且实现难度极大。你需要解决两个 OS 实例之间的中断路由、共享资源竞争、启动时序等底层问题,这通常涉及修改芯片的 BootROM 行为和底层初始化代码,需要芯片原厂深度支持。
  • AMP 模式(可行/推荐):官方推荐的“充分利用”方式是 AMP (Asymmetric Multi-Processing)
    • 架构:Core A (Master) 运行 FreeRTOS,Core B (Slave) 运行裸机循环或特定高实时性任务。
    • 实现:需要在编译配置中开启 AMP 选项,并编写 Core B 的入口代码。两个核之间通过共享内存(Shared Memory)和 Mailbox 中断进行通信。
    • 官方支持:这是地平线技术支持可以协助的范围。社区已有相关讨论涉及 MCU1 的多核任务分配,但具体 AMP 配置需参考最新版 SDK 文档或联系技术支持获取 Split-Lock 模式的详细配置指南。

建议操作:

  1. 检查你的 SDK 版本(建议更新至最新 v4.0.x 或以上)。
  2. Build/FreeRtos_mcu1_community 目录下,查看 build_freertos.py 的脚本参数,寻找是否有 ampsplit 相关的编译选项。
  3. 查阅 SDK 中 docs 文件夹下关于 “Multi-core” 或 “AMP” 的说明。

2. 关于 MCU0 (DCLS) 的开发

现状:
MCU0 是 S100 的系统控制核心,运行的是地平线自研的实时 OS(并非 FreeRTOS),负责:

  • 系统上电启动流程
  • 电源管理 (PMIC 控制)
  • 安全启动 (Secure Boot)
  • 多媒体底层编解码控制
  • 与 Linux 侧的 Remoteproc 通信

用户开发权限:

  • 不可用:MCU0 的代码不对外开放,用户无法获取源码,也无法在上面运行自定义的 FreeRTOS 或应用程序。
  • 接口方式:用户通过 Linux 侧的 remoteproc 框架与 MCU0 交互(如启动/停止 MCU1,查看状态),或通过 MCU1 间接与底层通信。

社区佐证:
社区帖子 请问 RDK S100 的 MCU1 的源码从哪里获取? 中明确提到 MCU0 源码一般不对外开放。


推荐行动方案

如果你想充分利用 S100 的 MCU 算力,建议按以下路径进行:

  1. 主攻 MCU1 的 AMP 开发

    • 联系地瓜技术支持(通过工单或社区私信),明确询问:“如何在 SDK 中配置 MCU1 的 Split-Lock 模式为 AMP 架构?是否有 Core1 裸机运行的 Example?”
    • 目标:将高实时性、低延迟的控制任务(如电机 FOC 电流环)放在从核(Slave Core)裸机运行,将通信、逻辑判断等任务放在主核(Master Core)的 FreeRTOS 中。
  2. 利用 Linux 侧算力

    • S100 的强项在于 AI 和 Linux 应用。复杂的决策、感知算法应部署在 Linux (A53) 侧。
    • MCU 侧仅负责高频率、确定性的底层控制(如 10kHz+ 的电机控制、传感器数据采集)。
  3. 参考现有资源

总结

  • MCU1 双 FreeRTOS?不建议/不支持。请采用 AMP 模式(1 个 FreeRTOS + 1 个裸机核)。
  • MCU0 能开发吗?不能。这是系统保留核,不开放给用户。
  • 技术支持能帮吗?。针对 MCU1 的 AMP 配置和底层驱动开发,技术支持可以提供指导,但不会帮你写业务代码。

建议你在该帖子下补充回复,说明你具体的应用场景(例如:需要控制几个电机?采样频率多少?),这样技术支持或社区大佬能给出更具体的架构建议。