【官方原创】SAU对NSC分区的影响 LAT1578

关键字:Trustzone/SAU/NSC

1. 前言

客户询问,在Trustzone打开的情况下,如果没有将NonSecure和Secure之间的

NSC接口放在一个单独的NSC分区里,而是和Secure分区混在一起会怎么样?

2. 查看SAU的配置代码

SAU配置代码一般是在相应的工程目录里。例如,对于STM32CubeH5的GPIO例

程,它在STM32Cube_FW_H5_V1.5.0\Projects\NUCLEO

H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\Secure\Inc\partition_stm32h56

3xx.h;对于X-CUBE-FREERTOS的消息队列例程,它在Packs\STMicroelectronics\X

CUBE-FREERTOS\1.3.0\Projects\NUCLEO

H563ZI\Applications\FreeRTOS_Queues_ThreadFlags_TrustZone\Secure\Inc\partiti

on_stm32h563xx.h里。

如果打开上述两个文件,你可以看到默认情况下,SAU并没有被打开,也就是

SAU_INIT_CTRL_ENABLE为0。

3. 不使能SAU

从上文可知,如果你什么都不修改,那么你可以观察SAU不使能情况下NSC分区的

情况。以STM32CubeIDE为例,你可以手工注释掉FLASH_NSC分区。例如:

然后你将以前放入FLASH_NSC的代码放入正常的Secure分区里,如下

编译代码并下载到开发板运行,你发现没有任何问题。

是否SAU不开的例程就不安全,Non-secure就可以直接访问Secure区域?

其实并不是,我们只是更改了sgstubs所在的分区,所生成的代码依然含有secure

gateway 的指令SG。如果没有secure gateway的指令SG,直接调用Secure区域的代

码,例如,我们使用地址直接调用Secure工程中的代码。

系统直接提示我们,入口无效,如下图所示:

4. 使能SAU

在partition_stm32h563xx.h 里使能 SAU,你需要将SAU_INIT_CTRL_ENABLE 置

1,如下图所示

其实正确运行该工程,在SAU使能的情况下,还需要正确配置NonSecure Flash以

及NonSecure RAM,所以我们需要将partition_stm32h563xx.h 里的多处代码置1。

使能NonSecure Flash 如下图所示

使能NonSecure RAM如下图所示

以及使能所使用到的外设区域。

这时可以看到,当系统开始调用NSC代码时

会得到无效入口的Secure Fault。我们比较这里的无效入口的原因,不是代码编译的

问题,而是所在分区不对。

当然我们也可以将链接脚本里的信息还原,同时在partition_stm32h563xx.h使能前

面没有提到NSC分区如下:

则编译下载运行时看到能正常调用NSC函数。

5. 结论

我们可以看出,NSC分区能不能和Secure 分区混合在一起,要看SAU是否使能。如

果SAU没有使能,和Secure分区混在一起, NSC可以被正常调用,系统正常工作 ;如果

SAU使能,没有单独的NSC分区,则NSC调用会引发Secure Fault。一般推荐无论

SAU使能不使能均使用单独的NSC分区。


意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
MickyCode37 分钟前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu
czwxkn2 小时前
3STM32(stdl)外部中断
stm32·单片机·嵌入式硬件
羽获飞2 小时前
从零开始学嵌入式之STM32——6.与GPIO相关的7个寄存器--重要知识
stm32·单片机·嵌入式硬件
棒子陈2 小时前
使用cursor移植单片机的串口驱动(DMA+队列式串口驱动,APM32F103移植到PY32F071)
单片机·嵌入式硬件·cursor·py32f071
VALENIAN瓦伦尼安教学设备2 小时前
镭射对心仪在联轴器找正作用
大数据·数据库·人工智能·嵌入式硬件
蓬荜生灰3 小时前
STM32(11)-- GPIO输出,库函数点灯
stm32·单片机·嵌入式硬件
济6173 小时前
ARM Linux 驱动开发篇----字符设备驱动开发(1)--字符设备驱动简介---- Ubuntu20.04
linux·嵌入式硬件
csg11074 小时前
PIC单片机驱动BH1750光照传感器,轻松获取环境光照数据
单片机·嵌入式硬件·物联网
雾削木4 小时前
使用 ESPHome 的核心指令
java·前端·javascript·单片机·嵌入式硬件
DLGXY6 小时前
STM32——输入捕获、编码器接口(十一)
stm32·单片机·嵌入式硬件