NXPARMContextM0内部Flash用作EEPROM使用详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Context M0 内部Flash用作EEPROM使用详解
1.LPC1114x的Flash简介
LPC1114x的Flash存储器系统包含32kB Flash器件的8个扇区。

Flash存储器从地址0开始并向上增加。

Flash boot装载程序同时提供片内Flash存储器的ISP和IAP编程接口。

IAP、ISP和RealMonitor程序都位于boot扇区。

boot占有的Flash存储器扇区不能用来存放用户数据。

LPC1114x系列提供在在应用中编程IAP,最终用户代码直接执行在应用编程(IAP)对片内Flash存储器进行擦除和编程操作。

Falsh可以擦写10000次,512字节行编程时间为1ms。

单扇区或整片擦除时间为400ms。

有些IAP和ISP命令以“扇区”为单位进行操作,同时
还指定扇区号。

下面列出了LPC111x系列ARM 的扇区号和存储器地址之间的对应关系。

LPC111x系列ARM 器件的扇区
扇区号扇区大小(KB)地址范围
0 4 0x00000000 – 0x0000 0FFF
1 4 0x00001000 – 0x0000 1FFF
2 4 0x00002000 – 0x0000 2FFF
3 4 0x00003000 – 0x0000 3FFF
4 4 0x00004000 – 0x0000 4FFF
5 4 0x00005000 – 0x0000 5FFF
6 4 0x00006000 – 0x0000 6FFF
7 4 0x00007000 – 0x0000 7FFF
2.向Flash中写数据
Flash必须遵循选择扇区,擦除,选择扇区,写的过程,具体到程序的编写,必须先后有下面的代码:
zyIrqDisable(); /* 在IAP操作前必须关闭所有中断*/
ucErr = parIdRead(); /* 读器件ID */
ucErr = codeIdBoot(); /* 读Boot版本号*/
ucErr = sectorPrepare(1, 1); /* 准备扇区1 */
ucErr = sectorErase(1, 1); /* 擦除扇区1 */
ucErr = blankChk(1, 1) ; /* 查空扇区1 */
ucErr = sectorPrepare(1, 1); /* 选择扇区1 */
ucErr = ramCopy(0x00001000,(uint32)GulData , 512); /* 写数据到扇区1 */
ucErr = dataCompare(0x00001000,(uint32)GulData, 512); /* 比较数据*/
zyIrqEnable();
应用的时候需要注意下面几点:
1)如果写之前没有选择扇区,是不能正确写入的。

2)如果写之前没有擦除,写入是不正确的。

3)最少写512字节,写入的字节数应当为512 或1024 或4096 或8192.
4)Flash在擦写时不能访问,这也是IAP是要关闭中断的原因。

关中断可以用下面的语句来实现:__asm{MSR CPSR_c, #0xdf},与此对应,开中断可以下面的语句:__asm{MSR
CPSR_c, #0x5f}。

3.从Flash中读数据
从Flash中读数据比较简单,可以定义一个指针变量,该指针变量指向特定的Flash地址,
例如可以写成下面的样子:
uint32 i;
uint32 * p;
p=(uint32 *)0x00001000;
for(i=0;i<400;i++)
{
flashdataread(*(p));
p+=4;
}
但必须注意的是M0数据是按4字节方式存储,所以指针每次加4。

相关文档
最新文档