打印
[STM32F2]

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

[复制链接]
2644|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左右,正常。

使用特权

评论回复
5
zxm19820916|  楼主 | 2014-1-21 17:02 | 只看该作者
16k那个不会有问题,我有个16k的全局数组做缓存。擦除16k扇区时,先全部拷贝出来,然后更新要写入的数据,再擦除16K扇区,然后将16K缓存写入到16k扇区里。正常。

使用特权

评论回复
6
dirtwillfly| | 2014-1-21 20:58 | 只看该作者
楼主的通讯多长时间一次?
根据通讯时间合理安排好flash的擦写就可以啊

使用特权

评论回复
7
zxm19820916|  楼主 | 2014-1-22 10:23 | 只看该作者
我们是做PLC的,在下载用户程序时一直都在通讯。

使用特权

评论回复
8
mmuuss586| | 2014-1-22 14:11 | 只看该作者
不要把程序搞丢了
丢程序就麻烦了。

使用特权

评论回复
9
明月小厨| | 2014-2-9 12:39 | 只看该作者
FLASH只有一个总线,写FLASH时,总线被独占,FLASH内的所有程序自动暂停执行。但在RAM内的程序可以执行。
解决办法:
FLASH分成二个部分,独立总线;程序全放在A块;数据全放在B块;这样,对B块可以随便操作而不影响A块的程序运行。
具体可以参考STM32F42X;也许是F43X或F44X;

使用特权

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

本版积分规则

22

主题

299

帖子

2

粉丝