[STM32F2] 请教Flash模拟EEPROM时往Flash里写入几十k数据的操作?

[复制链接]
3030|8
 楼主| zxm19820916 发表于 2014-1-21 14:19 | 显示全部楼层 |阅读模式
以前用的F103ZE芯片,速度不太够,所以选择了F205ZE芯片。
我们写入数据的操作:
Flash_Unlock();
清除标记;
保存要擦除的扇区的数据到缓存;
擦除扇区;
for循环: 写入数据(4个字节一次);

Flash_Lock();

请问:flash解锁和锁上这段时间内,能否响应中断?为什么数据都已经写入成功了,最后通信却中断了?
airwill 发表于 2014-1-21 16:40 | 显示全部楼层
flash解锁和锁上这段时间内,能否响应中断? 当然是可以响应的.
但是在 FLASH 写和擦除的操作过程中, 中断不能响应. 因为这段时间 FLASH 不允许访问.
 楼主| zxm19820916 发表于 2014-1-21 16:54 | 显示全部楼层
但是在 FLASH 写和擦除的操作过程中, 中断不能响应. 因为这段时间 FLASH 不允许访问.

那这个怎么办?F205ZE芯片分4个16k和1个64k扇区,再有就是3个128k扇区。我用了一个16k和一个64k扇区作为EEPROM使用。16k里面存放了13k数据。64k里面需要存放20多k数据。写入到16k的那个正常。但是写入到64k的这个有问题,数据已经能够写完,但是最后100%完成后,通信中断了。
 楼主| zxm19820916 发表于 2014-1-21 16:57 | 显示全部楼层
我作了这样的处理。写入4k,就lock一下,延时几十个数或者几百个数,然后unlock,接着写。但是也不行。
不作任何其他处理,直接擦除扇区,然后for循环写入数据。把数据量减少到12k左右,正常。
 楼主| zxm19820916 发表于 2014-1-21 17:02 | 显示全部楼层
16k那个不会有问题,我有个16k的全局数组做缓存。擦除16k扇区时,先全部拷贝出来,然后更新要写入的数据,再擦除16K扇区,然后将16K缓存写入到16k扇区里。正常。
dirtwillfly 发表于 2014-1-21 20:58 | 显示全部楼层
楼主的通讯多长时间一次?
根据通讯时间合理安排好flash的擦写就可以啊
 楼主| zxm19820916 发表于 2014-1-22 10:23 | 显示全部楼层
我们是做PLC的,在下载用户程序时一直都在通讯。
mmuuss586 发表于 2014-1-22 14:11 | 显示全部楼层
不要把程序搞丢了
丢程序就麻烦了。
明月小厨 发表于 2014-2-9 12:39 | 显示全部楼层
FLASH只有一个总线,写FLASH时,总线被独占,FLASH内的所有程序自动暂停执行。但在RAM内的程序可以执行。
解决办法:
FLASH分成二个部分,独立总线;程序全放在A块;数据全放在B块;这样,对B块可以随便操作而不影响A块的程序运行。
具体可以参考STM32F42X;也许是F43X或F44X;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

299

帖子

2

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