打印
[技术问答]

HC32F030J8TA擦写FLASH碰到的问题

[复制链接]
2298|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区)是否确认无误;
如果可以,能否贴出代码来一起研究一下?

使用特权

评论回复
5
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处运行;

使用特权

评论回复
6
liaotian001| | 2019-7-19 09:44 | 只看该作者
这个case,我刚刚看到,之前不知道怎么就忽略了,不好意思!

使用特权

评论回复
7
tangweichen| | 2019-10-28 17:37 | 只看该作者
liaotian001 发表于 2019-7-19 09:43
1.        对flash 进行Program/Erase操作的函数处于0x8000之内,可以正常执行flash操作。
2.        对flash 进行Program ...

感谢您的解答,确实如此。

使用特权

评论回复
8
caizhiwei| | 2022-12-31 17:59 | 只看该作者
确实,我今天也遇到了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