4. AURIX通信外设与安全过滤机制

在AURIX TC3xx这类面向车载域控与网关的MCU中,通信安全不能只依赖软件层的协议栈校验。CAN报文从收发器进入CAN节点控制器、以太网帧从PHY进入MAC、DMA在外设与SRAM之间搬运数据,这些路径上如果缺少硬件级过滤,CPU会被大量无效报文和异常流量拖垮,攻击面也会显著扩大。本节围绕CAN、以太网和DMA三类外设,说明报文过滤、ID白名单、速率限制与硬件访问控制的实际配置思路。

一、CAN:MultiCAN+的接收过滤与ID白名单

AURIX的CAN模块通常以MultiCAN+形式提供,每个CAN节点拥有独立的报文对象(Message Object,MO)。过滤的第一道关口不是软件,而是MO的接收掩码与验收过滤。每个MO可配置为接收对象,并设置标识符寄存器与掩码寄存器:当接收到的帧ID与MO的ID在掩码为1的位上完全一致时,该帧才被写入此MO的FIFO或缓冲区。掩码为0的位表示“不关心”,这正好用于实现ID白名单。

例如,某网关需要接收整车网络中的0x100、0x101、0x180三个标准帧ID,可建立三个接收MO,分别设置ID=0x100、0x101、0x180,掩码均设为0x7FF(11位全比较)。这样只有这三个ID能进入接收FIFO,其余帧在硬件层被丢弃,不产生中断,也不占用CPU。若需要接收一组连续ID,如0x200~0x20F,可设置ID=0x200、掩码=0x7F0,使低4位不参与比较,从而一次覆盖16个ID。

速率限制方面,MultiCAN+本身不直接提供令牌桶,但可借助MO的接收中断计数与时间戳实现。常见做法是:在接收中断中读取STM(系统定时器)时间戳,对同一ID在固定窗口(如100 ms)内计数,超过阈值(如50帧)则将该ID对应的MO暂时禁用或转入低优先级队列。更稳妥的方式是使用GATEWAY模式或配合GTM的定时通道,在硬件层面对突发流量做整形。

配置要点:接收MO的掩码决定白名单粒度;发送MO的ID决定本节点对外声称的身份;FIFO深度决定突发缓冲能力;中断优先级决定异常流量下的响应顺序。

二、以太网:MAC过滤、VLAN与速率限制

AURIX TC3xx的以太网MAC支持基于目的MAC地址、源MAC地址、VLAN标签和以太网类型的过滤。对于车载以太网,最常见的做法是利用VLAN ID做域隔离:将动力域、信息娱乐域、诊断域划分到不同VLAN,MAC层只接收本VLAN的帧。配置时需写入MAC地址过滤表,并设置“混杂模式”关闭,否则所有帧都会上送。

速率限制在以太网侧通常由MAC的令牌桶或信用整形器实现。以100 Mbps链路为例,若某诊断流允许的最大突发为2 KB、平均速率为1 Mbps,可配置令牌桶参数:桶容量2 KB,补充速率1 Mbps。当流量超过该速率时,多余帧被丢弃或标记为低优先级。AURIX的以太网模块还支持基于优先级的流控,可对高优先级控制帧保留带宽。

硬件访问控制方面,以太网DMA描述符应放置在受MPU保护的内存区域,只有以太网DMA和授权CPU核可访问。描述符中的缓冲区地址必须经过范围检查,防止DMA被诱导写入非法地址。对于安全相关ECU,建议将接收描述符环与发送描述符环分开,并设置所有权位,避免CPU与DMA同时操作同一描述符。

三、DMA:通道隔离与访问权限

DMA是通信外设与内存之间的搬运引擎,也是安全过滤容易被忽视的一环。AURIX的DMA模块支持多通道,每个通道可独立配置源地址、目的地址、传输长度和触发源。安全配置的核心是“通道隔离”:为CAN接收、以太网接收、SPI传输分别分配独立通道,避免一个通道被篡改后影响其他外设。

访问控制上,应利用MPU或DMA自身的访问权限寄存器,限制每个通道只能访问特定地址范围。例如,CAN接收DMA通道只允许写入CAN接收缓冲区所在的SRAM段,不允许访问代码段或安全密钥区。同时,DMA传输完成中断应设置合理的优先级,避免被低优先级任务长时间阻塞。

速率限制在DMA层面体现为传输长度和触发频率的约束。对于周期性CAN帧,可设置DMA每次搬运固定长度(如8字节数据场),并由CAN接收中断触发。若触发频率异常升高,说明总线上出现了异常流量,此时应结合CAN的速率限制逻辑,在DMA搬运前就完成过滤,而不是等数据进入内存后再由软件丢弃。

