2. STM32MP硬件平台与网络外设

在工业网络与协议集成项目中,硬件平台选型不是“挑一颗性能最强的芯片”,而是把协议栈需求、实时性要求、接口数量、引脚复用约束和长期供货放在同一张表里权衡。STM32MP1 与 STM32MP2 都属于“双核异构”平台:Cortex-A 核运行 Linux,负责协议栈管理、Web 服务、文件系统和网络配置;Cortex-M 核运行裸机或 RTOS,承担硬实时任务,例如 CAN-FD 报文收发、EtherCAT 从站过程数据、串口协议解析。理解这一分工,是后续所有外设分配的前提。

一、MP1 与 MP2 的选型差异

STM32MP1 系列(如 STM32MP157、STM32MP135)采用 Cortex-A7 + Cortex-M4 组合,A7 主频约 650MHz~800MHz,M4 约 209MHz。它的优势是生态成熟、资料丰富、成本可控,适合中等复杂度的工业网关、协议转换器和 HMI 一体机。STM32MP2 系列(如 STM32MP257、STM32MP235)升级为 Cortex-A35 + Cortex-M33,A35 主频可达 1.5GHz,M33 带 TrustZone,并集成 NPU、千兆以太网交换机、TSN 支持、PCIe、USB3.0 等资源,更适合多协议融合、边缘计算和时间敏感网络场景。

选型时建议按以下顺序判断:第一,协议数量与类型。若需要同时跑 EtherCAT、PROFINET、CANopen 和 Modbus TCP,MP2 的多 MAC 与 TSN 能力更从容;若只是 Modbus RTU 转 Modbus TCP 加一路 CAN,MP1 足够。第二,实时性等级。M4 与 M33 都能做硬实时,但 M33 主频更高、外设触发链路更短,适合微秒级抖动要求的场景。第三,封装与引脚数。MP1 常见 LFBGA448、TFBGA361;MP2 有 VFBGA361、TFBGA361 等,引脚数直接决定能引出多少路 CAN、UART 和以太网。第四,温度等级与供货周期,工业级 -40℃~+105℃ 型号需提前确认。

二、以太网 MAC 资源

STM32MP1 通常集成 2 个千兆以太网 MAC(GMAC1、GMAC2),支持 RGMII、RMII 接口,可外接 PHY 或交换机芯片。STM32MP2 进一步提供以太网交换机能力与 TSN 特性,支持 IEEE 802.1Qbv、802.1AS 等,适合构建工业环网。在 Linux 侧,GMAC 通过 stmmac 驱动注册为 eth0、eth1;在 M 核侧,可通过资源隔离把某一路 MAC 交给 M 核直接控制,用于 EtherCAT 从站或 PROFINET IRT 的实时帧收发。

实际规划时要注意:RGMII 需要 12 根信号线(含时钟与延时控制),RMII 只需 9 根但速率上限 100Mbps。若两路都走 RGMII,加上 MDIO/MDC,引脚占用接近 30 根,必须提前在引脚表中锁定。PHY 地址通过 MDIO 配置,典型地址 0~31,需避免与板上其他 I2C/SPI 器件地址冲突。

三、CAN-FD、UART 与 SPI 的分配

CAN-FD 在工业现场用于伺服、变频器和远程 IO。STM32MP1 一般提供 2 路 FDCAN,MP2 可提供 3 路以上。FDCAN 支持仲裁段 1Mbps、数据段 5Mbps 的典型配置,需外接 CAN 收发器(如 TCAN1042、TJA1051)。分配原则是:一路用于设备控制总线,一路用于诊断或冗余,避免把同一物理总线的收发都压在一路控制器上。

UART 数量较多,MP1 常见 4~6 路,MP2 更多。建议把调试串口(UART4 或 UART7)单独保留,不参与业务;RS-485 方向控制使用 UART 的 RTS 引脚或 GPIO,半双工切换延时需在驱动中配置。SPI 用于连接以太网扩展芯片、ADC、Flash 或隔离数字 IO,注意 SPI 的 CS 数量与 DMA 通道绑定关系,避免高吞吐场景下 CPU 频繁搬运。

