[资料分享] IAP应用

zhdphao   2010-7-1 11:17 楼主

    LPC1343没有EEPROM, 无法保存应用的设置数据. 我看大家一般的做法都是外接一片EEPOM.

    其实我们需要保存数据并不是很多、很频繁,完全可以保存在32K FLASH的某个地方。

 

    LPC1343支持在应用编程(IAP),写入的时候有点麻烦,需要考虑到程序中断、扇区搽除、使用寿命等因素。

1、在擦除/写操作过程中,片内Flash存储器不可访问。只有当用户应用程序代码启动执行时,用户Flash区的中断向量才有效。在调用Flash擦除/写IAP之前,用户应当禁止中断或确保用户中断向量在RAM中有效且中断处理程序位于RAM中。IAP代码不能使用或禁止中断。

2、如果你写入FLASH的地方不是空白的(0XFF),你必须搽除所在的整个扇区。免不了影响同扇区的其他字节。

3、FLASH的寿命不是无限的,一般是EEPROM的1/10。如果你要作为临时交换空间可以用RAM,不要动IAP的主意。IAP只适合保存哪些偶尔修改长期保存的数据。

    IAP提供一个写入FLASH的方法,如果读保存在FLASH的数据十分简单:FLASH已经和RAM一样在内存空间里了,直接读内存空间就行了。

回复评论 (6)

不错啊,谢谢分享!!!!!!!!!
我的博客
点赞  2010-7-1 11:27

会用到的IAP命令: 准备写操作的扇区(50)、将RAM内容复制到Flash(51)、擦除扇区(52)

未命名2.JPG

未命名3.JPG

未命名4.JPG

点赞  2010-7-1 11:35

回复 板凳 zhdphao 的帖子

IAP这两种方式 都可以实现
1:外接E2
2:直接操作FLASH(主要注意读写就行)
主要注意的就是地址映射
处处留心皆学问!
点赞  2010-7-1 11:37
版主动作真快,就回复了。呵呵!
点赞  2010-7-1 11:45
用FLASH保存我们的设置原理就只有这些, 非常简单.
但是如果运用不好,  那我们的程序带来不安全的因素,
想一想你的代码的一部分被搽除或者被其他数据覆盖,设备还能工作吗?呵呵!

我想比较好的方法就是专门划出一个扇区, 用于保存我们的变量.
我们的程序不应该有任何的代码在这个扇区里。
点赞  2010-7-1 14:01
另外还有一个需要面对的问题:  LPC1343的FLASH的一个扇区大小为4K(粒度)。每次搽除最起码要搽除4KB的FLASH。
这样LPC1343的32KB你只能使用28KB了。
还有一个方法: 在RAM里划出4KB的空间,保存4KB的FLASH内容。这样4KB可以是代码和数据的混合区。每次需要修改配置数据先在这块区域里面保存好最后的4KB的最后内容(包括复制的代码区和保存的数据),然后写入到扇区。这样你的FLASH空间就不会浪费了。但是这又带来风险:如果FLASH正在写入时被打断(比如停电等),你的执行代码就危险了。
点赞  2010-7-1 14:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复