STM32

STM32是STMicroelectronics(意法半导体)推出的一系列基于ARM Cortex-M内核的32位微控制器(MCU)产品。这些微控制器提供了广泛的产品系列,覆盖了多种不同的性能和功能需求,适用于各种应用领域,包括工业控制、汽车电子、消费类电子、医疗设备等。

STM32系列微控制器以其高性能、低功耗、丰富的外设接口和灵活的开发工具而闻名。它们通常具有丰富的存储器、多种通信接口(如UART、SPI、I2C、CAN等)、模拟数字转换器(ADC)、定时器、PWM输出等功能,以满足不同应用场景下的需求。

STM32微控制器通常使用标准的ARM Cortex-M内核,包括Cortex-M0、M0+、M3、M4和M7等,这些内核具有不同的性能和功耗特性,可根据具体应用的需求进行选择。此外,STM32系列还提供了多种封装和引脚配置,以满足不同尺寸和集成度的要求。

STMicroelectronics为STM32系列提供了丰富的开发工具和支持资源,包括基于ARM开发环境的集成开发环境(IDE)、调试器、评估板和参考设计等。这些工具和资源有助于开发人员快速开发和部署他们的应用,并提供了全面的技术支持和文档资料,帮助用户充分发挥STM32微控制器的性能和功能优势。

一、引言

在之前的 STM32MCU TrustZone 开发调试技巧的系列文章中,我们已经介绍了 ARM CM33 内核 Trust Zone 特性,STM32MCU 的系统级 TrustZone 架构设计,TrustZone 环境下使用外设的注意事项,以及 HardFault 的处理和调试等内容。我们知道在某些较为复杂的应用中,往往还会用到 RTOS,在这个系列的最后一篇,我们将主要讨论 STM32MCU 应用程序开发中,在 TrustZone 环境下使用 RTOS 时的情况以及相关软件开发的一些注意事项,供开发者参考。

二、TrustZone 环境+RTOS 的软件架构

通常情况下,在 TrustZone 环境中,Secure 安全侧的代码主要负责处理一些关键数据的操作和关键外设的管理和控制,而更多的业务逻辑相关的应用程序则会运行在 TrustZone 的Non-Secure 非安全侧。软件的开发模式也会由原来的单一应用程序工程变为安全加非安全两个工程的联合开发。系统复位后 CPU 总是从安全工程的 reset handler 开始运行,安全代码完成初始化以及系统的安全配置之后,调用非安全代码的 reset handler 切换到非安全状态,继而开始运行非安全侧代码,非安全代码执行过程中可能会调用安全侧代码提供的一些API 函数,这个过程类似图 1 所示。

1.png

2.1. TrustZone 环境中 NS 代码不使用 RTOS 的情况

在逻辑相对简单的应用中,非安全侧代码不使用 RTOS,应用程序代码完成初始化之后会进入一个主循环,顺序执行各种操作,其间可能被中断打断。此时安全和非安全工程之间的关系也比较简单,基本上涉及的是直接的函数调用,可能是从非安全侧调用安全侧的API,或者从安全代码调用非安全侧注册的回调函数,类似图 2 所示。

2.png

2.2. TrustZone 环境中在 NS 代码使用 RTOS 的情况

在处理逻辑更复杂的应用中,应用程序可能需要用到 RTOS 来同时执行多个任务,此时RTOS 的功能例如多线程管理、mutex、semaphore、消息队列等也会在非安全侧使用,非安全侧既有 RTOS 的内核,也有上层执行业务逻辑的线程,应用线程中可能调用安全侧提供的 API 函数,类似图 3 所示。

3.png


这时候安全侧依旧是没有 RTOS 的环境,和裸跑时候一样不运行任何的调度器(scheduler),安全侧本身没有多线程的概念,也没有一直运行的任务,安全侧代码只是被动地提供一些 API 函数,供非安全侧软件来调用。这个过程看起来似乎与不使用 RTOS 的时候一样,但是一旦非安全侧有了 RTOS 和多线程的参与,而且线程又需要调用安全侧的 API,实际情况相比非安全侧裸跑就变得复杂了。接下来,我们来看几种可能的情况:

  • Case1:应用线程 1 中调用 S 安全侧 API,API 返回前没有出现线程调度

  • Case2:应用线程 1 中调用 S 安全侧 API,但是 API 返回前出现了线程调度,切换执行线程 2 任务,线程 2 没有调用 S 安全侧 API

  • Case3:应用线程 1 需要调用 S 安全侧 API,但是 API 返回前出现了线程调度,切换执行线程 2 任务,线程 2 也调用 S 安全侧 API

2.2.1. Case1:Thread1 调用 S 安全侧 API,返回前没有出现线程调度

第一种情况比较简单,在这个场景中 Thread1 会调用 S API,在其运行期间 CPU 会切换到 S 安全侧执行,S API 函数执行结束后返回 NS 非安全侧的 Thread1 继续执行,整个过程中没有出现线程调度,如图 4 所示。

4.png


这是一个相对简单的情况,因为 Thread1 调用 S API 的整个过程没有被打断,因此看起来 RTOS 内核不需要做特殊处理,线程可以正常执行。但是这里需要注意的一个问题是线程的 stack,因为当 Thread1 调用 S API 切换至 S 安全侧执行的时候,CPU 使用的堆栈将不再是 NS 非安全侧的线程堆栈(PSP_NS 所指向的 RAM 地址),而是会切换使用安全侧的堆栈(PSP_S 或者 MSP_S 所指向的位于 RAM 安全区的地址)。如果 RTOS 内核要管理线程stack,那么对于需要调用 S API 的那些线程,还需要管理他们在安全侧要用到的 stack。在这种 case 中,只要安全侧 API 函数有局部变量需要用到堆栈,RTOS 内核就需要为Thread1 分配 S 安全侧的内存,并且管理其对应的 PSP_S,以便 Thread1 需要调用 S API的时候,将能够使用 PSP_S 所指向的 S 安全侧的线程堆栈。

2.2.2. Case2:Thread1 调用 S 安全侧 API,返回前出现线程调度

第二种情况比第一种情况略微复杂,在这个场景中 Thread1 依旧会调用 S API,在其运行期间由于时间片切换等原因,CPU 会切换到 S 安全侧执行,但是 S API 函数执行尚未结束就出现了线程调度,NS 非安全侧 RTOS 内核的调度器将挂起 Thread1,并切换到Thread2 执行,Thread2 执行一段时间后再次出现线程调度,回到 Thread1 继续执行,如图5 所示。

5.png


