2. 车载MCU DMA控制器架构:通道与请求源映射

在车载嵌入式系统中,DMA(Direct Memory Access)控制器是实现外设与存储器之间高速数据传输的核心模块。不同车载MCU厂商的DMA架构在通道数量、请求源映射方式、传输粒度以及链路能力上存在显著差异。本章以Infineon TC3xx和NXP S32K系列为代表,深入剖析其DMA模块结构、通道组织与请求源映射机制,为后续多通道性能优化奠定基础。

2.1 DMA控制器核心架构概览

车载MCU的DMA控制器通常由以下逻辑单元构成:

  • DMA引擎:负责总线仲裁、地址计算与传输控制的核心状态机。
  • 通道阵列:一组独立的DMA通道,每个通道可配置源地址、目的地址、传输宽度与触发方式。
  • 请求源多路选择器:将外设事件(如ADC转换完成、SPI发送缓冲区空、CAN消息接收)映射到特定通道。
  • 传输控制单元:管理传输完成中断、错误处理、链路描述符(Linked List)的解析。
  • 总线接口:通过系统总线(如AHB、AXI、LMB)与CPU、SRAM、外设寄存器区域通信。
关键概念: 通道与请求源的映射关系决定了外设事件能否被DMA自动响应。错误的映射配置会导致传输死锁或数据错位。
DMA控制器内部架构框图 DMA控制器内部架构框图 DMA引擎 状态机 · 仲裁 地址计算 通道阵列 CH0 ~ CHn 配置寄存器组 请求源MUX 外设→通道映射 触发选择 传输控制单元 中断 · 错误 链路描述符 总线接口 AHB / AXI / LMB 主端口 + 从端口 说明: 请求源MUX是通道与外设之间的 关键桥梁,决定了DMA的触发源。

2.2 Infineon TC3xx DMA模块结构

Infineon AURIX TC3xx系列采用DMA Lite与DMA Full两种配置,常见于TC3xx的DMA模块包含以下特征:

  • 通道数量:最多64个DMA通道,每个通道拥有独立的源/目的地址寄存器、传输长度计数器、控制寄存器。
  • 请求源映射:通过DMA请求源选择寄存器(DMA_REQSRCx)将外设事件(如ERU事件、ADC结果就绪、SPI传输完成)映射到指定通道。每个通道可独立选择请求源。
  • 传输模式:支持单次传输、连续传输、循环缓冲模式,以及基于链表(Linked List)的复杂传输序列。
  • 优先级仲裁:支持固定优先级与轮询优先级两种仲裁策略,高优先级通道可抢占低优先级传输。
  • 安全特性:支持DMA传输的ECC保护与访问权限控制(符合ASIL-D要求)。
TC3xx开发提示: 在配置DMA通道时,务必检查DMA_REQSRCx寄存器的复位值,避免未使用的通道意外触发。建议在初始化阶段将所有未使用通道的请求源清零。

2.3 NXP S32K DMA模块结构

NXP S32K系列(如S32K144、S32K344)采用eDMA(Enhanced DMA)引擎,其架构特点如下:

  • 通道数量:通常为16或32通道(取决于具体型号),每个通道包含TCD(Transfer Control Descriptor)描述符。
  • 请求源映射:通过DMA通道多路选择器(DMAMUX)实现外设请求到通道的映射。DMAMUX支持每个通道独立选择外设请求源,并支持触发源(如PIT定时器、外部引脚)的灵活配置。
  • 传输描述符(TCD):每个通道的TCD包含源地址、目的地址、传输大小、偏移量、中断使能等字段,支持minor loop与major loop两级循环。
  • 分散/聚集(Scatter/Gather):通过TCD链表实现非连续内存区域的批量传输,适用于CAN消息缓冲区、ADC采样序列等场景。
  • 低功耗模式:支持DMA在低功耗唤醒后继续传输,适用于车载网络管理场景。

2.4 通道与请求源映射对比

下表从映射方式、灵活性、配置复杂度三个维度对比TC3xx与S32K的DMA请求源映射机制:

对比维度 Infineon TC3xx NXP S32K
映射方式 每个通道通过DMA_REQSRCx寄存器直接选择外设请求源 通过独立DMAMUX模块,每个通道选择外设请求源
灵活性 高:每个通道可独立选择任意外设请求源 高:DMAMUX支持触发源与周期触发组合
配置复杂度 中等:需配置请求源选择寄存器与通道控制寄存器 中等偏高:需配置DMAMUX通道使能、触发源选择及TCD描述符
典型外设映射 ADC、SPI、I2C、CAN、ERU事件 ADC、SPI、I2C、CAN、PIT定时器、外部引脚
链路传输 支持链表描述符(LLI) 支持TCD链表(Scatter/Gather)
安全支持 ECC保护、访问权限控制(ASIL-D) 部分型号支持MPU保护

2.5 请求源映射配置示例

以下以NXP S32K144为例,展示如何通过DMAMUX将ADC0的转换完成事件映射到DMA通道0:

/* S32K144 eDMA + DMAMUX 配置示例 */
/* 1. 使能DMAMUX时钟 */
PCC->PCCn[PCC_DMAMUX0_INDEX] |= PCC_PCCn_CGC_MASK;

/* 2. 配置DMAMUX通道0,选择ADC0完成请求源(假设ADC0请求号为40) */
DMAMUX0->CHCFG[0] = DMAMUX_CHCFG_SOURCE(40) | DMAMUX_CHCFG_ENBL_MASK;

/* 3. 配置eDMA通道0的TCD描述符 */
EDMA0->TCD[0].SADDR = (uint32_t)&ADC0->R[0];   /* 源地址:ADC结果寄存器 */
EDMA0->TCD[0].DADDR = (uint32_t)adc_buffer;    /* 目的地址:内存缓冲区 */
EDMA0->TCD[0].NBYTES = 2;                      /* 每次传输2字节 */
EDMA0->TCD[0].CITER = 100;                     /* 主循环次数 */
EDMA0->TCD[0].BITER = 100;
EDMA0->TCD[0].CSR = EDMA_CSR_DREQ_MASK;        /* 传输完成后自动释放请求 */

/* 4. 使能eDMA通道0 */
EDMA0->SERQ = EDMA_SERQ_SERQ(0);
常见错误: 在配置DMAMUX时,如果未使能DMAMUX时钟(PCC时钟门控),则CHCFG寄存器的写入将被忽略,导致DMA无法响应外设请求。务必在配置前确认时钟已使能。

2.6 多通道优先级与仲裁策略

当多个DMA通道同时请求传输时,仲裁策略决定了传输顺序。不同MCU的仲裁机制如下:

  • 固定优先级(Fixed Priority):通道号越小优先级越高(TC3xx与S32K均支持)。适用于确定性要求高的场景,如安全相关的传感器数据采集。
  • 轮询优先级(Round-Robin):所有通道轮流获得总线访问权,避免低优先级通道被饿死。适用于多外设均衡传输的场景。
  • 混合策略:TC3xx支持将通道分组,组内使用轮询,组间使用固定优先级,兼顾实时性与公平性。
多通道优先级仲裁流程图 多通道优先级仲裁流程图 通道0请求 通道1请求 通道2请求 通道n请求 优先级仲裁器 固定 / 轮询 / 混合 传输执行 仲裁策略选择 • 固定:通道0最高 • 轮询:公平调度 • 混合:分组仲裁

2.7 本章小结