STM32MP1/MP2 异构外设资源分配与引脚规划示意 Cortex-A7 / A35(Linux) 协议栈管理 · Web · 文件系统 eth0 / eth1 网络配置 Modbus TCP · OPC UA · MQTT Cortex-M4 / M33(RTOS) 硬实时任务 · 微秒级抖动 FDCAN 收发 · EtherCAT 从站 RS-485 协议解析 · SPI 采集 核间通信 IPCC / RPMsg 共享内存 GMAC1 / GMAC2 RGMII / RMII · TSN FDCAN1 / FDCAN2 仲裁 1M · 数据 5M UART4 / UART7 / USART 调试 · RS-485 · 半双工 SPI1 / SPI2 / SPI3 ADC · Flash · 隔离 IO 引脚规划要点 • 复用功能 AF 编号 • RGMII 12 线锁定 • MDIO 地址避冲突 • CAN 收发器使能脚 • RS-485 DE/RE 控制 • SPI CS 与 DMA 绑定 • 调试串口独立保留 • 时钟树与 PHY 参考 • 电源域与 IO 电压 • 温度等级确认 典型分配示例(教学假设) GMAC1 → eth0(RGMII,接千兆 PHY,Linux 管理网) | GMAC2 → eth1(RMII,接交换机,EtherCAT 从站) FDCAN1 → 伺服控制总线(1M/5M) | FDCAN2 → 诊断与冗余 | UART4 → 调试串口 | UART7 → RS-485 SPI1 → 外部 ADC 采集 | SPI2 → QSPI Flash | SPI3 → 隔离数字 IO | M4 核独占 FDCAN1 与 SPI1

四、引脚规划的实际做法

引脚规划建议从“功能清单”倒推。先列出所有必须引出的接口:两路以太网、两路 CAN-FD、三路 UART、两路 SPI、若干 GPIO 和调试口。然后打开 STM32CubeMX,选择对应型号,在 Pinout 视图中逐个分配复用功能。CubeMX 会自动检测冲突,例如某引脚同时被 UART 和 SPI 占用时会标红。此时需要回到备选引脚表,查看该功能的 AF 编号是否可切换到其他引脚。

以太网 RGMII 的引脚最紧张,建议优先锁定。以 STM32MP157 为例,GMAC1 的 RGMII 信号分布在 PG 和 PH 端口,若与 FMC 或 LCD 接口冲突,需要重新评估显示需求。CAN-FD 的 TX/RX 通常成对出现,注意收发器的 STB 和 EN 引脚要单独分配 GPIO,并在设备树中配置为输出低有效或高有效。

设备树是 Linux 侧外设生效的关键。以 FDCAN1 为例,需要在 stm32mp157.dtsi 基础上覆盖:

&m_can1 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&m_can1_pins_a>;
    pinctrl-1 = <&m_can1_sleep_pins_a>;
    status = "okay";
};

&m_can1_pins_a {
    pins1 {
        pinmux = <STM32_PINMUX('G', 0, AF9)>;
        bias-disable;
    };
    pins2 {
        pinmux = <STM32_PINMUX('G', 1, AF9)>;
        bias-disable;
    };
};

这段配置把 PG0、PG1 复用为 FDCAN1 的 TX 和 RX,AF9 是 MP1 上 FDCAN 的固定复用编号。若实际板卡使用其他引脚,必须查数据手册的 Alternate function mapping 表确认 AF 编号,不能凭经验填写。

五、资源隔离与核间分工

MP1/MP2 支持通过 ETZPC 和资源管理器把外设分配给 A 核或 M 核。典型做法是:GMAC1 归 Linux,GMAC2 归 M 核用于实时以太网;FDCAN1 归 M 核,FDCAN2 归 Linux 用于诊断;SPI1 归 M 核采集,SPI2 归 Linux 访问 Flash。核间通过 IPCC 中断和 RPMsg 传递数据,共享内存区域在设备树中预留,例如 0x10000000 起始的 1MB 区域。

规划完成后,建议输出一张“外设—核—引脚—AF—设备树节点”对照表,作为硬件、驱动和应用三方共同确认的基线。任何引脚变更都必须同步更新该表,避免后期出现“驱动能加载但引脚被其他功能占用”的隐性故障。

最后提醒:STM32MP2 的 TSN 和交换机功能虽然强大,但需要配套的 PHY 和时钟方案,PCB 走线对 RGMII 的等长和阻抗要求也更严格。选型阶段就应把原理图评审、引脚冲突检查和设备树框架一起纳入,而不是等硬件打样后再补救。