我们知道通常情况下在 ARM CM33 内核进入调度器中断时,当前线程的上下文会压栈到PSP,调度器可能还会压栈其他一些寄存器的内容到 PSP 指向的 stack 中,然后通常会把当前线程 Thread1 的 PSP 指针记录在对应线程的数据结构中,接下来找到下一个需要启用的线程 Thread2,恢复 Thread2 的 PSP,这样从调度中断返回的时候,EXC_RETURN 加载到 PC,系统会回到线程模式,从 Thread2 的 PSP 指向的 stack 恢复线程上下文,继续从Thread2 执行。

但是我们现在讨论的情况是内核使能了安全扩展,也就是 CPU 在 TrustZone 环境下运行,这时候进入线程调度中断时,EXC_RETURN 中除了有常规的数据,还同时记录了额外的信息,其中包括上下文压栈的使用的 stack 是 S 还是 NS 的指示。在上述的 Case2 场景中,Thread1 被打断时 CPU 正运行在 S 安全状态,EXC_RETURN 将标记压栈使用 S 安全侧 stack,当调度器恢复了 Thread2 的 PSP,系统从线程调度中断返回时,按照EXC_RETURN 的标记,CPU 将回到 S 安全态执行,而不是执行 Thread2 的上下文,这样会造成问题。所以对于这样的情况,RTOS 的内核调度需要对 EXC_RETURN 做处理,需要记录线程的 EXC_RETURN 值,在调起某个线程的时候,也要恢复对应的 EXC_RETURN,以便从中断退出时能够进入正确的线程运行状态(S 安全或者 NS 非安全)。

2.2.3. Case3:Thread1 调用 S API,返回前出现线程调度,Thread2 也调用 S 

API第三种情况更加复杂,在 Case2 的基础上,如果 Thread2 也需要调用 S API,那么Thread2 也会切换到 S 侧执行,如图 6 所示。

6.png


这种情况中,Thread2 切换到 S 侧时,需要使用 Thread2 对应的安全侧 stack,当切换回 Thread1 时,需要使用 Thread1 对应的安全侧 stack,因此 RTOS 内核的线程调度器需要有能力为每个线程记录并恢复 PSP_S,而运行在 NS 非安全侧的 RTOS 内核线程调度器无法直接访问 PSP_S,因此,RTOS 内核也需要有 S 安全侧的一部分代码,来协助完成线程PSP_S 的记录和恢复操作,这样第三种情况会变成类似图 7 的样子,RTOS 线程调度器在S 安全侧也有一部分配合线程切换的代码,来管理线程的安全侧 PSP_S 的记录与恢复。

7.png


总结对上述三种情况的分析,我们可以看到,完整支持 CM33 内 TrusZone 的 RTOS 内核需要能够处理多个线程调用 S API 的情况,这可能包括对 EXC_RETURN 的处理,以及管理那些可能调用 S API 的线程在 S 安全侧需要使用的 stack 空间的分配以及以及对 PSP_S的操作和管理。那么实际中 TrustZone 环境下 NS 侧使用 RTOS 的样子可能如图 8 所示,RTOS 提供的上层功能如 thread,mutex,semaphore,message queue 等依旧是在非安全侧,由非安全侧应用程序使用,但是 RTOS 内核的调度器还有一部分代码运行于安全侧,用于配合辅助不同情况下的线程调度。

8.png

三、TrustZone 环境中 NS 非安全侧使用 RTOS 的注意事项

首先需要注意 RTOS 的版本,比较旧的版本可能还没包含对 ARM CM33 内核以及TrustZone 的支持。如果应用的项目是从某个过去的项目中迁移到 STM32MCU 的新产品,尤其使用了 TrustZone 的时候,建议检查原始工程中的 RTOS 版本,确认是否已经包含对CM33 内核以及 TrustZone 的支持。

其次,要注意在安全和非安全工程中添加正确的 RTOS 代码。以 FreeRTOS 为例,它的portable 代码有多个目录,在 TrustZone 环境中应当使用 ARM_CM33 目录下的文件。

9.png


同时这个目录下又有两个子目录,分别对应 secure 和 non-secure,在构建应用工程的时候除了要添加 NS 非安全工程中的 FreeRTOS 代码外,还需要在安全工程中添加对应的secure 目录下的 FreeRTOS 代码。例如在 IAR 中工程包含的 FreeRTOS 源代码文件中将会类似图 10 所示。

10.png


最后还要注意的一点是关于安全侧的 stack 分配。如果 NS 非安全侧线程需要调用安全侧API,那么通常需要为该线程分配安全侧的 stack,该 stack 的大小由 S API 函数所需要的stack size 决定。依旧以 FreeRTOS 为例,FreeRTOS 提供了新的 API,用于线程分配其在安全侧的堆栈,需要调用 S API 的线程应当在其线程主函数的开始旧调用函数portALLOCATE_SECURE_CONTEXT(),分配安全侧的 stack,如图 11 所示。

11.png

四、小结

本文重点讨论了基于 ARM CM33 内核的 STM32MCU 支持 TrustZone 的环境下使用RTOS 的一些情况,并总结了 TrustZone 环境下使用 RTOS 的一些注意事项。某些 RTOS如果没有对 TrustZone 的非常完整的支持,使用起来可能会有些限制,这时候应用程序可能需要注意。例如通过添加 mutex 避免多个线程同时调用 S API 等。当然这里仅仅讨论了 NS侧使用 RTOS 的情况,也就是 S 安全侧只是提供函数由非安全侧调用,本身安全侧没有调度器没有线程概念,如果安全侧也包含了调度器(比如 TF-M)那么配合非安全侧使用RTOS 可能会是另一种情况。

本文是 STM32MCU TrustZone 开发技巧的系列文章的最后一篇,希望对开发者有所帮助,也欢迎大家多提宝贵意见。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 97

01、概述

在 STM32 系列 MCU 中, 除了一些特殊管脚外,绝大多数管脚都可以分类为 FT (兼容5V 信号)或 TT(兼容 3V3 信号)类型的 IO,由于 MCU 内部设计的不同, TT IO 相比 5V IO 有更多的限制,下面我们将予以说明。

02、TT 和 FT IO 的结构和参数区别

下面我们解释 TT 和 FT IO 的不同内部结构以及因此导致的对输入电压和电流的不同限制要求。

2.1. TT 和 FT IO 的结构区别

下面的图 1 描述了 TT 和 FT IO 的通用结构:

1.jpg

图1.TT/FT IO 的内部结构

