131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • 基于Cortex-M33内核的系列
    基于Cortex-M33内核的系列
  • 基于Cortex-M33内核的系列
  •   发布日期: 2020-06-21  浏览次数: 1,466

    前言

    STM32L5是STM32家族中第一个基于Cortex-M33内核的系列,而TrustZone正是此内核最重要的特性,使能TrustZone的方法非常简单,在RDP=0的情况下直接在option byte中将TZEN置1即可,但是一旦TrustZone使能后,与其相关的安全特性也将开启,由于安全方面的特性,在TrustZone已经打开的情况下欲将其再次关闭却不能像打开时那样那么简单操作了。本文将以用户的视角描述一下关闭TrustZone的过程。

     

    过程

    为了讲述这一过程,我们将以NUCLEO-L552ZE-Q这块板子为例,工具使用STM32CubeProgrammer V2.4.0

    首先通过CubeProgrammer这个工具将MCU的TrustZone打开, 在此之前读保护RDP=0,是用户面临的选项字节最初始状态:

    按客户的操作思路,接下来我们尝试关闭TrustZone。

    首先,直接在option byte中直将TZEN后那个勾去掉,然后Apply。

    此时会出现错误,如上图所示。

    基于Cortex-M33内核的系列

    在TrustZone已经激活的情况下,是不能直接将其关掉的。

    接下来查看参考手册,在RM0438 4.4.2节有讲述到如何将TrustZone关闭的内容:

    基于Cortex-M33内核的系列

    显然,原来TrustZone关闭必须是在读保护从RDP1回退到RDP0的同时进行才可以。

    首先,我们要将RDP设置为level1,然后再回退

    基于Cortex-M33内核的系列

    如上图所示,在设置RDP1的时候, 此时会出现警告,意思是说在TrustZone开启的情况下尝试使能RDP,如果当前FLASH内的代码不能使得芯片上电后执行的程序最终跳转到NS空间,将会导致关闭trustzone和回退RDP失败,强烈建议将nSWBOOT0设置为1。这样可以确保我们可以通过调整PH3/Boot0引脚电平来从系统bootloader启动,这是一定可以跑到NS程序空间的。【NS:Non-Secure】

    我们先选择“取消”,然后检查nSWBOOT0的设置:

    基于Cortex-M33内核的系列

    如上图所示,nSWBOOT0的值已经为1,是OK的,其值表示BOOT0的值将从PH3引脚的状态来决定 。

    既然关闭TrustZone必须是RDP从LEVEL 1回退到LEVEL 0的过程中操作才行,那么我们必须要先将RDP设置为LEVEL 1才行。使能RDP LEVEL 1:

    基于Cortex-M33内核的系列

    如上图所示,警告意思是: 你确定?你的MCU将可能永远丧失!

    点击OK。如下图所示:

    基于Cortex-M33内核的系列

    表示FLASH内的数据已经不能读取了,RDP LEVEL 1使能后,FLASH的内容自然不能再读出,点击OK。

    基于Cortex-M33内核的系列

    此时再次尝试连接,则出现如下界面所示 :

    基于Cortex-M33内核的系列

    此时,ST-Link果然不能再连接。

    那么接下来我们该如何做呢?-》拉高PH3, 让MCU从RSS启动。

    以NUCLEO-L552-Q板为例,将PH3拉到VDD后,再次上电重启,此时板上的蓝色的LD2和红色LD3亮起。按照这块板子的用户手册UM2581,章节6.11.2说明:直接把CN11上的引脚5(VDD)和引脚7(PH3_BOOT0)短接即可。

    基于Cortex-M33内核的系列

    使用Cubeprogrammer,以hotplug模式进行连接(Mode :Hot plug) :

    基于Cortex-M33内核的系列

    尝试连接:

    基于Cortex-M33内核的系列

    如上图所示,ST-Link已经连接上,只不过由于RDP LEVEL 1使能了而不能读取FLASH内容,但此时option bytes是可以修改的。

    打开Option byte界面,在User configuration下将TZEN对应的复选框内的勾去掉,然后再将Read Out Protection下的RDP改回LEVEL 0,然后点击Apply

    基于Cortex-M33内核的系列

    上图表示已经修改成功,断开连接,断开电源,然后将PH3引脚的高电平恢复到低电平。上电后再次连接…

    基于Cortex-M33内核的系列

    如上图所示,再次连上时,FLASH的内容由于RDP LEVEL 1回退到LEVEL 0时被全部清空。此时再次查看RDP和TZEN的值 :

    基于Cortex-M33内核的系列

    基于Cortex-M33内核的系列

    RDP恢复到LEVEL 0,TrustZone成功关闭。

    后注 :

    1》 关闭trustzone需要通过RDP级别回退完成。

    2》 nSWBOOT0=1 && BOOT0/ PH3引脚为高,使得上电后系统从RSS启动。

    3》 在STM32CubeProgrammer中使用hot plug连接方式是为了让MCU从RSS启动后,在运行到NS空间的时候方便跟调试端口连接,以便进行后续的Option Bytes修改操作。
           责任编辑:pj


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号