工业4.0神器?正点原子 STM32MP257 异核架构登场!Cortex-A35 x Cortex-M0,能玩出哪些花样?
本文基于正点原子ATK-DLMP257B开发板 (2G DDR4 + 16G eMMC 版本)
实测STM32MP257异构双核 (Cortex-A35 + Cortex-M0+) 的低功耗唤醒机制
从硬件设计、设备树配置到固件编译和remoteproc 操作全流程,一网打尽!
正点原子STM32MP257开发板 ARM嵌入式Linux异核A35&M33 AI工控
工业4.0神器?STM32MP257异核架构登场!Cortex-A35 x Cortex-M0,能玩出哪些花样?
- 一、硬件设计:LPUART1 复用引脚选择
- 二、软件配置详解
- 1. 修改设备树配置
- (1)禁用原有 I2C8 占用
- (2)新增 LPUART1 节点及别名
- (3)配置 PZ4/PZ9 引脚复用
- 2. 编译 MailBox_lp_wakeup 工程
- 3. 上传固件到板子
- 三、实验验证:M0+ 唤醒 A35 实战演示
- 1. 停止 remoteproc 并指定固件
- 2. 启动 M0+ 内核
- 3. 配置唤醒机制
- 4. A35 进入休眠
- 四、运行结果观察
- 五、总结
一、硬件设计:LPUART1 复用引脚选择
在意法半导体STM32MP257DAK3芯片中,LPUART1可以复用多组引脚。
基于正点原子ATK-DLMP257B 开发板,我们选用了PZ4和PZ9这两个已经引出的引脚来完成LPUART1的调试功能:
- PZ4-> LPUART1_RX
- PZ9-> LPUART1_TX
不仅方便调试,也避免了额外的硬件连线干扰。
二、软件配置详解
1. 修改设备树配置
(1)禁用原有 I2C8 占用
默认stm32mp257d-atk-ddr-2GB.dts设备树中,PZ4 和 PZ9 被 I2C8 占用了。我们需要禁用该节点:
&i2c8{pinctrl-names="default","sleep";pinctrl-0=<&i2c8_pins_a>;pinctrl-1=<&i2c8_sleep_pins_a>;status="disabled";/delete-property/dmas;/delete-property/dma-names;};(2)新增 LPUART1 节点及别名
/{aliases{serial3=&lpuart1;};};&lpuart1{pinctrl-names="default";pinctrl-0=<&lpuart1_pins_a>;/delete-property/dmas;/delete-property/dma-names;uart-has-rtscts;status="okay";};(3)配置 PZ4/PZ9 引脚复用
在stm32mp25-pinctrl-atk-ddr-2GB.dtsi文件中添加:
&pinctrl_z{lpuart1_pins_a:lpuart1-0{pins1{pinmux=<STM32_PINMUX('Z',9,AF6)>;/* TX */bias-disable;drive-push-pull;slew-rate=<0>;};pins2{pinmux=<STM32_PINMUX('Z',4,AF6)>;/* RX */bias-pull-up;};};};2. 编译 MailBox_lp_wakeup 工程
- 使用 STM32CubeIDE 导入路径:
/Projects/STM32MP257D-ATK/Applications/CM0+_MailBox_DEMO/MailBox_lp_wakeup- 编译 NonSecure 工程,目标为 CA35TDCID_m0plus
- 编译后生成的 .elf 文件路径为:
/CM0PLUS/NonSecure/CA35TDCID_m0plus/MailBox_lp_wakeup_NonSecure.elf3. 上传固件到板子
scpMailBox_lp_wakeup_NonSecure.elf root@192.168.7.1:/lib/firmware三、实验验证:M0+ 唤醒 A35 实战演示
1. 停止 remoteproc 并指定固件
echostop >/sys/class/remoteproc/remoteproc0/stateechoMailBox_lp_wakeup_NonSecure.elf >/sys/class/remoteproc/remoteproc1/firmware2. 启动 M0+ 内核
echostart>/sys/class/remoteproc/remoteproc1/state启动成功后,串口将输出来自 M0+ 的日志信息。
3. 配置唤醒机制
# 开启 IPCC 唤醒能力echoenabled >/sys/devices/platform/soc@0/46250000.mailbox/power/wakeup# 设置7秒后唤醒动作echo7 >/dev/mailbox04. A35 进入休眠
rtcwake--date+30sec-m mem- Linux 进入 LP_Stop2 模式
- M0+ 将在 7 秒后通过 IPCC 唤醒 A35
四、运行结果观察
在 M0+ 串口输出:
(5)A35 wakeup requestdone!(6)Hello from CM0+随后,Linux 控制台出现:
Enabling non-boot CPUS......代表 A35 被成功唤醒,验证异核低功耗唤醒机制正常工作!
五、总结
这一整套流程清晰地展示了:
- 如何灵活配置LPUART1 用于调试 M0+
- 如何通过 remoteproc 和 IPCC 实现异核低功耗唤醒
- STM32MP257D 在工业低功耗控制场景中的强大潜力!
如果你也对STM32MP2系列的低功耗异构通信机制感兴趣,欢迎留言交流
我们会继续更新更多高级功能测试:例如M0+轮询ADC采样、M0+定时任务调度、A35远程下发配置指令等!
