131 1300 0010
其他
當(dāng)前位置: 首頁(yè)>> 元件技術(shù)>>其他>>
  • 導(dǎo)航欄目
  • 二極管
  • 整流橋
  • MOS管
  • 其他
  • 基于Cortex-M33內(nèi)核的系列
    基于Cortex-M33內(nèi)核的系列
  • 基于Cortex-M33內(nèi)核的系列
  •   發(fā)布日期: 2020-06-21  瀏覽次數(shù): 1,598

    前言

    STM32L5是STM32家族中第一個(gè)基于Cortex-M33內(nèi)核的系列,而TrustZone正是此內(nèi)核最重要的特性,使能TrustZone的方法非常簡(jiǎn)單,在RDP=0的情況下直接在option byte中將TZEN置1即可,但是一旦TrustZone使能后,與其相關(guān)的安全特性也將開啟,由于安全方面的特性,在TrustZone已經(jīng)打開的情況下欲將其再次關(guān)閉卻不能像打開時(shí)那樣那么簡(jiǎn)單操作了。本文將以用戶的視角描述一下關(guān)閉TrustZone的過程。

     

    過程

    為了講述這一過程,我們將以NUCLEO-L552ZE-Q這塊板子為例,工具使用STM32CubeProgrammer V2.4.0

    首先通過CubeProgrammer這個(gè)工具將MCU的TrustZone打開, 在此之前讀保護(hù)RDP=0,是用戶面臨的選項(xiàng)字節(jié)最初始狀態(tài):

    按客戶的操作思路,接下來我們嘗試關(guān)閉TrustZone。

    首先,直接在option byte中直將TZEN后那個(gè)勾去掉,然后Apply。

    此時(shí)會(huì)出現(xiàn)錯(cuò)誤,如上圖所示。

    基于Cortex-M33內(nèi)核的系列

    在TrustZone已經(jīng)激活的情況下,是不能直接將其關(guān)掉的。

    接下來查看參考手冊(cè),在RM0438 4.4.2節(jié)有講述到如何將TrustZone關(guān)閉的內(nèi)容:

    基于Cortex-M33內(nèi)核的系列

    顯然,原來TrustZone關(guān)閉必須是在讀保護(hù)從RDP1回退到RDP0的同時(shí)進(jìn)行才可以。

    首先,我們要將RDP設(shè)置為level1,然后再回退

    基于Cortex-M33內(nèi)核的系列

    如上圖所示,在設(shè)置RDP1的時(shí)候, 此時(shí)會(huì)出現(xiàn)警告,意思是說在TrustZone開啟的情況下嘗試使能RDP,如果當(dāng)前FLASH內(nèi)的代碼不能使得芯片上電后執(zhí)行的程序最終跳轉(zhuǎn)到NS空間,將會(huì)導(dǎo)致關(guān)閉trustzone和回退RDP失敗,強(qiáng)烈建議將nSWBOOT0設(shè)置為1。這樣可以確保我們可以通過調(diào)整PH3/Boot0引腳電平來從系統(tǒng)bootloader啟動(dòng),這是一定可以跑到NS程序空間的?!綨S:Non-Secure】

    我們先選擇“取消”,然后檢查nSWBOOT0的設(shè)置:

    基于Cortex-M33內(nèi)核的系列

    如上圖所示,nSWBOOT0的值已經(jīng)為1,是OK的,其值表示BOOT0的值將從PH3引腳的狀態(tài)來決定 。

    既然關(guān)閉TrustZone必須是RDP從LEVEL 1回退到LEVEL 0的過程中操作才行,那么我們必須要先將RDP設(shè)置為L(zhǎng)EVEL 1才行。使能RDP LEVEL 1:

    基于Cortex-M33內(nèi)核的系列

    如上圖所示,警告意思是: 你確定?你的MCU將可能永遠(yuǎn)喪失!

    點(diǎn)擊OK。如下圖所示:

    基于Cortex-M33內(nèi)核的系列

    表示FLASH內(nèi)的數(shù)據(jù)已經(jīng)不能讀取了,RDP LEVEL 1使能后,F(xiàn)LASH的內(nèi)容自然不能再讀出,點(diǎn)擊OK。

    基于Cortex-M33內(nèi)核的系列

    此時(shí)再次嘗試連接,則出現(xiàn)如下界面所示 :

    基于Cortex-M33內(nèi)核的系列

    此時(shí),ST-Link果然不能再連接。

    那么接下來我們?cè)撊绾巫瞿兀?》拉高PH3, 讓MCU從RSS啟動(dòng)。

    以NUCLEO-L552-Q板為例,將PH3拉到VDD后,再次上電重啟,此時(shí)板上的藍(lán)色的LD2和紅色LD3亮起。按照這塊板子的用戶手冊(cè)UM2581,章節(jié)6.11.2說明:直接把CN11上的引腳5(VDD)和引腳7(PH3_BOOT0)短接即可。

    基于Cortex-M33內(nèi)核的系列

    使用Cubeprogrammer,以hotplug模式進(jìn)行連接(Mode :Hot plug) :

    基于Cortex-M33內(nèi)核的系列

    嘗試連接:

    基于Cortex-M33內(nèi)核的系列

    如上圖所示,ST-Link已經(jīng)連接上,只不過由于RDP LEVEL 1使能了而不能讀取FLASH內(nèi)容,但此時(shí)option bytes是可以修改的。

    打開Option byte界面,在User configuration下將TZEN對(duì)應(yīng)的復(fù)選框內(nèi)的勾去掉,然后再將Read Out Protection下的RDP改回LEVEL 0,然后點(diǎn)擊Apply

    基于Cortex-M33內(nèi)核的系列

    上圖表示已經(jīng)修改成功,斷開連接,斷開電源,然后將PH3引腳的高電平恢復(fù)到低電平。上電后再次連接…

    基于Cortex-M33內(nèi)核的系列

    如上圖所示,再次連上時(shí),F(xiàn)LASH的內(nèi)容由于RDP LEVEL 1回退到LEVEL 0時(shí)被全部清空。此時(shí)再次查看RDP和TZEN的值 :

    基于Cortex-M33內(nèi)核的系列

    基于Cortex-M33內(nèi)核的系列

    RDP恢復(fù)到LEVEL 0,TrustZone成功關(guān)閉。

    后注 :

    1》 關(guān)閉trustzone需要通過RDP級(jí)別回退完成。

    2》 nSWBOOT0=1 && BOOT0/ PH3引腳為高,使得上電后系統(tǒng)從RSS啟動(dòng)。

    3》 在STM32CubeProgrammer中使用hot plug連接方式是為了讓MCU從RSS啟動(dòng)后,在運(yùn)行到NS空間的時(shí)候方便跟調(diào)試端口連接,以便進(jìn)行后續(xù)的Option Bytes修改操作。
           責(zé)任編輯:pj


  • ·上一篇:
    ·下一篇:
  • 其他關(guān)聯(lián)資訊
    深圳市日月辰科技有限公司
    地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
    電話:0755-2955 6626
    傳真:0755-2978 1585
    手機(jī):131 1300 0010
    郵箱:hu@szryc.com

    深圳市日月辰科技有限公司 版權(quán)所有:Copyright?2010-2023 www.kqne.cn 電話:13113000010 粵ICP備2021111333號(hào)