Zephyr 在 Infineon KIT_PSC3M5_EVK(PSOC™ Control C3M5)评估板上的开发实战指南
2026/9/18 14:33:44 网站建设 项目流程

Zephyr 在 Infineon KIT_PSC3M5_EVK(PSOC™ Control C3M5)评估板上的开发实战指南

【免费下载链接】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

导读

本文围绕 Infineon KIT_PSC3M5_EVK 评估板在 Zephyr RTOS 中的板级支持展开,系统讲解该板卡基于 PSOC™ Control C3M5(PSC3M5FDS2AFQ1)Cortex-M33 主控的硬件资源、三种板级变体、默认外设映射、系统时钟树、构建烧录与调试流程,以及基于 ROM Boot(FLASH_BOOT)与 MCUboot 的安全启动签名方案。读完本文,你将掌握如何在 Zephyr 中为目标板编译并烧录应用程序、如何启用 NOR Flash 变体并完成硬件改造,以及如何使用 Infineon EdgeProtect Tools 对镜像进行签名与安全启动配置。


板卡概述:面向工业控制与电机驱动的评估平台

KIT_PSC3M5_EVK 是 Infineon 推出的评估套件,核心 SoC 为 PSOC™ Control C3M5(型号 PSC3M5FDS2AFQ1),搭载一颗主频最高240 MHzArm® Cortex®-M33内核,专门面向工业控制与电机驱动类应用设计。

板卡关键硬件指标如下:

  • SoC:PSOC™ Control C3M5(PSC3M5FDS2AFQ1)
  • CPU:Arm® Cortex®-M33 @ 240 MHz
  • Flash:256 KB
  • SRAM:64 KB
  • 连接性:2× CAN FD、6× SCB(可配置为 UART/SPI/I2C)
  • 外设:高分辨率定时器、可编程模拟子系统、比较器
  • 安全:Arm® TrustZone®-M
  • 调试:板载 KitProg3(SWD + UART 桥接)
  • 供电:USB 供电(3.3V 工作电压)
  • 接口:USB Type-C(编程与供电一体)
  • 扩展:Arduino Uno R3、mikroBUS、两路 40-pin 排针
  • 用户 IO:两颗用户 LED、两颗用户按键、电位器

从板级元数据(kit_psc3m5_evk.yaml)可以看到,Zephyr 已为该板声明支持cangpiospitimeruartdmacomparatorrtc等外设类别,工具链支持 Zephyr SDK 与 GNU Arm Embedded。

套件内容

  • PSOC™ Control C3M5 评估板
  • USB Type-A 转 Type-C 线缆
  • 跳线若干
  • 快速入门指南(印刷于包装上)

板级变体

KIT_PSC3M5_EVK 在 Zephyr 中支持三种构建目标(对应 board.yml 中声明的 SoC 变体):

变体说明
kit_psc3m5_evkSecure 变体(默认),启用 Arm® TrustZone®-M 安全态
kit_psc3m5_evk/psc3m5fds2afq1/nsNon-secure 变体,面向非安全态应用
kit_psc3m5_evk/psc3m5fds2afq1/norflashNOR Flash 变体,需要执行板卡硬件改造

默认的 Secure 变体在 kit_psc3m5_evk_defconfig 中通过CONFIG_TRUSTED_EXECUTION_SECURE=yCONFIG_ARM_TRUSTZONE_M=y开启安全执行环境,同时默认启用 Infineon MXCRYPTOLITE 的 TRNG 熵源(CONFIG_ENTROPY_INFINEON_MXCRYPTOLITE_TRNG=y)与加密加速(CONFIG_CRYPTO_INFINEON_MXCRYPTOLITE=y);而非安全变体则在 kit_psc3m5_evk_psc3m5fds2afq1_ns_defconfig 中通过CONFIG_TRUSTED_EXECUTION_NONSECURE=y配置。


连接与 IO 映射

用户 LED

名称GPIO Pin极性
LED0P8.5Active Low
LED1P8.4Active Low

在 kit_psc3m5_evk-common.dtsi 中,两颗 LED 通过gpio-leds兼容节点声明,并分别被别名到led0led1