AURIX通信外设安全过滤路径 CAN 接收过滤 CAN收发器 → MultiCAN+节点 MO验收过滤:ID + 掩码 白名单命中 → 接收FIFO 以太网 MAC 过滤 PHY → MAC 接收 VLAN / MAC地址过滤表 令牌桶速率限制 DMA 通道隔离 通道分配:CAN / ETH / SPI MPU地址范围检查 传输长度 / 触发频率约束 受MPU保护的共享SRAM缓冲区 CAN接收区 | 以太网接收区 | 安全密钥区(禁止DMA写入) CPU 核(中断处理) 非白名单ID → 硬件丢弃 不产生中断,不占CPU 超速率帧 → 令牌桶丢弃 或标记低优先级 正常数据流 过滤/丢弃路径 CAN过滤 以太网过滤 DMA隔离 受保护SRAM

四、配置示例与判断依据

下面给出一段CAN接收MO白名单配置的示例代码,基于AURIX TC3xx的iLLD风格。示例假设使用CAN节点0,接收0x100、0x101、0x180三个标准帧ID,并启用接收中断。

/* 示例:CAN接收MO白名单配置(标准帧,11位ID) */
/* 假设使用 IfxCancfg 结构,MO0~MO2 为接收对象 */

IfxCan_Message msg;
IfxCan_Message_init(&msg);

/* MO0: ID=0x100, 掩码=0x7FF(全比较) */
msg.messageId = 0x100;
msg.mask = 0x7FF;
msg.idType = IfxCan_IdType_standard;
msg.rxBuffer = &canRxBuffer[0];
IfxCan_setMessageObject(&canNode0, 0, &msg);

/* MO1: ID=0x101, 掩码=0x7FF */
msg.messageId = 0x101;
msg.mask = 0x7FF;
msg.rxBuffer = &canRxBuffer[1];
IfxCan_setMessageObject(&canNode0, 1, &msg);

/* MO2: ID=0x180, 掩码=0x7FF */
msg.messageId = 0x180;
msg.mask = 0x7FF;
msg.rxBuffer = &canRxBuffer[2];
IfxCan_setMessageObject(&canNode0, 2, &msg);

/* 使能接收中断,优先级设为较高 */
IfxCan_enableRxInterrupt(&canNode0, 0, IfxCan_InterruptPriority_high);

配置完成后,如何判断过滤是否生效?可从三个层面观察。第一,在CAN分析仪上发送非白名单ID(如0x200),若接收FIFO计数不增加、CPU中断计数不变,说明硬件过滤生效。第二,发送白名单ID,观察对应MO的接收计数递增,且数据与发送一致。第三,在高速率场景下,以1000帧/秒持续发送白名单ID,观察CPU负载是否稳定;若负载随帧率线性上升,说明速率限制未生效,需要检查令牌桶或中断合并配置。

注意:掩码为0的位表示“不关心”,会扩大接收范围。若误将掩码设为0x000,则该MO会接收所有ID,白名单形同虚设。配置后务必用非白名单ID做一次否定测试。

五、硬件访问控制的协同

过滤和速率限制解决的是“哪些报文能进来、进来多少”,硬件访问控制解决的是“进来后能碰哪些内存”。在AURIX中,MPU(内存保护单元)和DMA的访问权限寄存器需要协同配置。建议将通信缓冲区划分为独立区域:CAN接收区、以太网接收区、发送区、安全密钥区。每个区域设置不同的访问权限,DMA通道只能写入对应的接收区,CPU核根据任务权限读取。

对于安全等级较高的ECU,还应启用外设的访问保护机制,例如限制只有特定CPU核能配置CAN和以太网寄存器,防止非安全核篡改过滤规则。配置完成后,可通过读取MPU的错误状态寄存器来验证非法访问是否被拦截。若某次DMA传输触发了MPU错误,说明地址范围配置有误或存在越界访问,需要立即检查描述符和缓冲区边界。

综合来看,CAN的MO掩码白名单、以太网的VLAN与令牌桶、DMA的通道隔离与MPU保护,三者构成AURIX通信外设的硬件安全过滤链。它们各自独立又相互配合:CAN和以太网决定“收什么”,DMA决定“搬到哪”,MPU决定“谁能碰”。只有把这三层都配置到位,才能在硬件层面形成可验证、可观察的通信安全边界。