打印

LPC900系列单片机Flash的字节编程方法

[复制链接]
2260|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsbjb|  楼主 | 2009-9-29 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LPC900系列单片机的字节擦除编程特性允许Flash程序存储器用作数据存储器,使用VDD电压来执行编程和擦除算法,Flash编程/擦除操作执行时间小于2ms。以下是各芯片的Flash大小和扇区/页规格:
P89LPC930/931是4KB/8KB的Flash,Flash扇区大小为1K字节,页为64字节;
P89LPC920/921/922是2KB/4KB/8KB的Flash,Flash扇区大小为1K字节,页为64字节;
P89LPC912/913/914均为1KB的Flash,Flash扇区大小为256字节,页为64字节;
P89LPC906/907/908、P89LPC901/902/903均为1KB的Flash,Flash扇区大小为256字节,页为16字节。
字节擦除编程实际是应用固件(IAP-Litie)控制来实现的,即通过使用4个SFR来实现,1个控制/状态寄存器--FMCON,1个数据寄存器--FMDATA,2个地址寄存器--FMADRH、FMADRL。
1.IAP-Lite简介
P89LPC900系列单片机(除LPC932)支持IAP-Lite编程和擦除功能,未加密扇区中的任何字节都可通过MOVC指令访问,因此,未加密扇区可用作非易失性数据存储器。另外,用户还可访问其它flash单元,诸如UCFG1、引导向量字节、状态字节、加密字节和标识字节。访问上述flash单元的方法与访问用户程序存储器稍微有些不同。
2.字节擦除编程应用
IAP-Lite提供了一种程序擦除编程功能,通过一次操作完成一页内一个或多个字节的擦除和编程,而不影响该页的其它字节。IAP-Lite功能在微控制器的固件控制下得以实现,通过使用4个SFR和1个内部16/64字节页寄存器来完成对未加密扇区的擦除和编程。这些SFR为:

相关帖子

沙发
hsbjb|  楼主 | 2009-9-29 17:55 | 只看该作者
1.FMCON (Flash控制寄存器),读时用作状态寄存器;写时用作命令寄存器。注:写入命令时状态位被清零。
2.FMDATA (Flash数据寄存器),将接收的数据装入页寄存器。
3.FMADRL,FMADRH (Flash存储器地址低字节,Flash存储器地址高字节),用来指示页寄存器的字节地址或用户程序存储器的页。
页寄存器包括16/64个字节,每个字节都有一个更新标志。当将一个LOAD命令写入FMCON时,页寄存器和所有更新标志都被清零。当FMDATA被写入数据时,写入的值存放在FMADRL低4/6位指向的页寄存器单元。同时,相应单元的更新标志置位,FMADRL自动增加到下一个单元。在页寄存器的最后一个字节被写入后,FMADRL 重新指向页寄存器的第一个字节,但不影响FMADRL[7:4]/[7:6]的值。此时,就不能继续向页寄存器写入数据了。通过在写入FMDATA前改变FMADRL的内容可将任何字节单元装入页寄存器,但是,每发布一个LOAD 命令,页寄存器的每个单元只能被写入一次,不要试图对一个页寄存器单元执行多次写操作。
FMADRH和FMADRL[7:4]/[7:6]用来选择执行擦除编程功能的程序存储器页。当向FMCON写入擦除编程命令后,页寄存器中被更新单元对应在程序存储器页的单元的所有内容被清除,且相应单元的内容被编程到程序存储器页中。只有用户程序阵列中装入页寄存器的字节才可被擦除和编程,用户程序存储器的其它字节不受影响。
向FMCON写入擦除-编程命令(68H)将起动擦除-编程过程并使CPU进入编程-空闲状态。CPU会一直保持这种空闲状态直到擦除-编程周期结束或被一个中断终止。从编程-空闲状态退出后,FMCON的内容是该周期的状态信息。
如果在擦除/编程周期内有中断产生,擦除/编程操作被终止,FMCON的OI标志(操作被中断)置位。如果某一应用允许在擦除-编程过程中产生中断,可通过用户程序在每次擦除-编程操作后检查OI标志(FMCON.0)来判断操作是否被终止。一旦擦除-编程操作被终止,用户程序需要重复整个过程来起动页寄存器的装载。
不管有多少个字节装入页寄存器,擦除编程周期的时间为4ms。
程序存储器中一个字节(或多个字节)的擦除-编程操作步骤如下:
1.向FMCON写入LOAD命令(00H)。LOAD命令将清除页寄存器的所有单元及其相应更新标志。
2.将页寄存器内的地址写入FMADRH、FMADRL(即所要擦除编程的地址)。用户此时可写入页寄存器内的字节单元(FMADRL[3:0]/[5:0])和程序存储器页地址(FMADRH和FMADRL[7:4]/[7:6])。
3.将要编程的数据写入FMDATA。这可让FMADRL增加,使其指向页寄存器的下一个字节。
4.如果需要的话,将要编程的下个字节的地址写入FMADRL(如果是连续字节就不需要,因为FMADRL是自动递增的)。所有被编程的字节必须在同一页中。
5.将要编程到下一字节的数据写入FMDATA。
6.重复FMADRL和/或FMDATA的写操作,直至所有要编程的字节都被装入页寄存器。
7.向FMCON写入擦除编程命令(68H),起动擦除-编程周期。
8.读FMCON来检查状态。如果操作被终止,重新通过LOAD命令来起动操作。

使用特权

评论回复
板凳
dfsa| | 2009-9-30 09:18 | 只看该作者
嗯,不错,呵呵

使用特权

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

本版积分规则

193

主题

2354

帖子

0

粉丝