leds { compatible = "gpio-leds"; user_led0: led_0 { label = "LED_0"; gpios = <&gpio_prt8 5 GPIO_ACTIVE_LOW>; }; user_led1: led_1 { label = "LED_1"; gpios = <&gpio_prt8 4 GPIO_ACTIVE_LOW>; }; };

用户按键

名称GPIO Pin极性
SW1P5.0Active Low
SW2P2.0Active Low

按键在 devicetree 中以gpio-keys兼容节点声明,并带有上拉与输入事件码(INPUT_KEY_0/INPUT_KEY_1),方便直接接入 Zephyr Input 子系统:

gpio_keys { compatible = "gpio-keys"; user_bt0: user_btn0 { label = "SW_1"; gpios = <&gpio_prt5 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; zephyr,code = <INPUT_KEY_0>; }; user_bt1: user_btn1 { label = "SW_2"; gpios = <&gpio_prt2 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; zephyr,code = <INPUT_KEY_1>; }; };

默认 Zephyr 外设映射

Pin功能用途
P6.3SCB3 UART TXConsole TX
P6.2SCB3 UART RXConsole RX
P6.1SCB3 UART RTSConsole RTS
P6.0SCB3 UART CTSConsole CTS
P8.5GPIOLED0
P8.4GPIOLED1
P5.0GPIOButton SW1
P2.0GPIOButton SW2

UART 引脚在 kit_psc3m5_evk-pinctrl.dtsi 中配置了驱动模式:TX/RTS 为推挽输出(drive-push-pull),RX/CTS 使能输入(input-enable)。


系统时钟树

PSOC™ Control C3M5 默认以IMO(Internal Main Oscillator)作为系统时钟源,Zephyr 板级描述中的完整时钟路径为:

  • IMO(内部主振荡器):8 MHz
  • FLL:IMO → 100 MHz
  • CLK_HF0:180 MHz(系统时钟)
  • CLK_HF3:240 MHz(高性能外设时钟)

在 kit_psc3m5_evk-common.dtsi 中可以找到与文档对应的时钟配置证据:fll0被配置为 96 MHz 输出;dpll_lp0位于 CLKPATH1,配置为 180 MHz(feedback-div = <45>; reference-div = <6>; output-div = <2>);dpll_lp1位于 CLKPATH2,配置为 240 MHz(feedback-div = <60>; reference-div = <6>; output-div = <2>)。

其中CLK_HF2从 CLKPATH2(240 MHz)三分频得到 80 MHz,专门用于驱动外设组 4(UART、CAN、SPI、计数器),以保证符合 CiA 601-3 规范的 CAN FD 位速率;UART 驱动会动态重算其外设分频系数。CLK_HF4 则为 NOR Flash 变体中的 SCB5 SPI 外设时钟源(见 kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts)。


串口(Console)

PSOC™ Control C3M5 拥有 6 个 SCB(Serial Communication Block)接口,每个 SCB 均可配置为 UART、SPI 或 I2C。Zephyr 控制台输出被分配至SCB3(设备树节点uart3),经 KitProg3 的 USB-UART 桥接路由到上位机。

在 kit_psc3m5_evk-common.dtsi 中,SCB3 被配置为:

uart3: &scb3 { compatible = "infineon,uart"; status = "okay"; current-speed = <115200>; clocks = <&peri0_group4_8bit_0>; pinctrl-0 = <&p6_3_scb3_uart_tx &p6_2_scb3_uart_rx &p6_1_scb3_uart_rts &p6_0_scb3_uart_cts>; pinctrl-names = "default"; };

并在 kit_psc3m5_evk.dts 的chosen节点中被指定为控制台与 shell 串口:

chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,flash-controller = &flash_controller; zephyr,console = &uart3; zephyr,shell-uart = &uart3; zephyr,canbus = &can1; zephyr,entropy = &mxcryptolite_trng; };

默认通信参数为115200 8N1(8 数据位、无校验、1 停止位)。


构建应用程序

以 Zephyr 的hello_world示例为例,在 Zephyr 环境(已安装 west 并完成 SDK 配置)下执行:

west build -b kit_psc3m5_evk -p always samples/hello_world
  • -b kit_psc3m5_evk指定目标板(默认 Secure 变体);
  • -p always每次都进行 pristine 构建,确保干净输出。

编译产物默认输出在build/zephyr/目录下。


NOR Flash 变体

kit_psc3m5_evk/psc3m5fds2afq1/norflash变体启用了一片通过SCB5连接的外部S25FL128P SPI NOR Flash(16 MB)。该 Flash 被暴露为一个 storage 分区(storage_partition),适用于 Zephyr 的 Flash API、文件系统或 Settings 存储。

注意:该变体需要硬件改造。未经改造的板卡应始终使用默认目标(kit_psc3m5_evk)。

NOR Flash 板卡改造(Kit Rework)

根据 KIT_PSC3M5_EVK 用户指南(Table 7),需要按下表进行电阻改造,以启用 SCB5 SPI NOR Flash 接口。该改造会将LPCOMP1 输入断开,并复用这些引脚作为 SPI 接口。

参考位号(Reference Designator)装配(Assembly)
R96Stuff
R105Stuff
R101Stuff
R114Stuff
R113DNI
R95DNI
R104DNI
R100DNI

(“Stuff”表示焊装电阻,“DNI”表示不焊装/移除。)

改造完成后,SPI 与 Flash 节点在 kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts 中被启用:

spi5: &scb5 { #address-cells = <1>; #size-cells = <0>; compatible = "infineon,spi"; status = "okay"; pinctrl-0 = <&p8_1_scb5_spi_m_mosi &p8_2_scb5_spi_m_miso &p8_3_scb5_spi_m_clk>; pinctrl-names = "default"; cs-gpios = <&gpio_prt8 0 GPIO_ACTIVE_LOW>; clocks = <&peri0_group6_16_5bit_0>; s25fl128p: s25fl128p@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <DT_FREQ_M(8)>; jedec-id = [01 60 18]; size = <0x8000000>; /* 128 Mbit */ partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; storage_partition: partition@0 { label = "storage"; reg = <0x0 DT_SIZE_M(16)>; }; }; }; };

同时该变体的 Kconfig(kit_psc3m5_evk_psc3m5fds2afq1_norflash_defconfig)开启CONFIG_SPI=yCONFIG_SPI_NOR=y

构建 NOR Flash 变体

使用flash_shell示例验证 NOR Flash 的读写操作:

west build -b kit_psc3m5_evk/psc3m5fds2afq1/norflash -p always samples/drivers/flash_shell

编程与调试

KIT_PSC3M5_EVK 板载KitProg3编程器/调试器,可用于对 PSOC™ Control C3M5 的 Cortex-M33 内核进行编程与调试。Zephyr 侧通过 OpenOCD runner 支持烧录,board.cmake 中指定了--target-handle=TARGET.cm33并引入openocd.board.cmake

Infineon OpenOCD 安装

烧录依赖Infineon OpenOCD(标准 OpenOCD 不含 PSOC Control C3 目标支持),有两种获取方式:

  1. ModusToolbox™ Programming Tools 软件包:自带 Infineon OpenOCD;
  2. 独立安装:下载 Infineon OpenOCD 对应系统的发布版本,解压到任意位置。

Linux 提示:Linux 需要为 KitProg3 配置设备访问权限。ModusToolbox™ Programming Tools 安装时会自动完成;独立安装 OpenOCD 时,可手动执行脚本openocd/udev_rules/install_rules.sh完成配置。

配置控制台

将 USB 线缆从 PC 连接到板卡 KitProg3 的 USB Type-C 接口(J15),然后使用任意串口终端(minicom、PuTTY 等)连接,参数如下:

  • Speed(波特率):115200
  • Data(数据位):8 bits
  • Parity(校验):None
  • Stop bits(停止位):1

烧录

Windows

一次性配置 Infineon OpenOCD 路径:

west config build.cmake-args -- "-DOPENOCD=path/to/infineon/openocd/bin/openocd.exe"

构建并烧录:

west build -b kit_psc3m5_evk -p always samples/hello_world west flash
Linux

一次性配置 Infineon OpenOCD 路径:

west config build.cmake-args -- -DOPENOCD=path/to/infineon/openocd/bin/openocd

构建并烧录:

west build -b kit_psc3m5_evk -p always samples/hello_world west flash

烧录成功后,串口控制台应输出:

*** Booting Zephyr OS build vX.Y.Z *** Hello World! kit_psc3m5_evk

调试

通过 GDB 启动调试会话:

west build -b kit_psc3m5_evk -p always samples/hello_world west debug

GDB 控制台启动后,即可在 PSOC™ Control C3M5 的 Cortex-M33 内核上设置断点并进行标准 GDB 调试。


安全启动(Secure Boot)

PSOC™ Control C3M5 内置 ROM 启动阶段FLASH_BOOT,负责认证并启动内部 Flash 中的第一个 OEM 应用。

BOOT_SIMPLE_APP 模式

设备默认工作于BOOT_SIMPLE_APP模式:FLASH_BOOT 直接加载内部 Flash 起始处的应用镜像,不进行任何加密签名校验。镜像采用基本的 Cortex-M33 格式(中断向量表 + 代码)。在该模式下,标准的 Zephyr 构建无需签名即可直接运行。

当通过 sysbuild 使用MCUboot引导加载程序时,MCUboot 本身是 FLASH_BOOT 启动的第一个应用;随后 MCUboot 使用标准 Zephyrimgtool签名流程独立认证位于slot0_partition中的应用镜像。该配置无需 OEM 密钥预置,BOOT_SIMPLE_APP模式同样适用,MCUboot 二进制在无 BootROM 签名校验的情况下运行。

启用 BootROM 签名校验

要启用 BootROM 签名校验,必须对设备执行预置(provision)操作。流程概述:

  1. 参考AN240106 PSoC Control C3 Security应用笔记;
  2. 初始化Infineon EdgeProtect Tools项目;
  3. 生成 OEM 密钥对;
  4. 运行provision-device

警告:provision-device不可逆操作!执行后 OEM 密钥哈希会被写入 SFLASH,且生命周期状态将推进。请务必使用专用开发板进行预置。

预置完成后,FLASH_BOOT 校验的第一个镜像必须使用 OEM 密钥签名。使用 sysbuild 时,这个镜像是 MCUboot 二进制;不使用 MCUboot 的独立 Zephyr 应用则同样执行sign-image,仅需根据应用二进制与其分区大小调整--image--slot-size

参考签名命令(使用 PSC3 特定参数,源自 Zephyr 分区布局):

edgeprotecttools sign-image \ --image <build>/mcuboot/zephyr/zephyr.hex \ --output <build>/mcuboot/zephyr/zephyr.signed.hex \ --key <oem-private-key>.pem \ --hex-addr 0x32000000 \ --header-size 0x400 --slot-size 0x10000 \ --align 1 --min-erase-size 0x200 --erased-val 0 --overwrite-only west flash --hex-file <build>/mcuboot/zephyr/zephyr.signed.hex

参数要点:

  • --hex-addr 0x32000000:必须使用 SAHB 窗口地址,因为 SAHB 窗口是可写的 Flash 数据访问路径;而 CBUS 窗口(0x12000000)是只读的,无法写入;
  • --header-size 0x400--slot-size 0x10000--align 1--min-erase-size 0x200--erased-val 0--overwrite-only:均需与 Zephyr 的 MCUboot 分区布局一致;
  • 使用 MCUboot 时,位于slot0_partition的 Zephyr 应用由标准imgtoolsysbuild 流程签名,无需 EPT(EdgeProtect Tools)签名

总结

KIT_PSC3M5_EVK 在 Zephyr 中的支持已经相当完整:从默认 Secure 变体的 TrustZone®-M 配置、180/240 MHz 双 DPLL 时钟树、SCB3 控制台、CAN FD 使能,到 NOR Flash 变体的 SCB5 SPI 外部存储扩展,再到 FLASH_BOOT + MCUboot + EdgeProtect Tools 的完整安全启动链路,均能在本仓库的板级文件中找到一一对应的实现证据(kit_psc3m5_evk-common.dtsi、kit_psc3m5_evk.dts、kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts)。开发者可据此快速评估并落地面向工业控制、电机驱动场景的 Zephyr 应用。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询