[开发工具] 瑞萨MicroROS(6)在RA-ECO-6M4上部署Zephyr

[复制链接]
252|6
YUpif 发表于 2026-6-26 16:38 | 显示全部楼层 |阅读模式
瑞萨, M4, , ,

这次的目标,是在 RA-ECO-RA6M4 开发板上跑通 Zephyr,为后续在 Zephyr 上接入 micro-ROS 做准备。此前我们已经在 RA6M4 上用 e2 studio + FSP 跑通过micro-ROS UART通信,这次我们开始验证 RA6M4 是否可以通过 Zephyr 运行,并最终作为 micro-ROS 的底层运行环境。

基础判断

因为我之前有做过瑞萨RA的Zephyr开发,因此这里我不会细讲Zephyr环境的部署问题,我只简单提一嘴,从使用层来看,Zephyr只要部署成功,其实是一个很方便的开发工具,在芯片原厂已经完成对芯片的支持后,任意的对应开发板只需要写一个简单的板级支持包就可以开始轻松的玩Zephyr了

因此首先确认一个关键前提:RA6M4 这颗 MCU 在 Zephyr 中已经有官方支持。我们只需要为 RA-ECO-RA6M4 这块开发板补充一份简易的板级支持文件。(其实瑞萨RA全系列都支持Zephyr,这个还是很不错的)

本次使用的是 Windows 下已经验证可用的 Zephyr 环境:
当前 Zephyr 版本为:

Zephyr v4.2.0

创建 RA-ECO-RA6M4 板级支持

接下来我们开始为 RA-ECO-RA6M4 创建板级支持包文件,这里我们给这个包取名为out-of-tree board:

这里我们先把官方的EK-RA6M4的板级支持文件包拿过来作为我们修改的框架:

board.yml
ra_eco_ra6m4.yaml
Kconfig.ra_eco_ra6m4
board.cmake
ra_eco_ra6m4_defconfig
ra_eco_ra6m4.dts
ra_eco_ra6m4-pinctrl.dtsi

其中,board.ymlra_eco_ra6m4.yaml 用来描述开发板名称、厂商、架构、RAM/Flash 等基本信息;Kconfig.ra_eco_ra6m4 用来选择 RA6M4 SoC;board.cmake 配置 J-Link 烧录方式;ra_eco_ra6m4_defconfig 打开串口、控制台、GPIO 等基础功能;ra_eco_ra6m4.dtsra_eco_ra6m4-pinctrl.dtsi 则是最关键的板级硬件描述文件。

最小目标

这次没有一开始就加入 LED、按键、I2C、USB 或 Ethernet,而是先做最小可运行配置。第一阶段目标非常明确:让 Zephyr 可以启动,并通过板载 CH340 对应的 UART 输出 Hello World

根据之前在 e2 studio/FSP 中验证过的硬件连接,RA-ECO-RA6M4 的串口使用 SCI9,对应引脚为:

TXD9 = P109
RXD9 = P110

因此在 ra_eco_ra6m4-pinctrl.dtsi 中配置 SCI9 的 pinctrl:

&pinctrl {
	sci9_default: sci9_default {
		group1 {
			/* TXD9 P109, RXD9 P110 */
			psels = <RA_PSEL(RA_PSEL_SCI_9, 1, 9)>,
				<RA_PSEL(RA_PSEL_SCI_9, 1, 10)>;
		};
	};
};

ra_eco_ra6m4.dts 中,把 Zephyr 的默认 console 指向 uart9

chosen {
	zephyr,sram = &sram0;
	zephyr,flash-controller = &flash1;
	zephyr,flash = &flash0;
	zephyr,console = &uart9;
	zephyr,shell-uart = &uart9;
};

同时启用 SCI9:

&sci9 {
	pinctrl-0 = <&sci9_default>;
	pinctrl-names = "default";
	status = "okay";

	uart9: uart {
		current-speed = <115200>;
		status = "okay";
	};
};

时钟配置

