2. MCX硬件架构与以太网外设
MCX系列MCU在工业以太网通信中承担的是“实时控制 + 网络接入”的双重角色。理解它的硬件架构,不能只停留在“有ENET模块”这一层,而要看清内核、总线、DMA、时钟和引脚复用之间的协同关系。本节以MCX A系列与MCX N系列为参照对象,梳理从CPU到以太网PHY接口的完整信号与数据通路,并给出工业场景下的外设资源分配思路。
内核与总线:数据通路的起点
MCX A系列基于Arm Cortex-M33内核,主频可达96MHz,带FPU与DSP扩展;MCX N系列则采用双核Cortex-M33,主频可达150MHz,并集成eIQ Neutron NPU。对以太网通信而言,内核本身不直接搬运报文,它负责描述符管理、协议栈运算和应用逻辑。真正决定吞吐能力的是总线矩阵与DMA。
MCX内部采用多层AHB总线矩阵,CPU、DMA、ENET、Flash和SRAM分别挂在不同的主/从端口上。ENET作为总线主设备,通过AHB直接读写SRAM中的发送/接收缓冲区,避免CPU逐字节搬运。典型配置下,ENET与DMA共享一条高带宽通路,而CPU通过I-Code/D-Code访问Flash和SRAM,三者并行工作。若把ENET缓冲区放在普通SRAM,需注意总线仲裁带来的延迟抖动;工业实时场景中,建议将描述符和缓冲区放在带ECC的专用SRAM区域,并保持128字节对齐。
ENET模块:从MII到RMII的接口选择
MCX的ENET模块兼容IEEE 802.3,支持10/100Mbps全双工与半双工,内部包含MAC控制器、MII/RMII接口、MDIO管理接口以及DMA引擎。MAC负责帧的组装与解析、CRC校验、地址过滤和流控;DMA负责描述符环的自动遍历与数据搬运。
接口选择上,MII需要16根信号线,适合PCB面积充裕、需要独立收发时钟的场合;RMII仅需9根线,收发共用50MHz参考时钟,是工业紧凑型节点的首选。使用RMII时,REF_CLK必须由外部50MHz晶振或MCU的CLKOUT提供,且走线等长控制在±50mil以内。MDC/MDIO用于读写PHY寄存器,MDC最高频率通常为2.5MHz,需在初始化阶段完成PHY地址扫描与自协商配置。
DMA与描述符环:吞吐量的关键
ENET的DMA采用描述符环结构,每个描述符包含状态字段、数据缓冲区指针和长度。发送时,CPU把帧数据写入SRAM缓冲区,填写描述符的“就绪”位,DMA自动读取并发送;接收时,DMA把收到的帧写入空缓冲区,置位“完成”位并触发中断。描述符数量决定了可连续处理的帧数,工业场景建议发送/接收各配置8~16个描述符,缓冲区大小按最大帧长1518字节对齐到1536字节。
一个常见的性能陷阱是描述符与缓冲区跨Cache行。MCX N系列带Cache,若ENET DMA直接访问Cacheable区域,会出现数据不一致。正确做法是将ENET缓冲区放在Non-Cacheable区域,或在发送前执行Clean、接收后执行Invalidate。以150MHz主频、RMII 100Mbps为例,理论线速约14880帧/秒(最小帧),若每帧中断一次,CPU中断负载会很高;实际工程中应启用接收中断合并或轮询+中断混合模式,把中断频率控制在每秒数千次以内。
时钟系统:REF_CLK与MDC的约束
MCX的SCG模块提供FIRC、SIRC、PLL和外部晶振多条时钟路径。ENET的RMII模式要求50MHz REF_CLK,可由外部晶振直接提供,也可由MCU的CLKOUT输出。若使用CLKOUT,需确保SCG配置的时钟源精度满足RMII ±50ppm要求,否则会出现丢包或链路不稳定。MDC由ENET模块对系统时钟分频产生,初始化时需根据PHY手册设置分频系数,使MDC不超过2.5MHz。
引脚复用与工业外设资源分配
MCX的每个引脚通过PORTx_PCRn寄存器配置复用功能,同一引脚同一时刻只能选择一个外设。工业节点通常需要ENET、CAN、UART、SPI和PWM同时工作,分配时应遵循“先锁定高速接口,再安排低速外设”的原则。以RMII为例,它占用约9个引脚,且REF_CLK、TXD、RXD对走线和引脚位置敏感,应优先分配到连续端口;FlexCAN和LPUART可灵活映射到剩余引脚。
下表给出一份MCX A系列工业网关的示例引脚分配,仅作教学参考,实际项目需结合具体封装和PCB布局调整。
| 外设 | 信号 | 示例引脚 | 复用功能 | 备注 |
|---|---|---|---|---|
| ENET | RMII_REF_CLK | PTA0 | ALT4 | 50MHz,优先靠近PHY |
| ENET | RMII_TXD0 | PTA1 | ALT4 | 与TXD1等长 |
| ENET | RMII_TXD1 | PTA2 | ALT4 | — |
| ENET | RMII_RXD0 | PTA3 | ALT4 | — |
| ENET | RMII_RXD1 | PTA4 | ALT4 | — |
| ENET | MDC | PTA5 | ALT4 | ≤2.5MHz |
| ENET | MDIO | PTA6 | ALT4 | 需上拉 |
| FlexCAN0 | CAN_TX | PTB0 | ALT3 | — |
| FlexCAN0 | CAN_RX | PTB1 | ALT3 | — |
| LPUART1 | TX | PTB2 | ALT2 | 调试串口 |
| LPUART1 | RX | PTB3 | ALT2 | — |
| LPSPI0 | SCK | PTC0 | ALT2 | 接外部ADC |
| LPSPI0 | MOSI | PTC1 | ALT2 | — |
| LPSPI0 | MISO | PTC2 | ALT2 | — |
| eFlexPWM | PWM_A | PTD0 | ALT3 | 电机控制 |
把以上几部分串起来看:CPU通过总线矩阵访问SRAM中的描述符,ENET的DMA在SRAM与MAC之间搬运帧,MAC经RMII与外部PHY通信,而SCG为ENET和PHY提供稳定的参考时钟,PORTx_PCRn则决定这些信号从哪些引脚出入。工业级资源分配的核心,就是在这五者之间找到不冲突、不丢包、可复现的配置组合。