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 MHz的Arm® 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 已为该板声明支持can、gpio、spi、timer、uart、dma、comparator、rtc等外设类别,工具链支持 Zephyr SDK 与 GNU Arm Embedded。
套件内容
- PSOC™ Control C3M5 评估板
- USB Type-A 转 Type-C 线缆
- 跳线若干
- 快速入门指南(印刷于包装上)
板级变体
KIT_PSC3M5_EVK 在 Zephyr 中支持三种构建目标(对应 board.yml 中声明的 SoC 变体):
| 变体 | 说明 |
|---|---|
kit_psc3m5_evk | Secure 变体(默认),启用 Arm® TrustZone®-M 安全态 |
kit_psc3m5_evk/psc3m5fds2afq1/ns | Non-secure 变体,面向非安全态应用 |
kit_psc3m5_evk/psc3m5fds2afq1/norflash | NOR Flash 变体,需要执行板卡硬件改造 |
默认的 Secure 变体在 kit_psc3m5_evk_defconfig 中通过CONFIG_TRUSTED_EXECUTION_SECURE=y与CONFIG_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 | 极性 |
|---|---|---|
| LED0 | P8.5 | Active Low |
| LED1 | P8.4 | Active Low |
在 kit_psc3m5_evk-common.dtsi 中,两颗 LED 通过gpio-leds兼容节点声明,并分别被别名到led0与led1:
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 | 极性 |
|---|---|---|
| SW1 | P5.0 | Active Low |
| SW2 | P2.0 | Active 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.3 | SCB3 UART TX | Console TX |
| P6.2 | SCB3 UART RX | Console RX |
| P6.1 | SCB3 UART RTS | Console RTS |
| P6.0 | SCB3 UART CTS | Console CTS |
| P8.5 | GPIO | LED0 |
| P8.4 | GPIO | LED1 |
| P5.0 | GPIO | Button SW1 |
| P2.0 | GPIO | Button 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) |
|---|---|
| R96 | Stuff |
| R105 | Stuff |
| R101 | Stuff |
| R114 | Stuff |
| R113 | DNI |
| R95 | DNI |
| R104 | DNI |
| R100 | DNI |
(“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=y与CONFIG_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 目标支持),有两种获取方式:
- ModusToolbox™ Programming Tools 软件包:自带 Infineon OpenOCD;
- 独立安装:下载 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 flashLinux
一次性配置 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 debugGDB 控制台启动后,即可在 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)操作。流程概述:
- 参考AN240106 PSoC Control C3 Security应用笔记;
- 初始化Infineon EdgeProtect Tools项目;
- 生成 OEM 密钥对;
- 运行
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),仅供参考