在资料手册1.1.1中开发者套件接口介绍都是A核也就是linux端的外设吗
不是。1.1.1 介绍的是整块 S100 开发者套件,里面既有 Main 域(A 核/Linux)接口,也有 MCU 域接口。主板上的 J22 16-Pin 已经引出了 MCU 的 I2C9、SPI3、UART5、PWM6/7 和 GPIO;J23 100-Pin 用来连接 MCU 扩展板,再引出 CAN5~CAN9、ADC、MCU 域网口等接口。所以不是“MCU 外设只有扩展板才有”,只是部分 MCU 接口需要通过扩展板才能方便接出来。
不是的,主板本身就引出了 MCU 域外设,扩展板只是把信号转成好用接口。
1.1.1 里的接口大部分是 Main 域(A 核 Linux)的,比如 40-Pin(J24)、HDMI、USB、M.2、相机口;但有两个是 MCU 域的:
- J22(16-Pin MCU Expansion Header):I2C9、SPI3、UART5、PWM6/7、2 路 MCU GPIO,不用扩展板也能直接接外设用。
- J23(100-Pin MCU Expansion Connector):EMAC RGMII、I2C8/I2C9、SPI2/4/5、CAN5~CAN9、ADC、PWM、GPIO 全在这上面。
MCU 接口扩展板的作用只是把 J23 的信号转成标准接口:5 路带 120Ω 终端电阻的 CAN FD 连接器、MCU 域 RJ45 网口、30-Pin 排针(ADC/IIC/SPI),另外板载一颗 BMI088 IMU。所以如果你只需要 J22 那几路,或者愿意自己做 J23 的转接(FPC/底板),不装扩展板也能用 MCU 外设;要方便地用 CAN 和 MCU 网口就得靠扩展板。
另外 Type-C 调试口(J16)里也包含 MCU 域调试串口,J15 JTAG 是 Main & MCU 双域的。
文档参考:
- 开发者套件接口说明:1.1.1 开发者套件 | RDK S100/S600 DOC
- MCU 接口扩展板:1.1.3 MCU 接口扩展板 | RDK S100/S600 DOC
需要一个MCU端的网口,只能通过外接扩展板才有网口是吗?可以配置Main域的网口给MCU用吗
是的,在 RDK S100 开发者套件形态下,MCU 域的 RJ45 千兆网口只在「MCU 接口扩展板」上提供(U4 口,扩展板还带 5 路 CAN FD 和 30-pin 的 ADC/I2C/SPI)。注意以太网控制器本身在 SoC 的 MCU 域里(MCU1 固件的 Eth_Init/McalCdd/Ethernet 驱动就是走这个口),扩展板只是把它引出——如果你是自研载板,可以不依赖扩展板、按硬件设计直接把这路 GMAC/PHY 引出来。
Main 域网口不能配置给 MCU 用:两者是独立的以太网控制器 + PHY 硬件实例,主板上的 RJ45 接的是 Main 域那路,由 Linux 驱动管理,MCU 域驱动接管不了。如果 MCU 侧只是需要"能收发网络数据",可行的替代思路是走 IPC(MCU ↔ Acore)把数据交给 Linux 侧、借 Main 域网络转发,但这需要自己开发协议,官方没有现成方案。建议优先评估直接用扩展板网口。
参考文档:
- MCU 接口扩展板:1.1.3 MCU 接口扩展板 | RDK S100/S600 DOC
- MCU Eth 使用指南:7.5.12 Eth 使用指南 | RDK S100/S600 DOC
- MCU IPC 使用指南:7.5.9 IPC 使用指南 | RDK S100/S600 DOC
是的,S100 开发者套件上的 MCU 域实体网口需要通过 J23 接 MCU 扩展板,由扩展板上的 U4 RJ45 引出。主板上的 Main 域网口属于另一套 MAC/PHY,不能直接改配置交给 MCU 使用。
如果只是让 MCU 收发网络数据,可以由 A 核使用 Main 域网口,再通过 IPC 和 MCU 交换数据,但转发逻辑需要自行开发。
MCU Eth:https://developer.d-robotics.cc/rdk_s_doc/Advanced_development/mcu_development/mcu_eth
MCU IPC:https://developer.d-robotics.cc/rdk_s_doc/Advanced_development/mcu_development/mcu_ipc
在下载的mcu_community的sdk里没找到Eth_Init/McalCdd/Ethernet这个目录呢?驱动是都封装到libMcalCdd.a里面了吗
是的,你理解得没错。社区版 SDK 里 MCU 驱动(含以太网)是以静态库形式发布的,没有 McalCdd 源码目录:
- 社区版目录里只有
Library/(驱动和 Service 的静态库,即libMcalCdd.a这类)+Include/(对应头文件),samples/里有 Can、IPC、Eth 等驱动的使用样例,可以直接参考样例调Eth_Init相关接口。 McalCdd/、Service/、Platform/等源码目录是企业版专有,官方文档有明确说明:7.5.1 MCU 代码包结构介绍
如果只是用以太网功能,走 samples/ 里的 Eth 例程 + 静态库就够了;如果确实需要驱动源码做深度定制,可以报名 DGP 开发者计划对接商业版支持:https://developer.d-robotics.cc/dgp
我想问下,Main Domain和MCU Domain的物理接口是完全隔离的吗?也就是说A核的NoC总线上是看不到MCU的硬件IP Core?如果A核访问MCU专属的GMAC或者SPI,必须是A核 → MCU → MCU Domain?
是的,两个问题分开说:
1. MCU 外设是不是只在扩展板上?
S100 上 MCU 域的对外接口(5 路 CAN FD、MCU 域千兆 RJ45、30-pin 引出的 ADC/I2C/SPI)全部在 MCU 接口扩展板上引出,通过 FPC 接主板 J23;主板自身 40PIN 属于 Main 域。
文档:1.1.3 MCU 接口扩展板 | RDK S100/S600 DOC
2. Main 域和 MCU 域是否隔离?
NoC 总线层面是否物理隔离,官方文档没有明确描述,这点不好下断言。但从软件架构看,实际效果就是你猜的那样——A 核不直接摸 MCU 域外设的寄存器,路径是 A 核 ↔ MCU(R52+,FreeRTOS,分 MCU0/MCU1)走核间通信:
- CAN:所有 CAN 控制器都在 MCU 域,由 MCU 侧驱动收发;A 核要用时,MCU 侧 CAN2IPC 模块打包后经 IPC 转发到 A 核,A 核通过 CANHAL 库以"虚拟 CAN 设备"方式读写,Linux 设备树里并没有这些 CAN 控制器节点。
- 以太网:扩展板上的 RJ45 是 MCU 域网口,由 MCU1 的 Eth_Init 负责;A 核 Main 域另有自己的双 GMAC(eth0/eth1,
hobot,super-gmac,Linux 直接驱动),两者独立,A 核不经过 MCU 域 GMAC。 - SPI5 / I2C8 / I2C9(扩展板 30-pin、BMI088 那路):模块划分表里明确归 MCU1。
- MCU1 的启停也是 A 核通过 remoteproc 框架通知 MCU0 来执行的。
参考:
- CAN 转发架构:7.5.10 CAN 使用指南 | RDK S100/S600 DOC
- MCU 框架与模块划分:7.5.2 MCU 快速入门指南 | RDK S100/S600 DOC
所以结论:A 核访问 MCU 域专属外设,官方给的路径就是「A 核 → IPC → MCU」,而不是把 IP Core 挂到 A 核总线上直接访问;需要更低延迟或直通访问的场景,建议实测确认或找官方评估。
@yangyang23 是的,社区版驱动主要通过 Library/ 静态库和 Include/ 头文件提供,缺少 McalCdd/Ethernet 源码目录是正常的;Eth_Init 是函数名,收发用法可看 samples/Eth/Eth_Test/Eth_test.c。具体是否打进你这版的 libMcalCdd.a,要以对应库的符号为准。
@jasonuiao 外设归属 MCU 域,不等于 A 核在 NoC 上绝对无法访问。公开资料不足以确认 GMAC/SPI 的跨域直访权限;按现有 MCU 驱动方案使用时,可由 A 核经 IPC 请求 MCU 操作,直访方案需要芯片研发确认。
代码包:https://developer.d-robotics.cc/rdk_s_doc/Advanced_development/mcu_development/code_release
Eth 示例:https://developer.d-robotics.cc/rdk_s_doc/Advanced_development/mcu_development/mcu_eth
不是“只有外接扩展板才有”。MCU 外设是 MCU 域本身的能力,能不能在开发板上直接用,主要看对应引脚/接口有没有被板卡引出。
手册 1.1.1 的“开发者套件接口介绍”通常讲的是开发套件上 A 核/Linux 侧可见、可用的接口;MCU 侧外设(比如 PWM 输入捕获、WDT、CAN 等)要另看 MCU 开发文档、引脚复用/扩展板引脚定义。建议到 RDK 资料中心查 S100 手册里的 MCU/引脚定义章节。