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单片机】欢迎添加关注!文章转载请注明出处。

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

    关注

    6074

    文章

    45340

    浏览量

    663536
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371153

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    车载音频功放芯片实战经验与深度疑问

    1. 通道配置与车型需求的适配经验 在为不同车型设计音响系统时,CD7377CZ 与 CD7388 的通道配置需紧密结合车型空间与用户需求。例如,针对紧凑型家用轿车,车内空间较小,采用
    发表于 12-05 09:53

    SD-WAN部署避坑指南——从选型到上线的实战攻略

    应用访问体验,已成为企业网络升级的重要方向。然而,从技术选型到成功上线,整个部署过程中充满了各种容易被忽视的细节。本文将基于实战经验,为您剖析SD-WAN部署的全流程
    的头像 发表于 10-15 10:15 1191次阅读
    SD-WAN部署避坑指南——从选型到上线的<b class='flag-5'>实战</b>攻略

    解锁物联网摄像头潜力:低成本低功耗硬件设计实战技巧!

    摄像头是物联网视觉感知的关键,但高成本与高功耗常成落地阻碍。本文基于实战经验,提炼硬件设计实用技巧——从简化外围电路到动态功耗管理,助您以更低成本、更低功耗打造物联网摄像头,适配智能家居、安防监控等场景。
    的头像 发表于 09-20 15:22 902次阅读
    解锁物联网摄像头潜力:低成本低功耗硬件设计<b class='flag-5'>实战</b>技巧!

    main线程创建中的rt_memset导致hardfault是为什么?

    main线程的栈大小设置成2048的时候rt_memset导致hardfault,改成512就不会,这是为什么
    发表于 09-18 06:24

    数据库慢查询分析与SQL优化实战技巧

    今天,我将分享我在处理数千次数据库性能问题中积累的实战经验,帮助你系统掌握慢查询分析与SQL优化的核心技巧。无论你是刚入门的运维新手,还是有一定经验的工程师,这篇文章都将为你提供实用的解决方案。
    的头像 发表于 09-08 09:34 610次阅读

    Linux企业网络安全防护体系建设

    构建完整的Linux安全防护体系不是简单的工具堆砌,而是需要从架构设计、监控告警、应急响应到持续改进的完整闭环。本文将分享我在大型企业环境中的实战经验
    的头像 发表于 08-27 14:39 506次阅读

    Linux服务器性能调优的核心技巧和实战经验

    如果你正在为这些问题头疼,那么这篇文章就是为你准备的!作为一名拥有10年经验的运维工程师,我将毫无保留地分享Linux服务器性能调优的核心技巧和实战经验
    的头像 发表于 08-27 14:36 718次阅读

    main线程的栈大小设置成2048的时候rt_memset导致hardfault,为什么?

    main线程的栈大小设置成2048的时候rt_memset导致hardfault,改成512就不会,这是为什么
    发表于 06-10 06:04

    移动电源EMC整改:认证失败到一次通过的实战经验

    深圳南柯电子|移动电源EMC整改:认证失败到一次通过的实战经验
    的头像 发表于 05-26 11:25 573次阅读
    移动电源EMC整改:认证失败到一次通过的<b class='flag-5'>实战经验</b>

    国产芯片多架构开发实践:从工业控制到边缘AI的硬件设计经验

    近年来,国产处理器与异构计算架构的成熟为硬件开发者提供了新选择。我们基于飞腾、龙芯、海光等平台,在VPX/COMe/ITX架构上完成了多个工业级项目验证,在此分享一些实战经验。 硬件架构
    的头像 发表于 05-23 09:24 710次阅读

    高低频介电常数测试仪实战经验:从原理到场景全解析​

    作为电子发烧友,在探索材料介电特性时,经常会遇到“频率选择” 的困惑:同样的材料在高频和低频测试结果为何差异显著?不同频率的测试仪又该如何选择和操作?本文将结合实际经验,分享高低频介电常数测试
    的头像 发表于 04-30 13:20 1579次阅读
    高低频介电常数测试仪<b class='flag-5'>实战经验</b>:从原理到场景全解析​

    TrustZone介绍及用途

    TrustZone是Arm开发的一项核心技术,作为Armv8-M架构的一部分,通过强制硬件隔离提供系统级安全措施。TrustZone要求在软件中划分安全和非安全MCU区域对应的逻辑分区,从而创建受
    的头像 发表于 04-08 09:47 1249次阅读
    <b class='flag-5'>TrustZone</b>介绍及用途

    STM32U5如何设置才能保证LPBAM和RUN模式的应用程序正常使用呢?

    = 0x08000000,LENGTH = 2048K}请问,必须如上图这样设置才可以正常使用LPBAM吗,如果我的应用程序占用RAM过大,需要使用大量的RAM空间,如何设置才能保证LPBAM和RUN模式的应用程序正常使用呢
    发表于 03-10 08:21

    提升开关电源效率的理论分析与实战经验

    在这里有电源技术干货、电源行业发展趋势分析、最新电源产品介绍、众多电源达人与您分享电源技术经验,关注我们,与中国电源行业共成长! 提升开关电源效率的理论分析与实战经验 引言 开关电源设计中,为获得
    的头像 发表于 01-09 10:04 1802次阅读
    提升开关电源效率的理论分析与<b class='flag-5'>实战经验</b>

    使用MCUXpresso for VS Code插件开发Zephyr的hello world

    本期来到Zephyr实战经验演练,小编带着大家一起使用MCUXpresso for VS Code插件来开发一个属于Zephyr的hello world。
    的头像 发表于 01-03 09:21 1781次阅读
    使用MCUXpresso for VS Code插件开发Zephyr的hello world