[技术问答] HC32F030J8TA擦写FLASH碰到的问题

[复制链接]
2768|7
 楼主| tangweichen1234 发表于 2019-3-22 23:37 | 显示全部楼层 |阅读模式
本帖最后由 tangweichen1234 于 2019-3-22 23:48 编辑

最近有一个项目使用HC32F030J8TA作为主控,64K的FLASH规划0x00000000 - 0x00003800 低14K作为boot区, 0x00003800 - 0x0000FC00 49K作为app区,最后1K作为data区保存用户数据。在boot区中使用flash擦写功能更新app区的代码是正常的。而在app区中使用flash擦写功能更新data区就会触发HardFault_Handler,仔细检查代码逻辑没发现什么错误,因为boot区起始地址为0可以正常使用擦写功能,然后自己尝试逐渐降低app区的起始地址,实验发现只要app区地址是低于0x00002D00擦写功能正常,高于0x00002D00就会会触发HardFault_Handler。最奇怪的是当app区的起始地址高于0x00002D00时,用IAR单步执行官方驱动库flash擦写过程时又是正常的,直接运行就异常,这就有点摸不着头脑了
je段 发表于 2019-3-25 09:54 | 显示全部楼层
快来个大神解答下啊
martinhu 发表于 2019-3-26 18:03 | 显示全部楼层
Boot 和APP运行的主频是一样的吗
RobinQcp 发表于 2019-3-28 17:51 | 显示全部楼层
需要确认几点:
1)Flash相关设置是否确认无误;
2)Clock相关设置(Boot区和App区)是否确认无误;
如果可以,能否贴出代码来一起研究一下?
liaotian001 发表于 2019-7-19 09:43 | 显示全部楼层
1.        对flash 进行Program/Erase操作的函数处于0x8000之内,可以正常执行flash操作。
2.        对flash 进行Program/Erase操作的函数高于0x8000空间,会出现hard fault中断。
此方案是因出于安全性考虑为防止**者将代码驻留到高地址空间对低地址空间进行探测,因此关闭了在0x8000以上地址空间的flash操作功能。

补救措施
1.将flash操作函数完整放入0x8000以内空间运行;
2.将flash操作函数放置于RAM处运行;
643745d312039d329e.png
liaotian001 发表于 2019-7-19 09:44 | 显示全部楼层
这个case,我刚刚看到,之前不知道怎么就忽略了,不好意思!
tangweichen 发表于 2019-10-28 17:37 | 显示全部楼层
liaotian001 发表于 2019-7-19 09:43
1.        对flash 进行Program/Erase操作的函数处于0x8000之内,可以正常执行flash操作。
2.        对flash 进行Program ...

感谢您的解答,确实如此。
caizhiwei 发表于 2022-12-31 17:59 | 显示全部楼层
确实,我今天也遇到了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部