工业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工控

一、硬件设计:LPUART1 复用引脚选择

在意法半导体 STM32MP257DAK3 芯片中,LPUART1 可以复用多组引脚。

在这里插入图片描述

基于 正点原子ATK-DLMP257B 开发板,我们选用了 PZ4PZ9 这两个已经引出的引脚来完成 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.elf

在这里插入图片描述

3. 上传固件到板子

scp MailBox_lp_wakeup_NonSecure.elf root@192.168.7.1:/lib/firmware

三、实验验证:M0+ 唤醒 A35 实战演示

1. 停止 remoteproc 并指定固件

echo stop > /sys/class/remoteproc/remoteproc0/state
echo MailBox_lp_wakeup_NonSecure.elf > /sys/class/remoteproc/remoteproc1/firmware

2. 启动 M0+ 内核

echo start > /sys/class/remoteproc/remoteproc1/state

在这里插入图片描述

启动成功后,串口将输出来自 M0+ 的日志信息。

3. 配置唤醒机制

# 开启 IPCC 唤醒能力
echo enabled > /sys/devices/platform/soc@0/46250000.mailbox/power/wakeup

# 设置7秒后唤醒动作
echo 7 > /dev/mailbox0

在这里插入图片描述

4. A35 进入休眠

rtcwake --date +30sec -m mem
  • Linux 进入 LP_Stop2 模式
  • M0+ 将在 7 秒后通过 IPCC 唤醒 A35
    在这里插入图片描述

四、运行结果观察

在这里插入图片描述

在 M0+ 串口输出:

(5) A35 wakeup request done !
(6) Hello from CM0+

随后,Linux 控制台出现:

Enabling non-boot CPUS ...
...

在这里插入图片描述

代表 A35 被成功唤醒,验证 异核低功耗唤醒机制 正常工作!

五、总结

这一整套流程清晰地展示了:

  • 如何 灵活配置 LPUART1 用于调试 M0+
  • 如何通过 remoteproc 和 IPCC 实现 异核低功耗唤醒
  • STM32MP257D 在 工业低功耗控制场景 中的强大潜力!

如果你也对STM32MP2系列的低功耗异构通信机制感兴趣,欢迎留言交流
我们会继续更新更多高级功能测试:例如M0+轮询ADC采样、M0+定时任务调度、A35远程下发配置指令等!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quinn27

你的鼓励都是我前进的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值