• 正文
  • 相关推荐
申请入驻 产业图谱

如何用 XSPI 外部 Flash 经 LTDC 显示图像并用 MCE 保护数据

17小时前
40
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

(意法半导体(ST)社区知识库文章中译)

引言

嵌入式与图形应用越来越复杂,对更大存储、更快访问、更强数据保护的需求也跟着上来。

STM32 器件集成了高性能外部存储器接口,用来接额外存储并做保护。大型图形资源可以放外面,访问和显示性能跟得上,再用加解密把数据护住。

1. 工程概览

本工程说明三件事:在 STM32H7S78-DK 上经 **XSPI2** 配好 **MX66UW1G45G** 外部 NOR Flash;用存储器映射模式访问外部 Flash 里的图像,经 **LTDC** 显示到 LCD;再用 **MCE** 对外 Flash 数据加解密。想直接拿已改好的文件,可下文末附件。

2. 前置条件

硬件

- STM32H7S78-DK

软件

- STM32CubeMX version 6.17.0
- STM32CubeIDE version: 2.1.1

3. 步骤

Step 1: 打开 STM32CubeMX,点击 [ACCESS TO BOARD SELECTOR]。

Step 2: 在 Commercial Part Number 中输入相关料号。本例使用 STM32H7S78-DK,选中后点 [Start Project]。按弹窗提示点 [Yes]。

Step 3: 点击 [Pinout] → [Clear Pinouts],弹窗点 [Yes]。

Step 4:XSPI 模式与配置

要访问并跟外部 Flash 通信,在 CubeMX 打开 XSPI2,按 Octal DTR 模式配好时序与引脚,GPIO Settings 里把 XSPI 引脚设为 Very High。GPIO Settings 里确认 XSPI 引脚为 Very High。

注:外部 Flash 类型/规格及 XSPI2、GPIO 细节见相关文章:“How to configure the external flash memory MX66UW1G45G on the STM32H7S78-DK via XSPI interface”。

Step 5:LTDC 模式与配置

要用 LTDC 在 LCD-TFT 上显示图像,须配 Data format、Timing、Display Layers 与 GPIO。详细步骤见:“How to display an image stored in external flash on the STM32H7S78-DK using the LTDC controller”。

Step 6:MCE 模式与配置

Memory Cipher Engine(MCE)是 STM32H7S78 里的硬件安全加速器:处理器不用插手,就能对外部存储器(如 NOR Flash 或 PSRAM)里的数据做透明加解密。本例在 CubeMX 使能 MCE,用来护外部 NOR Flash 数据。

注:概念与更多信息见应用笔记 “How to use MCE for encryption/decryption on STM32 MCUs”,并查阅 RM0477 第 39 章 Memory cipher engine (MCE)。

Step 7:SBS 模式与配置

当 XSPIM 域用 1.8 V 供电、串行存储器接口跑到最高 200 MHz 时,建议打开 HSLV。详见 FAQ:“Recommendations for high-speed low-voltage mode (HSLV) on the STM32H7RS”。

Step 8:时钟配置

- MCU Clock Frequency = 600 MHz
- f_Kernel = 200 MHz
- LTDC Frequency = 25 MHz

LTDC 频率细节见上述 LTDC KB。按本例完成存储器映射与相关 MPU/区域配置,使 CPU 能以映射方式读外部 Flash 图像。

Step 9:生成代码

输入 Project Name,选择 Toolchain/IDE,点击 [GENERATE CODE]。

Step 10:图像转换

要从外部 Flash 显示图像,须把图片转成与 LTDC framebuffer 兼容的像素格式。用 LCD-Image-Converter-20190317 生成头文件 `Image.h`,步骤见 LTDC KB 文章。

Step 11:编辑 Boot 工程中的 main.c

在 `main.c` 里加入配置 MCE2、以及经 XSPI2 连接的 MX66UW1G45G 的代码。本工程里 MCE2 配成 Noekeon Block Cipher 模式。

- 私有变量:`MCE_RegionConfigTypeDef`、`MCE_NoekeonConfigTypeDef` 等;以及:

```c
uint32_t Key[4][4] = {
{ 0x71234567, 0x89ABCDEF, 0x71234567, 0x89ABCDEF },
{ 0xEDCBA987, 0x6543210F, 0xEDCBA987, 0x6543210F },
{ 0x23456789, 0xABCDEF01, 0x23456789, 0xABCDEF01 },
{ 0xCBA98765, 0x43210FED, 0xCBA98765, 0x43210FED }
};
```

- 私有函数原型:`XSPI_NOR_OctalDTRModeCfg`、`JumpToApplication`。
- USER CODE BEGIN 2:调用 `XSPI_NOR_OctalDTRModeCfg(&hxspi2);` 与 `JumpToApplication();`
- USER CODE BEGIN 4:实现 `HAL_XSPI_ErrorCallback`、`XSPI_NOR_OctalDTRModeCfg`(写使能、状态轮询、写 CFG 寄存器切换 Octal)、以及 `JumpToApplication`:配置 Octal DTR 写/读、使能 memory-mapped、`HAL_MCE_ConfigNoekeon`(`Key[2]`)、区域配置:

```c
RegionConfig.Mode = MCE_BLOCK_CIPHER;
RegionConfig.ContextID = MCE_NO_CONTEXT;
RegionConfig.StartAddress = 0x70000000;
RegionConfig.EndAddress = 0x7FFFFFFF;
RegionConfig.PrivilegedAccess = MCE_REGION_NPRIV;
RegionConfig.AccessMode = MCE_REGION_READWRITE;
```

应用向量基址 `Application_vector = 0x70000000U`,跳转到复位处理程序。Boot 工程在 `JumpToApplication` 里把 `Application_vector` 设为 `0x70000000U`,再跳到该向量的复位处理程序;MCE 区域覆盖 `0x70000000`–`0x7FFFFFFF`(详见社区例程 `main.c`)。

Step 12:编辑 Boot 工程 main.h

加入 MX66UW1G45G 命令宏,例如:

```c
#define OCTAL_IO_DTR_READ_CMD 0xEE11
#define OCTAL_PAGE_PROG_CMD 0x12ED
#define READ_STATUS_REG_CMD 0x05
#define WRITE_CFG_REG_2_CMD 0x72
#define WRITE_ENABLE_CMD 0x06
#define DUMMY_CLOCK_CYCLES 20
#define WRITE_ENABLE_MATCH_VALUE 0x02
#define WRITE_ENABLE_MASK_VALUE 0x02
```

注:MCE 与 XSPI 同用时,必须经 Flash 控制器的存储器映射模式访问 Flash。

Step 13:编辑应用工程 main.c

- Includes:`#include "Image.h"`
- 设置 LTDC 层:Window 0–800 / 0–480;`LTDC_PIXEL_FORMAT_RGB565`;`FBStartAdress = (uint32_t)image_data_Image`;ImageWidth 800;ImageHeight 480 等。
- 在 `Image.h` 中注释掉表后的结构体定义,仅保留表定义(注释掉像素表后面的结构体定义,只保留表本身,供 `FBStartAdress = image_data_Image` 使用)。

Step 14: 构建应用工程。

Step 15:调试与验证

按文章 “STM32CubeIDE: How to debug an STM32H7Rx/Sx project without flashing boot every time” 调试。Resume 后 LCD 应显示图像,确认 framebuffer 在外部 Flash 且由 LTDC 渲染,同时 MCE2 负责加解密。

进一步:Memory Browser 查看存储器映射地址 **0x70000000**(RM0477 中 XSPI2 Base Address)。在 `HAL_XSPI_MemoryMapped`、`HAL_MCE_ConfigRegion`、`HAL_MCE_DisableRegion` 处设断点,分别观察映射后明文可见、配置区域后呈加密、DisableRegion 后恢复明文。

结论

按本指南,可在 STM32H7S78-DK 上经 XSPI2 配好 MX66UW1G45G,用 LTDC 显示外部 Flash 里的图像,并用 MCE 护住专用存储器区域里的数据。

来源:https://community.st.com/stm32-mcus-60/how-to-use-xspi-external-flash-to-display-an-image-with-ltdc-and-protect-data-using-mce-168447

参数以意法半导体官方最新资料为准。

意法半导体

意法半导体

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn收起

查看更多

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn