0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)戰(zhàn)經(jīng)驗(yàn) | TrustZone 架構(gòu)下 LPBAM 使用導(dǎo)致的 HardFault

STM32單片機(jī) ? 來(lái)源:未知 ? 2023-10-20 15:05 ? 次閱讀
wKgaomUyJ8mAUJSZAAHUHXdxAL4994.gif

關(guān)鍵詞:TrustZone,HardFault

目錄預(yù)覽

1、簡(jiǎn)介

2、問題分析

3、總結(jié)

01

簡(jiǎn)介


客戶使用 STM32U5 進(jìn)行開發(fā),并使能了 TrustZone 架構(gòu),程序需要從 bootloader 跳轉(zhuǎn)到app。在之前版本都是正常跳轉(zhuǎn)的,某一天 IAR 從 9.20 升級(jí)到 9.30 后,程序跳轉(zhuǎn)失敗,并且會(huì)導(dǎo)致 hardfault,想知道為什么會(huì)失敗。

wKgaomUyJ8qAXhuzAAWv_yD84y0479.png

圖1.IAR9.20 和 IAR9.30 生成的匯編代碼對(duì)比

02

問題分析


通過(guò)斷點(diǎn)和單步調(diào)試,我們發(fā)現(xiàn)出現(xiàn)問題的指令如下所示:

wKgaomUyJ8qAQSBjAAVSMORkRzs862.png

圖2.程序下一步將 Hardfault

而沒有發(fā)生 hardfault 的版本匯編代碼,如下圖:

wKgaomUyJ8qAIr2yAAlBO4Ea5y0597.png

圖3.程序不會(huì)發(fā)生 Hardfault

通過(guò)單步調(diào)試,我們知道了 VLSTM SP 這條指令導(dǎo)致了 hardfault。接著我們?cè)俅_認(rèn)下 SP 指針,錯(cuò)誤版本的 SP 的內(nèi)容為:0x300020b4,正確版本的 SP 內(nèi)容為:0x30000258。首先,我們對(duì)比了生成的 map 文件中 stack 的地址信息,發(fā)現(xiàn)其中 Stack 的地址和這里 SP 指令是相符的。

然后繼續(xù)查找了 VLSTM 這條指令相關(guān)的描述,關(guān)于 VLSTM 在 PM0264 中有以下描述:

wKgaomUyJ8qAJ8EWAAIos6_SmHs908.png

圖4.關(guān)于 VLSTM 指令

從上圖可以看到,VLSTM SP 這條指令會(huì)把安全的浮點(diǎn)運(yùn)算寄存器的值保存到 SP 地址中,并清除安全浮點(diǎn)寄存器的內(nèi)容,如果 CPU 的狀態(tài)是非安全的,那么這條指令相當(dāng)于空指令,也不會(huì)導(dǎo)致 hard fault,所有從這里也還是分析不出為什么會(huì)導(dǎo)致 hard fault。

重新回到這條指令,現(xiàn)在問題可能比較大的就是 SP 的地址了。有問題的版本的 SP 內(nèi)容為:0x300020b4,會(huì)不會(huì)是對(duì)齊導(dǎo)致的呢?

基于這個(gè)猜測(cè),我們直接在 IAR 界面強(qiáng)制修改了 SP 的地址為 0x300020b8,并繼續(xù)單步執(zhí)行,然后程序可以正常執(zhí)行了。所以目前所知的結(jié)論就是 VLSTM SP 這條指令,要求 SP 必須 8 字節(jié)對(duì)齊,可能 IAR 在編譯的時(shí)候并沒有注意到這一點(diǎn)。

然后,把這些信息反饋到 IAR 以后,IAR 的工程師回復(fù)如下:

根據(jù)目前的信息,問題應(yīng)該是在 VLSTM 要求 8 字節(jié)對(duì)齊上。在 9.30.1 中,由于 PUSH.W {R4, R5, R7-R11}指令執(zhí)行后,相當(dāng)于占用了 28 個(gè)字節(jié)的??臻g,導(dǎo)致了 SP 和 9.20.1 相比,不是 8 字節(jié)對(duì)齊。

03

總結(jié)

在調(diào)試 TrustZone 工程的時(shí)候,由于使用了新的架構(gòu)及新的匯編指令,需要對(duì)這些指令有一定基本的了解。在調(diào)查問題的時(shí)候,可以進(jìn)行單步調(diào)試來(lái)定位發(fā)生問題的指令,然后再繼續(xù)深入了解下為什么會(huì)導(dǎo)致 hardfault。

wKgaomUyJ8qAFOqEAAHiBpzEGaQ933.png

完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。


原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | TrustZone 架構(gòu)下 LPBAM 使用導(dǎo)致的 HardFault

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44456

    瀏覽量

    631013
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353807

