关于FLASH实现自我擦除

近期在实现cortex-R内核上的BootLoader,涉及到片上FLASH的erase,write。

FLASH都有个特性就是非RWW(ready while write),即不能在进行擦写操作时,同时进行read,即其内存储的代码也不能执行。

所以要把部分flash操作转移到RAM中,这样在操作flash时,程序运行在RAM中,不会冲突。

具体讲程序放在RAM中运行的方式,可以参考大佬痞子衡的两篇文章,以及编译器相关说明:

《在IAR下将关键函数重定向到RAM中执行的方法》

《在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法》

另外有一个细节问题:

把什么代码放在RAM中运行能够顺利操作flash?

答:放入RAM中的code至少是能够单独执行完一次完整操作,并等待FLASH恢复到ready状态后,才能返回的完整function。  即:在一次erase或者write全部完成之前,是不能返回到flash中去执行其中的code。

记录:调试过程中遇到一个问题:把临时代码整理后,把一个APP_VALID_FLAG数组传参进写FLASH的函数(次函数已被重定位到RAM)后,MCU 出现prefetch异常,什么问题?

解:APP_VALID_FLAG数组是一个16B的固定数组,习惯性使用了const作为前缀,而const数组会被编译器存放在flash数据区,即当flash_write尝试访问此数组时,即需要在write的同时在内部总线上读取此数据,而此时FLASH控制器正被占用,无法读取,造成prefetch异常。解决办法是:把const去掉即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值