搜索
bottom↓
回复: 21

最近发现STM32 写入FLASH很简单,但是很容易子宫,大家有什么好办法没?

[复制链接]

出0入0汤圆

发表于 2011-11-10 23:28:19 | 显示全部楼层 |阅读模式
最近发现STM32 写入FLASH很简单,  用几个库函数就行了,  但是STM32的FLASH 不分数据FLASH和程序FLASH, 甚至可以直接运行程序把自己的代码擦除了,  所以想问问大家有什么好办法,确定烧入的代码的起止位置, 避免擦除到程序FLASH,总不能根据KEIL里显示代码大小再数吧?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-11-11 00:15:30 | 显示全部楼层
回复【楼主位】zouyf12  
-----------------------------------------------------------------------

先读一下 看看是不是0xffffffff 再读下一个是不是0xffffffff 如果都是0xffffffff 记录下当前的地址 开始从这写吧

出0入0汤圆

发表于 2011-11-11 07:56:25 | 显示全部楼层
定义一个 指定地址(flash区)的数组 让编译器不分配代码 或常量到那个page即可

出0入0汤圆

发表于 2011-11-11 10:59:11 | 显示全部楼层
有Flash的读保护位和写保护位,写保护位可以保护对应的区域不被再次写入。

出0入0汤圆

发表于 2011-11-11 11:06:22 | 显示全部楼层
这就是不仔细看手册,只知道调用库的后果。

出0入0汤圆

发表于 2011-11-11 11:07:16 | 显示全部楼层
keil 里面设置代码存放数据区,你写的数据和代码区不重合就可以

出0入0汤圆

发表于 2011-11-11 11:08:40 | 显示全部楼层
回复【5楼】10000years  
keil 里面设置代码存放数据区,你写的数据和代码区不重合就可以
-----------------------------------------------------------------------

地址不重合也可能出错。到时候查起来就麻烦了,所以要写保护。

出0入0汤圆

发表于 2011-11-11 11:15:01 | 显示全部楼层
顶3楼!

出0入0汤圆

发表于 2011-11-11 13:15:02 | 显示全部楼层
子宫都出来了

出0入0汤圆

发表于 2011-11-11 13:46:28 | 显示全部楼层
1. STM32有页写保护的,在烧录的时候把你的 bootloader 保护起来;
2. bootloader 启动后,进入应用程序之前,如果没有特殊需求,建议用软件把写Flash锁定(输入错误的开锁数据即可),这样锁定后,Flash写入不能再开启,直到MCU复位;

出0入0汤圆

 楼主| 发表于 2011-11-11 16:23:29 | 显示全部楼层
回复【2楼】xivisi LiYong
定义一个 指定地址(flash区)的数组 让编译器不分配代码 或常量到那个page即可
-----------------------------------------------------------------------

我也是怎么考虑的。


回复【3楼】__STM32__
有flash的读保护位和写保护位,写保护位可以保护对应的区域不被再次写入。
-----------------------------------------------------------------------

这个就没意思, 可能我表达上误导了大家, 我是想又不擦除程序,又能正常存入数据, 如果只是简单的上写保护,只是保护了程序,但是数据却没有存入。

回复【8楼】s-t-m-3-2
子宫都出来了
-----------------------------------------------------------------------

手误~

回复【9楼】windy__xp 龙笑
1. stm32有页写保护的,在烧录的时候把你的 bootloader 保护起来;
2. bootloader 启动后,进入应用程序之前,如果没有特殊需求,建议用软件把写flash锁定(输入错误的开锁数据即可),这样锁定后,flash写入不能再开启,直到mcu复位;
-----------------------------------------------------------------------

嗯 软锁FLASH 不错~

出0入0汤圆

发表于 2011-11-11 16:39:57 | 显示全部楼层
不过,那么大的空间你就能碰到程序FLASH?从BOOTLOADER里看,程序是从那里写起走的,然后在看看基本上写到那里没有了,他顺着写,你就从后面倒过来写!这样也是可行的!而且还不用计算!

出0入0汤圆

发表于 2011-11-11 18:14:36 | 显示全部楼层
软件锁FLASH也许是一种非主流的用法,但是如果不这样锁,软件异常了,同样可以开锁,还是能改写FLASH程序,所以并不安全,由于向STM32的开锁寄存器写非法数据又会引起 bus fault,所以STM32应该是把这种操作当做fault处理的,应该是非主流的用法。
    向开锁寄存器写错误的开锁数据,需要注意一些问题,因为这个会引起一个 bus fault,如果 bus fault 得不到响应,就会上访成 hard fault,软件上需要专门处理一下这个fault,也就是说在你人为故意写错误开锁数据时,这一次fault要响应,但是不执行,直接返回就好了。

出0入0汤圆

 楼主| 发表于 2011-11-13 18:03:21 | 显示全部楼层
回复【12楼】windy__xp 龙笑
    软件锁flash也许是一种非主流的用法,但是如果不这样锁,软件异常了,同样可以开锁,还是能改写flash程序,所以并不安全,由于向stm32的开锁寄存器写非法数据又会引起 bus fault,所以stm32应该是把这种操作当做fault处理的,应该是非主流的用法。
    向开锁寄存器写错误的开锁数据,需要注意一些问题,因为这个会引起一个 bus fault,如果 bus fault 得不到响应,就会上访成 hard fault,软件上需要专门处理一下这个fault,也就是说在你人为故意写错误开锁数据时,这一次fault要响应,但是不执行,直接返回就好了。
-----------------------------------------------------------------------

受教谢谢~~

出0入0汤圆

发表于 2011-11-13 19:37:04 | 显示全部楼层
受教

出0入0汤圆

发表于 2011-12-27 14:50:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-27 15:08:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-10 10:42:27 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-5-15 18:10:23 | 显示全部楼层
    mark     

出0入0汤圆

发表于 2012-5-15 18:20:25 | 显示全部楼层
正因为可以写程序区,才可以实现IAP的,来实现固件代码的自动升级

出0入0汤圆

发表于 2015-8-24 10:46:00 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2017-3-30 10:29:46 | 显示全部楼层
mark.........
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-3 12:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表