TT 和 FT IO 的内部结构在 IO 端口的保护电路 (IO 到 VSS 二极管以及 ESD 保护单元),输出 BUFFER,数字控制单元以及模拟单元都是相同的。 

区别在于, 对于 FT IO 来说,从 IO 输入到模拟单元之间存在一个模拟开关,只有在软件控制相关寄存器后这个开关才会闭合. 而对 TT IO 来说, 这一模拟开关是不存在的,IO 管脚与模拟单元直接相连。

2.2. 结构不同导致对电平和电流的不同要求

从图 1 结构图中可以看到, 在 IO 内部的模拟单元中存在一个输入信号到 VDDA 寄生二极管和相串联的电阻,该二极管是寄生的,因此其电流能力是无法保证的,不但不能用做模拟输入信号的钳位二极管,而且还要避免任何从输入信号到 VDDA 的注入电流的产生, 否则可能导致内部相关电路的损坏。 

因此对于 FT IO 的数字输入信号来说, 由于模拟开关被断开, 输入的信号即使高于VDDA 也不会导致模拟单元中寄生二极管电流的产生,在 VDD+4V 的范围内, IO 是安全的。 

如果 FT IO 被配置为模拟输入,模拟开关闭合, 那么它就不再是兼容 5V 的 IO 了,输入信号的幅度必须小于 VDDA+0.3V。 

对于 TT IO 来说,由于不存在到模拟单元的模拟开关,模拟单元的寄生二极管和 IO 口是直接相连的,因此,在任何时候都必须保证加到 TT IO 端口的信号电平小于VDDA+0.3V。 

另外需要补充的是,如果 IO 输入信号可能存在负电平,尽管 TT 和 FT 类型的 IO 都在端口处设计有到 VSS 的二极管,这一二极管提供了一定的钳位保护能力,但是其通过电流能力限制在 5mA 以下。因此,外部钳位二极管通常仍然是必须的,如果不能通过外部钳位二极管将输出负电平信号限制在大于 -0.3V, 那么就需要串联限流电阻将流经二极管的负注入电流限制在 5mA 以下。

2.3. STM32 datasheet 中相关参数说明

在 STM32 的 datasheet 中对 IO 端口的电压和注入电流的要求有限制, 以STM32G474 为例, 在 Absolute maximum ratings 章节中, IO 对输入信号电压的要求如下:

2.jpg

图2.IO 对输入信号电压的要求

很多人注意到了电压要求,认为只要加在 FT IO 的信号电平不超过 VDD+4V, 加在TT IO 的电平不超过 4V 都是安全的, 但是忽视了 IO 对工作电流和注入电流也有要求, 电流方面的要求也必须得到满足, 具体如下:

3.jpg

图3. IO 对电流方面的要求

可以看到, IO 对注入电流同样有着限制,在-5mA 到 0 之间,超出这一范围仍然可能造成 IO 的损坏。 

对于 STM32 的使用来说, 电平和电流方面的限制必须都得到满足。

03、TT IO 的注意事项

使用者对加在 IO 的电平幅度限制一般都能遵守,但是对于 IO 电流特别是注入电流的严格限制往往被一些使用者忽视,然而实际上, IO 对注入电流的限制往往对加在 IO 管脚的信号电平提出了更高的要求。

对于 FT 类型 IO 来说, 只要信号电压在使用的合理范围内,正的注入电流是不可能产生的。 

对于 TT 类型 IO 来说, 超过 VDDA+0.3V 的信号电压都有可能产生 大于 0mA 的正向注入电流,这个电流流过芯片内部参数没有保证的模拟单元寄生二极管,从而可能导致电路损伤。 

因此对 TT IO 的电平 小于 VDDA+0.3V 的限制在任何场景下都必须满足。 

一个常被忽视的场景是系统上电时, 在 STM32 的供电系统还没有建立时, STM32 的IO 信号已经加在了 IO 管脚,例如某些电源或电机应用中对母线电压的检测,通常用分压电阻将母线电压分在 1V~2V 之间后连接到 STM32 的某一 ADC 采样输入 IO,通常这一分压电压到达 IO 比 VDD 建立更早。如果这一 IO 是 FT 类型的, 那么 IO 的信号电平始终能满足 小于 VDD+4V 的要求, 不管 VDD=0V 或 3V3。但是假如这一信号所接的是 TT 类型的 IO, 那么在 VDD=0 或低电平时, 母线电压分压后的电平将超过 VDDA+0.3V 的限制,带来芯片损坏的可能。 

为了避免 TT IO 损坏,在系统上电,下电或工作的整个过程中, 必须始终满足 TT IO 端口电平 小于 VDDA+0.3V 的要求. 当 TT IO 的信号电平可能超过 VDDA+0.3V 时, 钳位保护电路是必须的。

在上述母线电压检测的案例中, 如果这一检测管脚不得不使用 TT IO, 那么一个从信号到 VDDA (或同电位的其它电源)的钳位二极管将可以防止 VDD=0 等场景下信号电平超范围的可能。

04、小结

在 IO 管脚的使用中, 电平限制和电流包括注入电流的限制必须同时得到满足。 

TT IO 由于内部结构的原因,更容易产生正的注入电流而给 IO 带来损坏。注入电流的限制给 IO 端口的信号电平带来了更严格的要求。 

在使用中, 必须考虑信号电平的时序,确保在任何场景下 TT IO 的信号电平满足小于VDDA+0.3V 的要求, 必要时可以通过钳位电路来达到这一目的。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 73
一、引言

在 STM32 TrustZone 开发调试技巧 | 地址安全区及资源安全属性配置文章中,我们介绍了内核的 SAU/IDAU,地址的安全属性配置,资源的安全属性配置,以及内核访问资源的安全规则等内容,这部分作为 TrustZone S/NS 工程开发的基础,让 S 和 NS 工程代码能够基本运行起来。

在此基础上,S/NS App 还需要使用片上外设等资源,实现应用程序的业务逻辑和功能,这时候往往会遇到一些与外设使用相关的问题。

在这一篇中,我们将把重点放在 Trust Zone 架构下应用开发中使用外设的环节,从外设中断、DMA、GPIO 及其与 IO 连接的外设等几个方面,介绍这些部分与传统的不带TrustZone 的 STM32 开发相比有哪些变化,同时会列举一些相关开发中的常见问题,并给出问题的分析与解决方法,供开发者参考。

二、关于外设中断

2.1 CM33 内核 TrustZone 架构下的中断

2.11 中断向量表 Vector Table

