STM32U5 SBSFU(TrustZone)环境下,串口 DMA 传输数据全为 0 的核心原因是DMA 通道未配置特权属性——SRAM2 默认是 Secure+Privileged 属性,而 DMA 默认仅为 Non-Secure+Non-Privileged,仅配置 Secure 属性无法访问 Privileged 级别的 SRAM,导致传输失败。解决方案:在 DMA 通道属性中同时启用 Secure 和 Privileged,确保与内存属性完全匹配。
资料获取:【应用笔记】LAT1446TrustZone应用中串口通信的DMA传输失败问题
1. 问题背景:TrustZone 环境的 DMA 传输异常
1.1 应用场景
- 硬件平台:STM32U5(支持 TrustZone);
- 软件框架:SBSFU 工程(含 Boot、APP、Loader),Boot 工程使用 SRAM2;
- 功能配置:串口(LPUART1)+ DMA 传输,非 DMA 模式正常,DMA 模式数据全为 0;
- 核心参数:115200bps、1+8+1 数据格式,GPDMA1 通道 0(TX)、通道 1(RX)。
1.2 异常表现
- PC 端接收串口数据全为 0,示波器测量 TX 引脚无有效波形;
- 测试工程验证:单独创建的 TrustZone + 串口 DMA 工程(配置 SRAM1+GTZC MPCBB1)正常,移植到 SBSFU Boot 工程后失败。
2. 根源拆解:TrustZone 下的资源属性不匹配
2.1 核心矛盾:SRAM 与 DMA 的属性差异
TrustZone 启用后,MCU 资源的默认属性是关键(参考手册 RM0456 Rev4):
| 资源 | 默认属性 | 配置情况 |
|---|---|---|
| SRAM2(Boot 工程使用) | Secure + Privileged | 未配置 GTZC MPCBB2,沿用默认 |
| DMA 通道 | Non-Secure + Non-Privileged | 仅手动配置 Secure,未配 Privileged |
- 关键规则:TrustZone 环境中,外设(DMA)访问内存时,安全属性和特权属性必须完全匹配,否则访问被阻断,数据传输失败。
2.2 测试工程与 Boot 工程的差异
- 测试工程:配置 SRAM1 为 Secure,且通过 GTZC MPCBB1 明确属性,DMA 通道仅需配置 Secure 即可(SRAM1 默认无 Privileged 要求);
- Boot 工程:使用 SRAM2,默认 Secure+Privileged,DMA 仅配置 Secure,缺少 Privileged 属性,导致访问 SRAM2 被拒绝。
3. 解决方案:配置 DMA 通道为 Secure+Privileged
核心是通过HAL_DMA_ConfigChannelAttributes函数,同时启用 DMA 通道的 Secure 和 Privileged 属性,确保与 SRAM2 的默认属性匹配。
3.1 关键代码修改(Boot 工程中)
在 DMA 通道初始化时,补充 Privileged 属性配置:
3.2 代码参数说明
| 属性宏 | 作用 |
|---|---|
| DMA_CHANNEL_PRIV | 启用 DMA 通道的 Privileged 属性 |
| DMA_CHANNEL_SEC | 启用 DMA 通道的 Secure 属性 |
| DMA_CHANNEL_SRC_SEC | DMA 源地址为 Secure 区域 |
| DMA_CHANNEL_DEST_SEC | DMA 目标地址为 Secure 区域 |
3.3 补充配置:GTZC(可选,按需启用)
若手动修改 SRAM 属性,需配置 GTZC 的 MPCBB(内存保护控制器),确保 SRAM 属性明确:
4. 验证结果
- 编译修改后的 Boot 工程,烧录后串口 DMA 传输正常,PC 端接收数据正确;
- 示波器测量 TX 引脚波形稳定,符合串口通信协议,传输无丢包、无异常数据。
5. TrustZone 开发关键注意事项
- 属性匹配优先:外设(DMA、UART 等)与内存(SRAM/Flash)的安全属性(Secure/Non-Secure)和特权属性(Privileged/Non-Privileged)必须完全一致;
- 默认属性不可忽视:未配置 GTZC 时,SRAM 默认 Secure+Privileged,Securable 外设默认 Non-Secure+Non-Privileged,需手动对齐;
- 测试工程对比法:移植功能失败时,优先创建最小测试工程验证,通过对比资源配置(内存、GTZC、DMA 属性)定位差异;
- 参考资源默认表:
资源类型 默认安全属性 默认特权属性 片上 SRAM(1-6) Secure Privileged Securable 外设 Non-Secure Non-Privileged 片上 Flash Secure Privileged 中断 Secure -
TrustZone 环境下的 DMA 传输失败,核心是 “属性不匹配” 而非硬件配置错误。开发时需重点关注资源的安全级别和特权级别,尤其是默认属性与手动配置的一致性 —— 仅配置 Secure 属性忽略 Privileged,会导致内存访问被阻断。通过明确 DMA 通道的双属性配置,可快速解决传输异常问题。
137