Zephyr 在 Renesas RZ/T2M RSK 评估板上的开发实战:板级支持、构建调试与烧录全指南
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
导读
本文以 Zephyr RTOS 仓库中 Renesas Starter Kit+ for RZ/T2M(rzt2m_rsk)开发板文档为核心,系统讲解这块面向高性能多功能 MPU 的评估板的硬件资源、Zephyr 板级支持(BSP)实现、UART/GPIO/存储等外设的连接方式,以及基于 J-Link 的构建、调试与烧录全流程。读完本文,你将能够用west build为rzt2m_rsk/r9a07g075m24gbg/cr520目标编译并运行 hello_world 示例,并掌握如何从设备树源码中追溯板载资源的实际引脚与分区配置。
硬件概览:Renesas Starter Kit+ for RZ/T2M
RZ/T2M 是 Renesas 面向高速处理与高精度控制场景的多功能 MPU。Renesas Starter Kit+ for RZ/T2M(简称 RSK+RZT2M)是一块围绕该 MPU 打造的评估与开发板,由 board.yml 可确认其官方全称与 SoC 型号:
- 板名:
rzt2m_rsk(Renesas Starter Kit+ for RZ/T2M) - 板载 SoC:
r9a07g075m24gbg(RZ/T2M MPU,320 引脚封装)
开发板通过 5V 输入供电,电源可来自直流电源插座(DC Power Jack)或 USB Type-C 接口。根据板级文档 index.rst,其核心特性如下:
- 板载 RZ/T2M MPU(R9A07G075M24GBG,320 引脚)
- 丰富的功能 IC:板载千兆以太网 PHY、Octal Flash 等,可以完整评估目标 MPU 的功能
- 通用扩展接口:Pmod、Grove、QWIIC、mikroBUS
- 排针(Pin Header):用户可自由与自己的硬件系统组合,评估 RZ/T2M
- 板载仿真器电路:只需将 USB 线连接 PC 即可开始程序调试(随板附带两根 USB 线:一根用于仿真器,另一根用于供电)
从 SoC 层设备树 r9a07g075.dtsi 可以看到 RZ/T2M 的核心计算资源:双核 Arm Cortex-R52(arm,cortex-r52),配合 GIC v3 中断控制器(arm,gic-v3)、Armv8 架构定时器,以及 512KB 带 ECC 的 ATCM(cpu0_atcm,基址 0x00000000)与 64KB BTCM。板级设备树将zephyr,sram指定到cpu0_atcm,RAM 容量为 2048KB(见 rzt2m_rsk_r9a07g075m24gbg_cr520.yaml)。
上图来自板级文档目录,清晰展示了 RZ/T2M 的架构分区:左侧为面向电机控制与安全(motor control w/safety)的外设群(CAN-FD、SPI、SCI、ΔΣ 接口、编码器接口、三角函数单元、12bit ADC 等),右侧为面向网络安全(network w/safety)的外设群(EtherCAT 从站控制器、带交换与 IEEE 1588 时间同步的 Ether MAC、USB HS 等),并包含 2MB Shared RAM 与 16 通道 ×2 单元的 DMA。
板载存储器件
文档明确列出了板载存储组件(括号内为容量):
| 存储器件 | 容量 |
|---|---|
| SDRAM | 256 Mbit |
| NOR Flash | 256 Mbit |
| Octa Flash | 512 Mbit |
| HyperRAM | 512 Mbit |
| QSPI Serial Flash | 512 Mbit |
| I2C EEPROM | 32 Kbit |
其中 QSPI Serial Flash(型号mx25u51245g,Macronix 512Mbit)在设备树中被配置为 Zephyr 的 flash 与代码分区来源,详情见后文“存储与启动分区”小节。
通信接口
板级文档列出的通信接口包括:
- 调试接口:J-Link OB、MIPI-10、MIPI-20
- 通信外设:Ethernet(以太网)、CAN、USB、RS485、UART、I2C、SPI
Zephyr 板级支持:设备树与配置结构
rzt2m_rsk板在 Zephyr 仓库中的目录结构(boards/renesas/rzt2m_rsk/)体现了标准的 Zephyr 板级布局:
- Kconfig.rzt2m_rsk:定义
BOARD_RZT2M_RSK并select SOC_R9A07G075M24GBG - board.cmake:声明默认调试器/烧录器为 J-Link
- board.yml:板的元数据(名称、厂商、SoC)
- rzt2m_rsk-pinctrl.dtsi:引脚复用配置
- rzt2m_rsk_r9a07g075m24gbg_cr520.dts:主设备树
- rzt2m_rsk_r9a07g075m24gbg_cr520_defconfig:板级默认 Kconfig 配置
- rzt2m_rsk_r9a07g075m24gbg_cr520.yaml:目标标识与支持的驱动列表
从 rzt2m_rsk_r9a07g075m24gbg_cr520.yaml 可以看到完整的板级标识信息:
identifier: rzt2m_rsk/r9a07g075m24gbg/cr520 name: Renesas Starter Kit+ for RZ/T2M type: mcu arch: arm ram: 2048 toolchain: - zephyr supported: - uart - gpio - pwm - adc - i2c - counter - dma - spi - watchdog vendor: renesas可见该板默认支持的 Zephyr 驱动子系统包括 UART、GPIO、PWM、ADC、I2C、Counter、DMA、SPI 与 Watchdog。
设备树核心:chosen 节点与别名
主设备树 rzt2m_rsk_r9a07g075m24gbg_cr520.dts 通过chosen与aliases建立系统级约定:
chosen { zephyr,sram = &cpu0_atcm; /* 使用 CPU0 的 512KB ATCM 作为 SRAM */ zephyr,flash = &mx25u51245g; /* 板载 QSPI Serial Flash */ zephyr,code-partition = &slot0_partition; zephyr,console = &uart0; /* 控制台走 UART0 */ zephyr,shell-uart = &uart0; }; aliases { led0 = &led0; sw0 = &sw1; watchdog0 = &wdt0; };这意味着:Zephyr 控制台与 shell 默认绑定 UART0;led0别名指向板载 LED0;sw0指向按键 SW1;看门狗wdt0可用作watchdog0。
板载 LED 与按键
设备树中定义了 4 个 GPIO LED(led0~led3)与 2 个按键(sw1、sw2):
leds { compatible = "gpio-leds"; led0: led0 { gpios = <&gpio19 6 0>; label = "led0"; }; led1: led1 { gpios = <&gpio19 4 0>; label = "led1"; }; led2: led2 { gpios = <&gpio20 0 0>; label = "led2"; }; led3: led3 { gpios = <&gpio23 4 0>; label = "led3"; }; }; gpio_keys { compatible = "gpio-keys"; sw1: sw1 { label = "sw1"; gpios = <&gpio10 5 0>; zephyr,code = <INPUT_KEY_0>; }; sw2: sw2 { label = "sw2"; gpios = <&gpio16 3 0>; zephyr,code = <INPUT_KEY_1>; }; };各 LED/按键对应的 GPIO 控制器与引脚号如下:
| 资源 | 设备树节点 | GPIO 引脚 |
|---|---|---|
| LED0 | led0 | gpio19 引脚 6 |
| LED1 | led1 | gpio19 引脚 4 |
| LED2 | led2 | gpio20 引脚 0 |
| LED3 | led3 | gpio23 引脚 4 |
| 按键 SW1 | sw1 | gpio10 引脚 5 |
| 按键 SW2 | sw2 | gpio16 引脚 3 |
按键通过irq2中断控制器(下降沿触发,见&irq2 { trigger-type = "falling"; })与gpio10的irqs = <&irq2 5>关联,SW1 被映射为 Zephyr input 子系统事件INPUT_KEY_0。
连接与 IO:默认引脚分配
板级文档明确指出,该板默认配置为:
- UART0 连接到 USB 串口(引脚 K18、K19)
- UART3 连接到 PMOD 排针(J25,引脚 H16、G20)
- LED定义为
led0、led1、led2、led3 - Zephyr 控制台使用 UART0
从引脚复用文件 rzt2m_rsk-pinctrl.dtsi 可以看到 UART0(SCI0)的引脚复用定义:
/omit-if-no-ref/ sci0_default: sci0_default { sci0-pinmux { pinmux = <RZT_PINMUX(PORT_16, 5, 1)>, /* TXD */ <RZT_PINMUX(PORT_16, 6, 2)>; /* RXD */ }; };即 UART0 的 TXD 位于 PORT_16 引脚 5、RXD 位于 PORT_16 引脚 6。UART0 在设备树中被配置为 115200 波特率:
&sci0 { pinctrl-0 = <&sci0_default>; pinctrl-names = "default"; status = "okay"; uart0: uart { current-speed = <115200>; status = "okay"; }; };板级默认配置 rzt2m_rsk_r9a07g075m24gbg_cr520_defconfig 也印证了控制台相关使能:
CONFIG_XIP=n # Enable UART driver CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y CONFIG_UART_INTERRUPT_DRIVEN=y # Enable console CONFIG_CONSOLE=y其中CONFIG_XIP=n表示程序从 RAM 执行(非 XIP 模式),这是由 Renesas 的启动流程决定的。其余外设的引脚复用同样定义在 pinctrl 文件中,例如:
- I2C1:
i2c1_default,SCL 位于 PORT_22 引脚 6、SDA 位于 PORT_22 引脚 7 - SPI2:
spi2_pins,CK2/MOSI2/MISO2/SSL20 位于 PORT_18 - XSPI0:
xspi0_default,覆盖 XSPI0_CKP/CKN/CS0/IO0~IO3/RESET0/RSTO0 等引脚 - GPT0/GPT4:
gpt0_pins、gpt4_pins,用于 PWM/定时器输出(GTIOCA/GTIOCB)
设备树中还使能了adc0、adc1、spi2、wdt0、i2c1等外设节点,与 yaml 中supported列表一一对应。
存储与启动分区
板载 QSPI Serial Flash(mx25u51245g,64MB 地址空间)在设备树中被声明为soc-nv-flash,通过 Renesasrenesas,rz-qspi-xspi控制器访问,映射地址范围0x60000000起 64MB。其分区布局如下(定义于 rzt2m_rsk_r9a07g075m24gbg_cr520.dts):
| 分区 | 标签 | 地址偏移 | 大小 |
|---|---|---|---|
| loader-param | loader_param | 0x00000000 | 0x4C(只读) |
| loader-program | loader_program | 0x0000004C | 56KB − 0x4C(只读) |
| image-0 | slot0_partition | 0x0000E000 | 4MB(只读) |
| storage | storage_partition | 0x0040E000 | 64MB − 4MB − 56KB |
其中slot0_partition被chosen的zephyr,code-partition引用,是应用固件的存放位置;storage_partition是剩余空间的存储分区。Flash 的write-block-size = <1>、erase-block-size = <4096>。
编程与调试:构建、调试与烧录
调试器与烧录器配置
board.cmake 中指定了默认调试/烧录工具链:
board_set_debugger_ifnset(jlink) board_set_flasher_ifnset(jlink) board_runner_args(jlink "--device=R9A07G075M2") include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)即默认使用J-Link作为调试器与烧录器,并为 J-Link 指定目标器件R9A07G075M2。
使用 J-Link OB(板载仿真器)
根据板级文档,要使用 RSK+RZT2M 上的 J-Link OB,需要执行以下步骤:
- 打开跳线 J9(用于切换调试连接)
- 将 micro-USB type-B 线连接到 J-Link OB 的 USB 接口(J10),此时 LED4 点亮
控制台
UART 端口通过USB-Serial 端口(CN16)访问,也就是上文所说的 UART0 连接 USB 串口(K18、K19)。
构建与调试 hello_world
板级文档给出了使用 hello_world 示例构建并调试的命令(对应:goals: build debug):
west build -b rzt2m_rsk/r9a07g075m24gbg/cr520 samples/hello_world west debug -b rzt2m_rsk/r9a07g075m24gbg/cr520(等价形式:在示例目录下执行west build -b rzt2m_rsk/r9a07g075m24gbg/cr520 -t build与-t debug。)编译目标为samples/hello_world,构建完成后即可通过 J-Link 连接目标板进入调试会话。hello_world 的运行输出(“Hello World! <board_name>”)会通过 UART0 出现在连接 CN16 的串口终端上,默认波特率 115200。
烧录(Flashing)
执行flash命令前,必须将板卡设置为 xSPI 启动模式。随后运行:
west build -b rzt2m_rsk/r9a07g075m24gbg/cr520 samples/hello_world west flash -b rzt2m_rsk/r9a07g075m24gbg/cr520烧录过程由 J-Link 完成,固件被写入slot0_partition对应的 QSPI Flash 区域(偏移 0x0000E000 起 4MB),之后板卡可从 xSPI 启动加载应用。
常见问题提示
- 若
west debug无法连接,请确认 J9 跳线已断开、J10 已连接且 LED4 点亮; - 若串口无输出,请确认终端波特率设置为 115200,并检查连接的是 CN16(USB-Serial)而非其他串口;
- 若烧录失败,请确认板卡已切换为 xSPI 启动模式。
参考资源
- 板级文档:boards/renesas/rzt2m_rsk/doc/index.rst
- 主设备树:rzt2m_rsk_r9a07g075m24gbg_cr520.dts
- 引脚复用:rzt2m_rsk-pinctrl.dtsi
- 板级 Kconfig:Kconfig.rzt2m_rsk
- 默认配置:rzt2m_rsk_r9a07g075m24gbg_cr520_defconfig
- 构建与烧录工具:board.cmake
- SoC 设备树:r9a07g075.dtsi
RZ/T2M 的详细产品文档(数据手册、用户手册)可在 Renesas 官方 RZ/T2M 产品页面获取(板级文档中的RZT2M Product page链接指向该页面)。通过本文介绍的 BSP 结构与命令流程,你可以快速在 RSK+RZT2M 上运行 Zephyr 应用,并在此基础上扩展电机控制、工业以太网等 RZ/T2M 的典型场景。
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考