RA-ECO-RA6M4 使用的是 12 MHz 外部晶振。参考之前 FSP 工程中的时钟配置,我们将 Zephyr 中的 XTAL 设置为 12 MHz,并配置 PLL:

&xtal {
	clock-frequency = <DT_FREQ_M(12)>;
	mosel = <0>;
	#clock-cells = <0>;
	status = "okay";
};

&pll {
	clocks = <&xtal>;
	div = <2>;
	mul = <30 0>;
	status = "okay";
};

第一次编译 RA-ECO-RA6M4 自定义 board 时,Zephyr 已经能识别我们的 board,但出现了一个时钟断言错误。原因是我们配置后的系统时钟为 180 MHz,而 Zephyr 默认仍按官方 EK-RA6M4 的 200 MHz 配置进行检查。

解决方法是在 ra_eco_ra6m4_defconfig 中明确设置:

CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=180000000

编译 RA-ECO-RA6M4 Hello World

修正时钟配置后,使用以下命令重新编译:

west build -p always -b ra_eco_ra6m4 D:\Zephyr\external\zephyr\samples\hello_world -d D:\Zephyr\build_ra_eco_ra6m4_hello -- '-DBOARD_ROOT:STRING=D:/Zephyr'

这里文件路径就按照你们自己的文件路径来编就可以了,后面不再说这个事情。

这里还有一个小问题:在 Windows PowerShell 中传递 BOARD_ROOT 参数时,反斜杠和冒号容易被 CMake 或 PowerShell 解析出问题。因此最终使用了带引号的写法:

'-DBOARD_ROOT:STRING=D:/Zephyr'

这样 west 就能正确找到放在 D:\Zephyr\boards 下的 out-of-tree board。

烧录验证

随后通过外接 J-Link 进行烧录:

west flash -d D:\Zephyr\build_ra_eco_ra6m4_hello

烧录过程正常完成,J-Link runner 成功识别并写入固件。

最后,通过 CH340 串口查看输出。串口参数为:

115200 8N1

按下开发板复位键后,串口终端成功输出:

*** Booting Zephyr OS build v4.2.0 ***
Hello World! ra_eco_ra6m4/r7fa6m4af3cfb

接下来我们就准备接入 micro_ros_zephyr_module,通过同样的 SCI9 UART 通道连接 micro-ROS Agent,实现和之前 FSP 工程一样的 /int_publisher 发布功能。

韶华倾负 发表于 2026-6-26 19:19 | 显示全部楼层
楼主这篇太实用了,之前我自己折腾 out-of-tree 板卡的时候,在时钟频率断言那里卡了好久,一直没反应过来是 defconfig 里没手动指定系统时钟,跟着你这思路一下就通了。还有 Windows 下传 BOARD_ROOT 的反斜杠坑我也踩过,当时折腾半天才发现是路径解析的问题。期待后续 micro-ROS 接入的教程,蹲更新!
穷得掉渣大侠 发表于 2026-7-11 10:58 | 显示全部楼层
看来你已经成功在RA-ECO-RA6M4上运行Zephyr了,下一步接入micro-ROS应该问题不大。期待你的进一步分享。
流鱼 发表于 2026-7-13 10:36 | 显示全部楼层
穷得掉渣大侠 发表于 2026-7-11 10:58
看来你已经成功在RA-ECO-RA6M4上运行Zephyr了,下一步接入micro-ROS应该问题不大。期待你的进一步分享。 ...

现在看来其实还是有点问题的,因为这一篇是在windows下运行的Zephyr,后面接入MciroROS的时候一堆问题,最后用linux zephyr才成功接入
幻境之眼 发表于 2026-9-2 21:06 | 显示全部楼层
SCI9配置对了,别忘了检查时钟源和时钟分频配置,这些对UART通信很重要。
OceanDepths 发表于 2026-9-3 12:00 | 显示全部楼层
SCI9时钟配置要小心,我在之前项目中遇到过时钟源错配导致通信失败的问题,记得仔细检查。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

9

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0