传统的 ARM V6/V7 内核,例如 CM4、CM7,都只有一套中断向量表,而带 SecurityExtension 的 CM33 内核有两套中断向量表,分别对应 CPU 的 S 和 NS 两种状态,如图 1所示。在 TrustZone 的双工程开发中,S 工程和 NS 工程都会有各自的中断处理程序(interrupt handler)。他们也有各自的 VTOR,即 VTOR_S 和 VTOR_NS。体现在 linker 文件中,也都有各自的 initial vector 的地址和向量表部分。

系统上电复位后,CPU 总是处于安全状态,因此一定首先从 Secure 的 Reset Handler开始执行代码。当 S 代码完成相关的初始化和系统配置之后,通常会跳转至 NS 代码的Reset Handler 开始执行 NS 代码。但是这里的 NS Reset Handler 其实并不是真正意义上的 interrupt handler,因为没有任何中断会直接进入这个 Handler,它仅仅是 S 代码跳转NS 代码时候的跳转入口。当发生系统复位时,硬件会忽略 NS 的 reset handler 和初始SP。系统永远都是复位到 Secure,加载 Secure 的初始 SP,并从 Secure 的 ResetHandler 开始执行。图 2 给出了 TrustZone 环境下的代码执行顺序示例。

1.png

▲ 图1 带 TrustZone 的 CM33 内核的两个中断向量表

2.png

▲ 图2 TrustZone 环境下的 S/NS 代码运行顺序示例

内核的两个 Vector table 中都包括系统中断和外设中断两个部分,系统中断里有一部分是 bank 的,也就是说 S 和 NS 各有一套,互不相干,例如 Systick,PendSV,SVCall,MemoryFault,Usage Fault,这些中断的 handler 可以在 S/NS 中被各自触发,各自有各自的处理程序。有些中断只会出现在 S 侧,例如 SecureFault,而 HardFault,NMI,BusFault 则默认在 S 侧,但可以通过寄存器配置,允许 NS 侧触发相关的异常。

2.12 外设中断

中断表中的最后一类则是外设中断,即图 1 中 IRQx。这类中断属于目标二选一的中断。上电复位缺省所有 IRQx 都是 target 到 S 的,即任何一个 IRQx 都只会触发 Vectortable S 里面的中断句柄,NS 侧虽然也有同样的 IRQx 和对应的 handler,但是并不会被触发。为了能够选择 IRQx 的 target 目标世界,NVIC 中增加了一组寄存器 NVIC_ITNS0 -NVIC_ITNS15,用于指定某个 IRQx 是否 target 到 NS。上电复位后,ITNSx 寄存器默认值总是 0,也就是所有 IRQ 都 target 到 S,如果需要让某个 IRQ 触发 NS 侧的中断句柄,则需要将对应的 ITNSx 的 bit 设置为 1。

具体设置方法有两种:

  • 调用函数NVIC_SetTargetState(IRQn)设置某个 IRQ 为 target 到 NS;

  • 直接操作 NVIC 的 ITNS 寄存器,例如 NVIC->ITNS[x] = xxx,这种方式比较便捷,且可以一次设置多个 IRQ 的不同 target 目标。

在 STM32 CubeFW 软件包的 TrustZone Template 工程中通常我们会看到一个与TrustZone 有关的配置文件,文件名类似 partition_xxxx.h,这个文件里面会包含 SAU 的配置,中断的 Target 配置等等。其中,中断 target 的配置就是通过直接写 NVIC->ITNS[x]寄存器的方式完成的。需要修改配置的时候只需要定义相关的 NVIC_INIT_ITNSx 宏并修改 NVIC_INIT_ITNSx_VAL 的值即可。例如

#define NVIC_INIT_ITNS0 1 
#define NVIC_INIT_ITNS0_VAL 0xFFFFFC7F

2.2 NS App 中 IRQ Handler 无法进入问题

有很多时候,客户可能是将原有其他 STM32 系列的平台上已经开发过的应用移植到CM33 内核带 TrustZone 的 STM32 产品上,通常原有的业务逻辑会放在 NS 非安全侧,安全侧则主要实现一些与信息安全相关的功能。也有可能项目本身就是在支持 TrustZone 的STM32 MCU 上进行的开发,但是刚开始并没有使能 TrustZone 功能,后面再把TrustZone 使能起来,进行完整的开发和集成。这时候,开发者往往会遇到 NS App 的外设中断无法触发的问题。

【问题现象】NS App 外设中断在不使能 TrustZone 的环境下都能够正常工作,但是移到 TrustZone使能的环境之后,发现 NS App 的外设中断总是无法被触发,例如 UART 中断,GPIO EXTI 中断,DMA 中断等等。如果在调试器中将断点设置在中断句柄函数中,则会发现本来硬件应当触发中断的时候,NS App 的 IRQ handler 却从未进入。

【分析】CM33 TrustZone 架构下,内核有两套中断向量表,上电复位所有的 IRQ 都缺省Target 到 S,也就是说,不做特别配置的话,外设中断只会触发 S 侧的 IRQ Handler,因此 NS App 的 IRQ Handler 一定不会有响应。通常在 Trust Zone 开发中发现 IRQ 中断句柄应当被触发却并未被触发,应当首先检查该 IRQ 的安全目标配置是否正确。

【解决方法】在 S 工程的初始化代码中,将需要被 NS App 处理的 IRQ 都配置为 target 到 NS,可以参考 2.1.2 小节的相关说明。

这种问题往往出现在开发者直接手写代码(或者从 STM32CubeFW 软件包的TrustZone 模板工程开始)进行 TrustZone 配置的时候,因为需要配置的点可能比较多,又未必是集中在同一个代码文件中,有可能忽略了某个配置,造成问题。如果选择使用STM32CubeMX 工具生成相关的工程框架和初始化代码,用 GUI 界面的方式进行配置,则会更加简单明了,相对来说会降低出错几率。在第 5 章节中将对这部分加以简要介绍。

三、关于 DMA

3.1  DMA 的 TrustZone aware 特性

STM32 MCU 中的 DMA 单元(例如 GPDMA, LPDMA)在 Trust Zone 框架下属于 TZaware IP,DMA 能够直接支持 AHB5 总线。

作为总线主设备,DMA 可以发出 S 安全或者 NS 非安全的 transaction。以 STM32U5GPDMA 为例,通过 GPDMA_SECCFGR.SECx 寄存器,可以将 DMA 的 Channel 设置为安全或者非安全通道。