原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | TrustZone 架構(gòu)下 LPBAM 使用導(dǎo)致的 HardFault

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32H5 DA證書鏈實(shí)戰(zhàn)經(jīng)驗(yàn)

    之前我們已經(jīng)講過(guò)了如何通過(guò) DA 認(rèn)證來(lái)回退芯片產(chǎn)品狀態(tài),或者重新打開調(diào)試口,這樣開發(fā)人員在芯片為 Closed 狀態(tài)時(shí)仍可以調(diào)試芯片。
    的頭像 發(fā)表于 03-12 14:08 ?938次閱讀
    STM32H5 DA證書鏈<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>

    BlueNRG系列協(xié)處理器實(shí)戰(zhàn)經(jīng)驗(yàn)簡(jiǎn)介

    BlueNRG 系列芯片從最早的一代 BlueNRG-MS 開始就支持協(xié)處理器模式。
    的頭像 發(fā)表于 01-05 18:16 ?1631次閱讀
    BlueNRG系列協(xié)處理器<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>簡(jiǎn)介

    實(shí)戰(zhàn)經(jīng)驗(yàn) | 如何在用戶應(yīng)用中開啟 LoRa CAD

    關(guān)鍵詞:LoRa, CAD, Channel Activity Detection 目錄預(yù)覽 1、LoRa CAD 應(yīng)用場(chǎng)景舉例 2、STM32WL LoRa CAD 原理和驅(qū)動(dòng) 3、如何在示例工程 SubGHz_Phy_Per 中開啟 CAD 4、小結(jié) 01 LoRa CAD 應(yīng)用場(chǎng)景舉例 在 STM32WL LoRa 某些應(yīng)用中,尤其是電池供電的設(shè)備上,需要按需發(fā)送數(shù)據(jù),如下發(fā)指令,讓 STM32WL LoRa 發(fā)送數(shù)據(jù),或做相應(yīng)的操作。為了降低功耗,STM32WL不能一直處于接收狀態(tài),這樣功耗會(huì)很高。我們可以開啟 LoRa CAD(信道活動(dòng)檢測(cè))功能,STM32WL 通過(guò)開啟 CAD 功能,檢測(cè)前導(dǎo)碼的前 1/
    的頭像 發(fā)表于 12-26 17:45 ?1273次閱讀
    <b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b> | 如何在用戶應(yīng)用中開啟 LoRa CAD

    實(shí)戰(zhàn)經(jīng)驗(yàn) | 如何選擇 S2-LP 的外部晶體

    關(guān)鍵詞:晶體, TCXO 目錄預(yù)覽 1、前言 2、S2-LP 外部晶體的選擇問題分析 3、頻偏的測(cè)試及調(diào)試 4、小結(jié) 01 前言 鑒于經(jīng)常有基于 S2-LP 的客戶對(duì)如何選擇外部晶體,如何選擇外部 TXCO 及如何測(cè)試和校準(zhǔn)頻偏存在諸多困惑,我整理了該文檔以備解惑之用。 02 S2-LP 外部晶體的選擇問題分析 2.1. 外部晶體的選擇 下面是 S2-LP 規(guī)格書上列的一些指標(biāo),主要關(guān)注 Crystal frequency 為 24MHZ~26MHZ 或者 48MHZ~52MHZ, Frequency tolerance 不要超過(guò)+-40ppm 就可以了: 2.2 . 外部 TCXO 的選擇 考慮
    的頭像 發(fā)表于 12-22 13:25 ?457次閱讀
    <b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b> | 如何選擇 S2-LP 的外部晶體

    STM32 TrustZone 開發(fā)調(diào)試技巧

    電子發(fā)燒友網(wǎng)站提供《STM32 TrustZone 開發(fā)調(diào)試技巧.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 11:16 ?2次下載
    STM32 <b class='flag-5'>TrustZone</b> 開發(fā)調(diào)試技巧

    HardFault 調(diào)試與處理

    電子發(fā)燒友網(wǎng)站提供《HardFault 調(diào)試與處理.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 09:05 ?1次下載
    <b class='flag-5'>HardFault</b> 調(diào)試與處理

    PCB制板實(shí)戰(zhàn)經(jīng)驗(yàn)分享:PCB制板的22個(gè)規(guī)則

    不要以為PCB制板很簡(jiǎn)單,那只能說(shuō)明你水平還有待提高。在現(xiàn)代集成器件密度越來(lái)越大的情況,PCB布線布局的優(yōu)劣直接影響產(chǎn)品的性能,甚至是關(guān)及設(shè)計(jì)成敗之關(guān)鍵。正如日本一電子所說(shuō):十種器件,也可能有無(wú)數(shù)種排列的可能。
    發(fā)表于 12-12 16:35 ?387次閱讀

    實(shí)戰(zhàn)經(jīng)驗(yàn) | 數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常

    關(guān)鍵詞:數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常 目錄預(yù)覽 1、問題描述 2、問題分析 3、小結(jié) 01 問題描述 用戶使用的 MCU 型號(hào)是 STM32H750VB。? 在客戶的代碼中有多個(gè)條件語(yǔ)句,在條件
    的頭像 發(fā)表于 12-07 10:00 ?439次閱讀

    javaweb從入門到實(shí)戰(zhàn)

    的學(xué)習(xí)和實(shí)踐。本文將為大家詳述JavaWeb的入門以及實(shí)戰(zhàn)經(jīng)驗(yàn),希望能幫助到正在追求JavaWeb技術(shù)的開發(fā)者。 入門 1.1 Java基礎(chǔ)知識(shí) 在學(xué)習(xí)JavaWeb之前,首先要掌握J(rèn)ava語(yǔ)言的基礎(chǔ)知識(shí),包括面向?qū)ο蟮母拍睢㈩惻c對(duì)象、繼承與多態(tài)、異常處理等。理解這些基礎(chǔ)概念對(duì)于
    的頭像 發(fā)表于 12-03 11:44 ?1431次閱讀

    docker微服務(wù)架構(gòu)實(shí)戰(zhàn)

    的容器化技術(shù),為微服務(wù)架構(gòu)的實(shí)施提供了強(qiáng)大的支持。本文將介紹Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)經(jīng)驗(yàn),包括Docker的概述、微服務(wù)架構(gòu)的設(shè)計(jì)原則以及實(shí)際應(yīng)用中的具體實(shí)踐。 一、Docker概
    的頭像 發(fā)表于 11-23 09:26 ?583次閱讀

    PLC現(xiàn)場(chǎng)安裝、調(diào)試全流程實(shí)戰(zhàn)經(jīng)驗(yàn)

    深入了解設(shè)計(jì)資料、對(duì)系統(tǒng)工藝流程,特別是工藝對(duì)各生產(chǎn)設(shè)備的控制要求要有全面的了解,在此基礎(chǔ)上,按子系統(tǒng)繪制工藝流。程聯(lián)鎖圖、系統(tǒng)功能圖、系統(tǒng)運(yùn)行邏輯框圖、這將有助于對(duì)系統(tǒng)運(yùn)行邏輯的深刻理解,是前期技術(shù)準(zhǔn)備的重要環(huán)節(jié)。
    的頭像 發(fā)表于 11-14 16:38 ?896次閱讀

    實(shí)戰(zhàn)經(jīng)驗(yàn) | 一個(gè) Flash 編程錯(cuò)誤標(biāo)志的探析

    關(guān)鍵詞:Flash, 編程錯(cuò)誤 目錄預(yù)覽 1、問題現(xiàn)象與分析 2、小結(jié) 3、后記 01 問題現(xiàn)象與分析 客戶項(xiàng)目中使用的 MCU 型號(hào)是 STM32G0B1, 他們反饋在代碼中嘗試擦除并編程 FLASH時(shí), 發(fā)現(xiàn) FLASH 的狀態(tài)寄存器顯示編程錯(cuò)誤(如圖 1 所示). 問題是當(dāng)前代碼還沒有開始擦除和編程, 怎么就有了編程錯(cuò)誤標(biāo)志了呢 ? 如果不將此錯(cuò)誤標(biāo)志清除, 后續(xù)的編程操作無(wú)法繼續(xù).客戶對(duì)于每次想要操作 FLASH 之前這個(gè)清除動(dòng)作既感覺多余也感覺別扭, 且還不得不做, 且做了也不知對(duì)整個(gè)產(chǎn)品
    的頭像 發(fā)表于 11-10 17:45 ?877次閱讀

    KW36 MCU HardFault問題查找和破解方法

    KW36 MCU HardFault問題查找和破解方法
    的頭像 發(fā)表于 10-31 16:57 ?947次閱讀
    KW36 MCU <b class='flag-5'>HardFault</b>問題查找和破解方法

    基于CmBacktrace庫(kù),如何快速追蹤和定位產(chǎn)生HardFault的原因

    基于CmBacktrace庫(kù),如何快速追蹤和定位產(chǎn)生HardFault的原因
    的頭像 發(fā)表于 10-27 09:51 ?2690次閱讀
    基于CmBacktrace庫(kù),如何快速追蹤和定位產(chǎn)生<b class='flag-5'>HardFault</b>的原因

    STM32U5 LPBAM模式介紹

    STM32U5 LPBAM模式介紹
    的頭像 發(fā)表于 10-26 17:59 ?674次閱讀
    STM32U5 <b class='flag-5'>LPBAM</b>模式介紹