0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实战经验 | TrustZone 架构下 LPBAM 使用导致的 HardFault

STM32单片机 来源:未知 2023-10-20 15:05 次阅读
wKgaomUyJ8mAUJSZAAHUHXdxAL4994.gif

关键词:TrustZone,HardFault

目录预览

1、简介

2、问题分析

3、总结

01

简介


客户使用 STM32U5 进行开发,并使能了 TrustZone 架构,程序需要从 bootloader 跳转到app。在之前版本都是正常跳转的,某一天 IAR 从 9.20 升级到 9.30 后,程序跳转失败,并且会导致 hardfault,想知道为什么会失败。

wKgaomUyJ8qAXhuzAAWv_yD84y0479.png

图1.IAR9.20 和 IAR9.30 生成的汇编代码对比

02

问题分析


通过断点和单步调试,我们发现出现问题的指令如下所示:

wKgaomUyJ8qAQSBjAAVSMORkRzs862.png

图2.程序下一步将 Hardfault

而没有发生 hardfault 的版本汇编代码,如下图:

wKgaomUyJ8qAIr2yAAlBO4Ea5y0597.png

图3.程序不会发生 Hardfault

通过单步调试,我们知道了 VLSTM SP 这条指令导致了 hardfault。接着我们再确认下 SP 指针,错误版本的 SP 的内容为:0x300020b4,正确版本的 SP 内容为:0x30000258。首先,我们对比了生成的 map 文件中 stack 的地址信息,发现其中 Stack 的地址和这里 SP 指令是相符的。

然后继续查找了 VLSTM 这条指令相关的描述,关于 VLSTM 在 PM0264 中有以下描述:

wKgaomUyJ8qAJ8EWAAIos6_SmHs908.png

图4.关于 VLSTM 指令

从上图可以看到,VLSTM SP 这条指令会把安全的浮点运算寄存器的值保存到 SP 地址中,并清除安全浮点寄存器的内容,如果 CPU 的状态是非安全的,那么这条指令相当于空指令,也不会导致 hard fault,所有从这里也还是分析不出为什么会导致 hard fault。

重新回到这条指令,现在问题可能比较大的就是 SP 的地址了。有问题的版本的 SP 内容为:0x300020b4,会不会是对齐导致的呢?

基于这个猜测,我们直接在 IAR 界面强制修改了 SP 的地址为 0x300020b8,并继续单步执行,然后程序可以正常执行了。所以目前所知的结论就是 VLSTM SP 这条指令,要求 SP 必须 8 字节对齐,可能 IAR 在编译的时候并没有注意到这一点。

然后,把这些信息反馈到 IAR 以后,IAR 的工程师回复如下:

根据目前的信息,问题应该是在 VLSTM 要求 8 字节对齐上。在 9.30.1 中,由于 PUSH.W {R4, R5, R7-R11}指令执行后,相当于占用了 28 个字节的栈空间,导致了 SP 和 9.20.1 相比,不是 8 字节对齐。

03

总结

在调试 TrustZone 工程的时候,由于使用了新的架构及新的汇编指令,需要对这些指令有一定基本的了解。在调查问题的时候,可以进行单步调试来定位发生问题的指令,然后再继续深入了解下为什么会导致 hardfault。

wKgaomUyJ8qAFOqEAAHiBpzEGaQ933.png

完整内容请点击“阅读原文”下载原文档。


原文标题:实战经验 | TrustZone 架构下 LPBAM 使用导致的 HardFault

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632693
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354694