如果一个 Channel 具有安全属性,那么它就是一个安全 DMA 通道,Secure DMAChannel 有能力发出 S 安全或者 NS 非安全访问,同时,S 安全代码还可以配置安全 DMA通道的 source 和 destination 数据传输的安全访问属性,安全通道对 source 和 destination的安全访问属性配置是独立的,互相之间没有依赖关系,因此配置为安全的 DMA 通道可以任意地在安全或者非安全资源之间做数据搬移,如图 3 所示。红色表示非安全访问/非安全资源,绿色表示安全访问/安全资源,从图中可以看到安全 DMA 可以访问所有不同安全属性的 source 和 destination,包括 Flash,SRAM,外设等。

这里要注意一点,如果安全 DMA 通道访问的资源是存储器,那么安全通道配置的source 和 destination 的安全属性应当与目标资源的安全属性一致,否则无法正常访问资源的数据,会出现 RAZ/WI 的效果。

3.png
▲ 图3 安全 DMA Channel 可以访问安全或者非安全资源

注意:当使用 DMA 的 link list 模式时,从 memory 中读取 link list 表数据结构时的安全访问属性与 Channel 的安全属性一致。所以 Secure Channel 加载 link list 表时,读取memory 也使用安全访问模式。

如果一个 Channel 配置为非安全属性(这也是上电复位后 DMA 的缺省状态),那么非安全 DMA Channel 只能发出 NS transaction,只能在 NS 属性的资源之间做数据搬移,

如图 3 所示。如果非安全 DMA 通道试图访问安全资源,将无法正常读写数据,通常效果是 RAZ/WI。


4.png

▲ 图4 非安全 DMA Channel 只能访问非安全资源

作为总线从设备,DMA 的寄存器被访问时,也能够识别总线上的安全访问标志信号HNONSEC,根据 Channel 的安全、非安全属性会允许或者阻止对某些寄存器的访问。

当某个 Channel 被设置为 Secure,NS 代码尝试读取 Secure Channel 的寄存器会返回 0,某些寄存器除外,例如 GPDMA 的 GPDMA_SECCFGR,GPDMA_PRIVCFGR 和GPDMA_RCFGLOCKR 可以被非安全代码读取。NS 代码尝试写 S DAM Channel 的寄存器将没有任何效果。

除了安全、非安全属性,DMA Channel 还可以配置其 PRIV/NPRIV 属性(特权/非特权模式访问)。依旧以 STM32U5 GPDMA 为例,GPDMA_PRIVCFGR.PRIVx 寄存器用于配置某个 Channel 的特权模式访问属性。当某个 Channel 配置为特权模式时,这个Channel 的寄存器也只能被特权模式访问,包括读和写。某些寄存器可能存在例外,例如GPMDA 的 GPDMA_PRIVCFGR, GPDMA_SECCFGR,GPDMA_RCFGLOCKR 可以被NPRIV 模式读取。

PRIV 属性的 Channel 发出的访问都是 PRIV 特权模式访问,NPRIV 属性的 Channel发出的访问都是 NPRIV 非特权模式访问。

注意:当使用 link list 模式时,从 memory 加载 link list 表数据结构时候的访问模式与Channel 的 PRIV/NPRIV 属性一致。

当 DMA 对资源进行读写的时候,任何一个访问都会带有 S/NS 以及 PRIV/NPRIV 属性,因此 DMA 通道的 Secure 属性和 PRIV 属性配置是共同起作用的,他们会同时体现在DMA 对资源访问的 transaction 中。图 5 给出了两种 Channel 以及 Channel 对source/destination 访问可能携带的 Secure 和 PRIV 标记的例子。Channel1 是 S+PRIV 通道,Channel2 是 NS+NPRIV 通道。当然还有可能出现其他的组合,例如 S+NPRIV 通道和 NS+PRIV 通道。DMA 访问 source 和 destination 时的 PRIV/NPRIV 属性直接遵循Channel 自身的 PRIV/NPRIV 属性,所以无论对 source 还是 destination,DMA 发出访问的 PRIV/NPRIV 属性一定是相同的;访问的 S/NS 属性在 NS Channel 中只能是 NS 访问,对 source 和 destination 都一样,而在 S Channel 中可能出现 S 或者 NS 访问,且source 和 destination 访问的安全属性可能不一样。


5.png
▲ 图5 DMA Channel 的 Secure+PRIV 属性组合示例

3.2 TrustZone 架构下带有 DMA 的 Securable 外设

STM32 MCU 中可能含多个具有 DMA 功能的硬件单元,并不是所有的带 DMA 功能的硬件都是 TrustZone aware 外设。系统中除了有作为独立的总线主设备出现的GPDMA/LPDMA 等之外,还可能包含其他一些带有 DMA 功能的总线主设备,例如SDMMC、Ethernet、DMA2D 等。这些设备在使用过程中也有可能通过自身的 DMA 进行数据搬移。但是他们并不是 TZ aware 外设。

在 TrustZone 使能的环境中,这类主线主设备一般是 Securable 外设,他们并不具备像 GPDMA/LPDMA 那样的对 TrustZone AHB5 总线及 HNONSEC 信号直接支持的能力。

作为 Securable 总线主设备,他们的 TrustZone 特性通过 GTZC TZSC 的 PPC(Peripheral Protection Controller)来支持。具体说就是通过配置 TZSC 的 SECCFGRx寄存器可以让某个 Securable 外设具有安全或者非安全属性,通过配置 TSZC 的PRIVCFGRx 寄存器可以设置 Securable 外设的 PRIV/NPRIV 属性。

具体到这些总线主设备,当使用他们的 DMA 功能做数据搬移时,DMA 发出的读写操作在总线上的访问方式就取决于 SECCFGRx、PRIVCFGRx 对这个 IP 的配置。

以 SDMMC 举例

  • SDMMC 被配置为 NS+NPRIV 属性(一般这是外设上电默认所具有的安全属性),那么它的 DMA 访问就都是 NS+NPRIV 属性的。

  • SDMMC 被配置为 S+PRIV 属性,那么它的 DMA 访问都是 S+PRIV 的。

  • 当然也可以是另外的两种组合:NS+PRIV,S+NPRIV。

当这类 IP 的寄存器作为总线从设备被访问的时候,它的一般访问规则是:Secure IP只允许 Secure 访问,NonSecure IP 允许 Secure 或者 NonSecure 访问;PRIV IP 只允许PRIV 访问,NPRIV IP 允许 PRIV 或者 NPRIV 访问。图 6 给出了带 DMA 功能的Securable IP 的寄存器的安全访问规则,以及他们的 DMA 发出的 transaction 与 IP 自身的Secure/PRIV 属性的关系。类似于 TZ aware 的 DMA,当使用 link list 模式时,DMA 从memory 加载 link list 表项数据结构的时候,对 memory 的 Secure/PRIV 访问属性与 IP 自身的 Secure/PRIV 属性配置也一致。

