跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. YTM32B1MD1 和 YTM32B1ME0 非对齐访问Flash地址,可能会发生UNALIGNED UsageFault。

YTM32B1MD1 和 YTM32B1ME0 非对齐访问Flash地址,可能会发生UNALIGNED UsageFault。

已定时 已固定 已锁定 已移动 YT SDK
1 帖子 1 发布者 363 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • runR 离线
    runR 离线
    run YunTu
    写于 最后由 run 编辑
    #1

    问题描述

    YTM32B1MD1 和 YTM32B1ME0 是Cortex-M33的内核,是支持非对齐访问Flash的。
    但由于SystemInit() 中MPU配置错误的问题导致,有概率(1/16)在某次上电后出现:非对齐访问Flash地址时发生UNALIGNED UsageFault,被force为HardFault。
    00795495-864a-4bd1-bff9-0cb9e8cdd70a-image.png

    存在问题的SDK版本

    • 1_2_0
    • 1_2_1
    • 1_3_0
    • 1_3_1
      PS:YTM32B1MD1 和 YTM32B1ME0 1_3_1 版本可以安装HOTFIX001 进行该问题修复
      6dc69985-5b91-4026-8c64-06a74bb88292-image.png

    问题分析

    ebc6e4c9-44de-425f-8fd1-60dd1243fc45-image.png
    在47行,ARM_MPU_SetMemAttr初始化的Attr index是“0”,而在40(或 43行)其配置的Flash地址范围的MPU的Attr引用的index是 “7”。
    index 7的Attr其实是没有被进行初始化过的,ARM内核中MPU的寄存器在上电后的值都是随机的,因此Flash地址范围的MPU指定的attr其实是随机值。

    当某次上电,其值刚好被随机为:MAIR_ATTR[7:4] == 0时,属性就是device memory。
    这样就不支持该MPU保护的地址非对齐访问了。因此也可以计算出其上电后出现的概率为1/16。
    https://developer.arm.com/documentation/100235/0100/The-Cortex-M33-Peripherals/Security-Attribution-and--Memory-Protection/MPU-Memory-Attribute-Indirection-Registers-0-and-1
    743573aa-5267-49a3-a614-e8aba08cdd1c-image.png

    https://developer.arm.com/documentation/100230/0004/appendices/unpredictable-behaviors/memory-access-and-address-space?lang=en
    54c2d08a-ccb4-4eac-91ce-cd4461f49bb5-image.png

    问题确认

    由于该问题是上电概率性(1/16)发生。
    因此如果要确定代码中是否存在非对齐访问Flash的情况,需要固定发生条件使其百分百必现:

    • 可以在main函数中配置“MPU->MAIR1 &= 0x0FFFFFFF;” 再进行测试,看能否产生 UNALIGNED UsageFault。
    • 或者ozone attach后直接修改MPU_MAIR1寄存器为0后,进行测试。
      d0240100-a81f-4954-815a-c30fd657e40c-image.png

    解决方法

    ebc6e4c9-44de-425f-8fd1-60dd1243fc45-image.png

    • 将40行和43行的“7UL” 改为 “0UL”,正确初始化即可。

    测试例程

    YTM32B1MD1_Unaligned_Access_Demo.zip

    1 条回复 最后回复
    0
    • yt0069Y yt0069 从 中的 SDK BUGS 移动了该主题
    • runR run 在 中 引用了 这个主题

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

    帮助没办法联网的电脑使用YCT

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • demo
    12
    can
    9
    lin stack
    6
    yt-link
    5
    vscode
    3
    adc模块
    2
    i2c
    2
    uuid
    2
    Online Users
    dongtian1D
    dongtian1
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门