原文标题:实战经验 | TrustZone 架构下 LPBAM 使用导致的 HardFault

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32程序运行时会莫名的进入HardFault硬件中断中,为什么?

    中断,串口中断,在进入HardFault后这些中断还在正常运行,可以排除是这些中断导致进入HardFault; 一周尝试下来,确定的现象就是将代码改动一问题就会消失或者重新出现,但是
    发表于 04-10 06:29

    STM32H5 DA证书链实战经验

    之前我们已经讲过了如何通过 DA 认证来回退芯片产品状态,或者重新打开调试口,这样开发人员在芯片为 Closed 状态时仍可以调试芯片。
    的头像 发表于 03-12 14:08 1008次阅读
    STM32H5 DA证书链<b class='flag-5'>实战经验</b>

    STM32H5 DA 之初体验(带 TrustZone)

    电子发烧友网站提供《STM32H5 DA 之初体验(带 TrustZone).pdf》资料免费下载
    发表于 02-19 14:19 0次下载
    STM32H5 DA 之初体验(带 <b class='flag-5'>TrustZone</b>)

    安路科技完成新一届董事会、监事会换届,文华武任总经理,陈利光担任监事

    据了解,文华武在安路科技核心部门已有十余年丰富履历,长时间致力于市场需求响应和产品研发推进,具备相当的项目经验和对FPGA行业深邃理解。在把此类具有丰富实战经验且实力不俗的人才纳入到上市企业管理系统后,有利于更高效地构建公司组织架构
    的头像 发表于 01-23 13:56 1112次阅读

    BlueNRG系列协处理器实战经验简介

    BlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持协处理器模式。
    的头像 发表于 01-05 18:16 1764次阅读
    BlueNRG系列协处理器<b class='flag-5'>实战经验</b>简介

    实战经验 | 如何在用户应用中开启 LoRa CAD

    关键词:LoRa, CAD, Channel Activity Detection 目录预览 1、LoRa CAD 应用场景举例 2、STM32WL LoRa CAD 原理和驱动 3、如何在示例工程 SubGHz_Phy_Per 中开启 CAD 4、小结 01 LoRa CAD 应用场景举例 在 STM32WL LoRa 某些应用中,尤其是电池供电的设备上,需要按需发送数据,如下发指令,让 STM32WL LoRa 发送数据,或做相应的操作。为了降低功耗,STM32WL不能一直处于接收状态,这样功耗会很高。我们可以开启 LoRa CAD(信道活动检测)功能,STM32WL 通过开启 CAD 功能,检测前导码的前 1/
    的头像 发表于 12-26 17:45 1420次阅读
    <b class='flag-5'>实战经验</b> | 如何在用户应用中开启 LoRa CAD

    实战经验 | 如何选择 S2-LP 的外部晶体

    关键词:晶体, TCXO 目录预览 1、前言 2、S2-LP 外部晶体的选择问题分析 3、频偏的测试及调试 4、小结 01 前言 鉴于经常有基于 S2-LP 的客户对如何选择外部晶体,如何选择外部 TXCO 及如何测试和校准频偏存在诸多困惑,我整理了该文档以备解惑之用。 02 S2-LP 外部晶体的选择问题分析 2.1. 外部晶体的选择 下面是 S2-LP 规格书上列的一些指标,主要关注 Crystal frequency 为 24MHZ~26MHZ 或者 48MHZ~52MHZ, Frequency tolerance 不要超过+-40ppm 就可以了: 2.2 . 外部 TCXO 的选择 考虑
    的头像 发表于 12-22 13:25 496次阅读
    <b class='flag-5'>实战经验</b> | 如何选择 S2-LP 的外部晶体

    STM32 TrustZone 开发调试技巧

    电子发烧友网站提供《STM32 TrustZone 开发调试技巧.pdf》资料免费下载
    发表于 12-18 11:16 2次下载
    STM32 <b class='flag-5'>TrustZone</b> 开发调试技巧

    HardFault 调试与处理

    电子发烧友网站提供《HardFault 调试与处理.pdf》资料免费下载
    发表于 12-18 09:05 1次下载
    <b class='flag-5'>HardFault</b> 调试与处理

    实战经验 | 如何使用 S2LP 的 sniff 模式同时满足通讯和低功耗要求

    设备常供电,可以不考虑低功耗;而接收端设备一般用电池功能,对低功耗的要求比较高。发送和接收端的通讯是异步的,也就是说发送端在满足某些检测条件的情况,可以在任意时刻发送数据包;而要求接收端设备在满足其低功耗要求的情况,及时接收到数据包,保证响应的实时性。针对以
    的头像 发表于 12-16 15:55 689次阅读

    PCB制板实战经验分享:PCB制板的22个规则

    不要以为PCB制板很简单,那只能说明你水平还有待提高。在现代集成器件密度越来越大的情况,PCB布线布局的优劣直接影响产品的性能,甚至是关及设计成败之关键。正如日本一电子所说:十种器件,也可能有无数种排列的可能。
    发表于 12-12 16:35 404次阅读

    实战经验 | STM32G474 中 Triggered-half 模式的实现

    数字电源应用的高精度定时器(HRTIMER)外设,作为 HRTIMER V2 版本,其新增了 Triggered-half 功能,目的就是为了简化采样变频控制方式两相交错并联工作电源的设计。 02
    的头像 发表于 12-11 18:15 1705次阅读
    <b class='flag-5'>实战经验</b> | STM32G474 中 Triggered-half 模式的实现

    实战经验 | 数据意外变化导致条件判断流程异常

    关键词:数据意外变化导致条件判断流程异常 目录预览 1、问题描述 2、问题分析 3、小结 01 问题描述 用户使用的 MCU 型号是 STM32H750VB。  在客户的代码中有多个条件语句,在条件
    的头像 发表于 12-07 10:00 468次阅读

    javaweb从入门到实战

    的学习和实践。本文将为大家详述JavaWeb的入门以及实战经验,希望能帮助到正在追求JavaWeb技术的开发者。 入门 1.1 Java基础知识 在学习JavaWeb之前,首先要掌握Java语言的基础知识,包括面向对象的概念、类与对象、继承与多态、异常处理等。理解这些基础概念对于
    的头像 发表于 12-03 11:44 1473次阅读

    docker微服务架构实战

    的容器化技术,为微服务架构的实施提供了强大的支持。本文将介绍Docker微服务架构实战经验,包括Docker的概述、微服务架构的设计原则以及实际应用中的具体实践。 一、Docker概
    的头像 发表于 11-23 09:26 627次阅读