6.png
▲ 图6 Securable IP 的 Secure/PRIV 属性及 DMA 访问具有的安全属性

3.3 TrustZone 环境下使用 DMA 的常见问题

本小节总结了几个在 TrustZone 项目中使用 DMA 遇到的问题,可能也是比较常见的一类问题,给开发者做参考。

3.3.1. 问题 1:NS App 无法驱动 DMA Channel

【问题现象】NS App 需要使用 DMA,用于 SPI 数据传输,应用中已经有相关初始化代码,但是代码运行后 App 无法控制 GPDMA Channel0。

【分析】初始化配置后观察 DMA Channel 的寄存器,发现 GPDMA_SECCFGR 的 bit0 为 1,也就是说 DMA Channel0 被设置为了 S 安全通道。这样 NS App 肯定就无法控制Channel0 的寄存器,肯定不能正常驱动 DMA Channel0。

进一步查看 S App 的代码,客户使用了 TF-M 用来提供安全侧的一系列服务。在 TF-M代码中缺省使能了针对 TrustZone 隔离的一些测试功能,其中包括 DMA Channel 访问的测试,而这部分代码会在初始化阶段将 DMA Channle0 配置为 S+PRIV 属性,这导致了NS App 无法驱动 DMA Channel0。

【解决方法】由于 S App 实际并不使用 DMA 实现应用功能,仅仅是为了测试目的,因此可以关闭这段与测试相关的置 DMA Channel0 为 Secure Channel 的初始化代码,保持 DMA Channel0 的 NonSecure 属性,这样 NS App 就可以正常操作这个 DMA 通道了。

3.3.2. 问题 2:NS App 中 DMA link list 模式无法正常工作

【问题现象】NS App 需要使用 SRAM1,片外 PSRAM,DCMI 以及 DMA 等。DMA 需要对PSRAM 数据进行搬移,并且使用了链表结构。在 S 工程中已经将需要的资源配置为NonSecure,且 NS App 能够正常运行起来。但是 DMA 无法按照 link list 的数据定义完成数据搬移。

【分析】通过调试发现,初始化后,DMA 的配置都可以正常完成,SRAM1 中也有正确的 link list 链表数据,但是当 DMA 完成第一组搬移后,需要从链表数据结构中加载下一组搬移配置时,链表数据加载完成后,对应 DMA 寄存器的值是 0。这说明 DMA 没有从 SRAM1 中正确加载链表数据。

由于 NS App 本身需要使用 SRAM1,而 NS App 是可以正常执行的,这说明 SRAM1已经配置为 NS 属性,允许 NS 访问。进一步查看代码发现,S 工程中对 SRAM1 的GTZC MPCBB 配置中,仅仅配置了 NS 属性,而 SRAM 上电默认具有 S+PRIV 属性,也就是说,经过 GTZC MPCBB 对 SRAM1 的配置,SRAM1 的属性为 NS+PRIV,因此不允许 NPRIV 的访问。而 GPDMA Channel 上电默认属性为 NS+NPRIV。那么他做任何访问都只能是 NS+NPRIV 属性。这解释了为什么 DMA 从 SRAM1 中加载链表数据结构时出错。

【解决方法】要解决问题这个问题,只要保证 DMA 的访问权限等于或者高于被访问目标允许的访问权限就可以。那么修改方法有两个:

  • 在 S 工程中将 SRAM1 配置为 NS+NPRIV 属性,NS App 代码保持不变。

  • 在 NS App 中添加代码,设置 DMA Channel 为 PRIV 属性。

这两种方法都可以让 NS App 中的 DMA 成功完成链表模式的数据搬移操作。

在这个小节的内容中我们可以看到 DMA 在 TrustZone 架构下有额外的安全访问配置,当然这些配置可以通过直接手写代码完成,其实也可以通过 STM32CubeMX 工具在图形界面中完成所有的配置。这样产生的初始化代码更加容易保持配置的一致性。在第 5 章节中也会对这部分做出简要介绍。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 85

在工业4.0与智能制造的大背景下,工业物联网发展迅猛,越来越多的设备具备了连接能力,大量数据在物联网与互联网之间传递,这使得信息安全成为嵌入式联网设备越来越需要关注的话题。信息安全涉及的知识和技术可能非常广泛而复杂,在嵌入式系统中实现安全性往往成为开发者的一个负担。有没有方法帮助开发者减轻这样的负担?这是ST试图通过STM32Trust来回答的问题,STM32Trust是一项专注于提高设备安全性以及为非专家开发者提供安全专业知识而带来的所有软件和硬件解决方案的计划。

开发人员可能需要让产品的安全设计能够满足安全认证的要求,与此同时也希望更快地实现设备的信息保护,帮助工程师意味着我们要让ST的工具以及解决方案更易于使用。为此ST采取的举措之一就是在2023年初宣布的Secure Manager安全管理器解决方案,九月份Secure Manager安全管理器已经正式发布了第一个版本,STM32H5便是Secure Manager所支持的第一款STM32 MCU。让我们来快速回顾一下什么是安全管理器,它能如何帮助到开发者在他的产品中快速实施安全保护。

STM32 TEE可信执行环境解决方案Secure Manager安全管理器

Secure Manager是ST率先推出的以二进制形式提供的TEE可信执行环境(Trusted Execution Environment)解决方案,也是能够在系统级别达到SESIP和PSA 3级安全认证目标的(先进)解决方案。由于该方案提供的是二进制文件而非源代码,可以省去大量的开发和集成时间,大大加快产品的认证过程。Secure Manager采用可下载软件包的形式提供,其中包含二进制文件、库、代码实现和文档等。

目前Secure Manager已经发布了支持STM32H5的第一个正式版本,欢迎访问网址https://www.st.com/en/embedded-software/stm32trustee-sm.html 了解更多有关STM32 TRUSTEE Secure Manager的详细信息,也可以从该网页下载X-CUBE-SEC-M-H5软件包。

最易获取的STM32安全解决方案

以前,对于安全保护方案,ST提供的是STM32的硬件特性以及以源代码形式交付的软件(例如获得了PSA和SESIP Level3认证的STM32U5 TF-M方案),这意味着开发人员必须自己完成一些客制化和适配集成的工作,如果产品有认证需求,可能还需要再次对代码进行验证,因为很多时候,原有的认证只有在代码保持不变的情况下才继续有效。而以二进制文件形式提供的Secure Manager安全管理器恰恰解决了这个问题。此外,Secure Manager安全管理器提供了一个交钥匙解决方案,可以自动启用并设置安全启动功能ST-iRoT和ST-uROT,并且直接从TrustZone的安全侧提供安全存储、加解密和Attestation等安全功能,实施安全解决方案的过程变得格外简单。开发者只需要关注如何调用相关API使用安全管理器已经提供的功能,而无需开发安全侧的服务,他们可以将更多的精力用于客户应用程序的开发。

此外,客户不必担心这个安全解决方案的维护问题,Secure Manager完全由ST拥有并进行维护,我们将会在需要的时候编写和发布新版本或者补丁。由于工作流程大大简化,即使是对于在安全方面拥有丰富专业知识的团队,这样的方案也会收到欢迎。事实上,除非产品有着非常特殊的需求,否则使用ST的二进制文件可以节省大量的时间和资源。Secure Manager还提供了安全管理器访问工具包(或SMAK--Secure Manager Access Kit),以帮助开发人员创建运行在TrustZone环境非安全侧的应用程序,并使用安全管理器的服务。

面向高级用户的全面的解决方案

ST在设计新的Secure Manager方案时也考虑到了灵活性,因此,允许经验丰富的开发人员自定义他们的解决方案。除了SMAK,Secure Manager还提供开发工具包(SMDK--Secure Manager Development Kit),可以帮助开发者创建复杂的可信应用程序(TA – Trusted Application)。例如,一个开发指纹算法的团队可以使用SMDK将算法变成一个TA 可信应用模块,这个可信应用可以装载到Secure Manager安全管理器中,成为运行在TrustZone安全侧的一个特权级可信应用,非安全侧的应用程序能够调用这个可信应用提供的服务。

此外,得益于ST-iRoT和Secure Manager提供的服务,程序员可以在STM32H5中存储密钥和证书,让嵌入式系统轻松注册并连接到云服务器,免去使用外部硬件安全模块等繁琐问题。Secure Manager的加解密API还允许程序员使用密钥对敏感数据进行加密和解密,而无需访问密钥本身,从而保护它们免受攻击。

1.jpg

上图是STM32 Trusted Execution Environment 可信执行环境Secure Manager安全管理器的框架示意框图。图的右半边属于TrustZone的安全侧,其中蓝色的部分是安全管理器默认提供支持的部分,包括安全启动ST-iROT/ST-uROT和基础安全服务,无需开发;粉红色的部分则是基于SMDK开发的可以安装在安全管理器中运行的扩展安全应用,这部分客户可以自己开发,也可以使用来自第三方的开发好的安全应用。使用STM32H5 的安全管理器,意味着从安全启动、安全升级到默认的安全应用都已经准备好,无需开发与适配。图的左半边属于TrustZone的非安全侧,其中黄色的部分才是客户需要自己开发的应用业务逻辑。

近期STM32MCU生态系统中的STM32CubeProgramer和STM32CubeMX等工具也进行了更新,发布了新版本,其中增加了支持STM32H5的新安全特性和Secure Manager的一系列功能,配合安全管理器SMAK的首个正式版本发布。例如STM32的初始化软件STM32CubeMX中增加了启动路径配置选项,可以指导开发人员激活某些安全功能,如STM32H5的iRoT,生成可以直接配合Secure Manager的应用工程框架等。最新的STM32Cube工具也可以很方便地从STM32 Developer Zone入口快速下载。(附下载链接)

最后再给大家推荐几个STM32MCU的wiki链接,方便读者详细了解STM32H5的安全特性、Secure Manager解决方案、以及如何在STM32CubeProgrammer、STM32CubeMX等工具中配置和使用STM32H5的安全特性、功能与解决方案。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com

围观 58

01、前言

STM32 MCU 新产品的早期用户有时候会遇见工具链还在完善中的情形,例如,一部分STM32 工具已经支持该产品,而另外一部分 STM32 工具还在更新中。具体到 Keil 用户,用户有可能可以使用 STM32CubeProgrammer 进行下载,但是 Keil 编译器中支持该产品系列的软件 Pack 还需要一些时间才会被更新。从而,用户能够使用 Keil 编译器进行编译甚至调试,但没法直接在 Keil 环境中对新产品进行下载。对此,用户可以选择等待,也可以自行扩展 Keil 的 FLM 来支持该产品。但考虑到用户产品开发的时间限制以及新的STM32 正式 Pack 很快就会发布,更简单快速的一种解决方案是在 Keil 中直接使用STM32CubeProgammer 在进行调试前下载。

02、步骤

这里以一个 NUCLEO-H723ZG 的 CRC_Example 为例。它是 STM32Cube 包中的一个完善的工程,可以正常使用配套的 Pack 进行编译下载调试。我们只是使用这个工程说明如何直接使用 STM32CubeProgrammer 进行 Flash 下载,没有其他特别的含义。首先,在 Keil 工程界面里,选择[Flash]->[Configure Flash Tools]菜单。

1.png

图1.配置菜单

或者在工程浏览器的工程名字上点击右键,选择[Options]然后选择[Utilities]

2.png

图2.工程选项

你可以看到如下菜单,说明该工程默认使用 Pack 中的 FLM 进行下载。

3.png

图3.配置工具选项

我们将其切换成[Use External Tool for Flash Programming]。

在[Command]中选择 STM32_Programmer_CLI.exe,它会自动填上所在的全路径,例如:

C:\ProgramFiles\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe 
在[Agruments]中输入使用 ST-Link 以及文件名参数,如下: 

-c port=swd -w #L 

STM32_Programmer_CLI 的更多用法,例如,在调试前修改某个特定选项字节,可以参考STM32CubeProgrammer 用户手册 UM2237。 

这里值得一提的是 Keil #L 参数的使用。为了该命令行的通用性,我们应该使用编译器工具提供的一些参数间接指向所需要烧录的路径及文件,而不是硬编码。这样,工程选项的改动,不影响该命令行;而且该命令行也可以在多个工程中复制使用。#L 以及其他类似参数的含义可以在 Keil 联机帮助中搜索 “ Key Sequence for Tool Parameters ”。设置界面如下:

4.png

图4.配置烧写指令

其中[Run Independent]的含义是,是否让 Keil 不需要等待该命令行执行完毕。我们希望按顺序执行,所以该选项没有勾上。用户可以切换此选项观察效果。

03、效果

这时候如果直接选择[Debug]

5.png

图5. 调试

则会发现 Flash 下载并没有发生。确实,这是其中不够完美的地方。但是如果选择[Download]

6.png

图6.下载

则会发现 Keil 调用 STM32CubeProgrammer 命令行进行当前工程的下载,如下所示:

7.png

图7.命令日志

然后,用户可以使用[Debug]启动调试,一切正常。所以,简单的方法就是,用户在调试前,按下 F8。这样比使用 Pack 的 FLM 并没有麻烦多少。

04、小结

本文提供了在 Keil 中使用STM32CubeProgrammer 来进行调试前下载固件的方法,适合 STM32 MCU 新产品的早期用户在使用 Keil 时进行参考。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com

围观 44

01、前言

客户在使用 STM32H7 的时候,想要使用 DWT 计数来测量代码执行时间,评估执行效率。客户发现在重新上电或 reset 后,无法启用 DWT 进行计数。

02、调研

在 ARMv7-M 架构中有个 DEMCR 寄存器,这个寄存器可以控制 DWT 的使能。在power-on reset 后这个寄存器所有位的值都为 0。而当 bit[24]为 0 时,DWT 和 ITM 模块都是 disabled 的。所以为了启用 DWT 模块,必须将 DEMCR 的 bit[24]置为 1。如图 1 所示:

1.png

图1.DEMCR 寄存器

03、启用 DWT 进行计数

STM32H7 基于 Arm Cortex-M7 内核,而 Cortex-M7 是 ARMv7-M 架构,所以 H7 在配置 DWT 模块之前需要将 DEMCR 的 bit[24]置位。在基于 Cortex-M7 的芯片中,需要使用DWT-LAR 来解锁 DWT(其他核可能不需要,应具体分析),然后对 DWT_CTRL 进行相应使能即可。 

在 CMSIS 文件中已经提供了相关寄存器的宏定义(例如在“core_cm7.h”文件中包提供了 DWT 和 DEMCR 的宏定义),我们可以使用这些宏定义方便的进行配置,如图 2所示:

2.png

图2.core_cm7.h 文件

示例(如下):使用 DWT 测量代码执行所用的时钟 cycle 数。

3.png

4.png

04、小结

在使用 ARMv7-M 架构的 STM32 时,对 DWT 配置之前应确保 DEMCR 中的 bit[24]已经被配置(使能 DWT),然后才能使用 DWT。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 30

一、引言
STM32 MCU 中较新的产品系列例如 STM32L5、STM32U5 采用了 ARM Cortex V8M 的 CM33 内核,并引入了 TrustZone 概念。在此基础上,从内核到存储器再到外设等设计了完整的支持 TrustZone 架构的系统隔离机制。

在新的 TrustZone 架构下,软件的开发由原来的单一工程,变成了 Secure 安全和 NonSecure 非安全两个工程的联合开发,系统上电首先从 Secure 工程开始运行,完成必要初始化之后跳转至 NonSecure 工程运行,之后 NonSecure 工程还可以通过调用 Secure 工程经由 NSC(Secure NonSecure Callable)区提供的 API 调用 Secure 工程的函数。

由于此时系统的所有资源,包括 Memory、外设等等都区分了安全和非安全属性,而CPU 也区分安全和非安全运行状态,其对应的安全或非安全代码及其使用的数据都需要有相应的存储空间存放,且该存储空间需要具有相同的安全或者非安全属性,否则代码无法正常运行。因此,在 TrustZone 架构下首先需要针对不同物理区间做地址安排及相应安全属性的正确配置。对于 V8M 内核来说,这涉及到 SAU/IDAU 的配置,且取指令与取数据可能有不同的访问规则,同时指令以及数据是否能够从 memory 中正确取得,除了和 SAU/IDAU 的配置有关以外,还与 Memory 自身的安全属性配置有关。

本文将对 SAU/IDAU 配置,Memory 的自身安全属性配置,以及内核访问指令与数据时的安全访问规则加以阐述,希望可以帮助相关开发者更好地理解 V8M TrustZone 的架构以及在 STM32 中的实现,同时,还会列举一些与 memory 的 TrustZone 安全配置相关的常见问题及分析方法,给开发者做参考。

详阅请点击下载:《STM32 TrustZone 开发调试技巧 | 地址安全区及资源安全属性配置》

来源: STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49

新开发者软件为STM32H5设计,利用ST的Secure Manager安全软件,简化物联网设备与AWS平台的安全连接

2023年10月10日,中国--服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)日前在STM32Cube开发工具包内新增一款软件,以简化高性能物联网(IoT)设备与AWS云的连接。 

1.jpg

意法半导体发布了X-CUBE-AWS-H5扩展包,让物联网设备能够无缝、安全地接入AWS云。在这个软件扩展包中有一套为专门终端设备STM32H5系列高性能微控制器设计的软件库和应用代码示例。

 该解决方案基于FreeRTOS开源实时操作系统和意法半导体的Secure Manager嵌入式安全软件,可以与最近发布的STM32H5探索套件配套使用,让开发人员能够将基于STM32H5的物联网设备原型轻松安全地连接到AWS IoT Core物联网平台。 

STM32市场总监Daniel Colona表示:“STM32H5是为下一代物联网边缘设备准备的,为市场带来以有限的能耗预算处理复杂应用的性能。STM32Cube生态系统帮助开发人员释放STM32H5的强大功能,加快应用开发速度,并用我们最新的软件安全连接到AWS云中强大的存储和数据分析服务。”

 STM32H5 是性能最强的Arm®Cortex®-M33 MCU系列之一。无法改变的设备身份是在意法半导体工厂内写进设备之中。配合意法半导体的安全管理器,这个方法可以简化智能设备在AWS云端的注册过程,而且无需购置昂贵的安全基础设施,在生产过程中保护物联网设备身份。 

在生产期间和安装现场,设备还可以享受第三方服务提供商的远程网络开通和证书管理服务。 

Secure Manager的隔离功能可以保护多方共同持有的知识产权,又称多方持有IP保护。这个软件属于一个保障全面的安全服务,在开发制造过程中和安装现场,保护STM32应用开发者和合作伙伴资产的秘密和完整性。 

这个软件非常适合边缘AI的使用场景,神经网络模型在边缘设备上运行,Secure Manager提供安全保护,并通过云完成进一步的人工智能训练和安全更新。The STM32Trust TEE Secure Manager让系统安全变得更强、更简单。 

总体而言,STM32Cube生态系统配合STM32H5微控制器为开发人员开发符合未来法规和标准的物联网应用提供了一个强大而安全的平台。STM32H5于2023年3月推出,是第一个支持Secure Manager的微控制器,目标应用是PSA Certified level 3 和 SESIP3认证。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 16

页面

订阅 RSS - STM32