一般的单片机里面都会集成可编程的FLASH存储器,用于程序代码和非易失数据的存储。现行单片机FLASH的大小有32KB,64KB,128KB,256KB等。从汇编角度来操作FLASH的话,则需要用MOVX指令进行在线编程。一旦FLASH位被清零,只能通过擦除才能将其志为1状态。
我们对FLASH的操作分为三种:读FLASH,写FLASH以及擦除FLASH。
读FLASH:在进行读FLASH时并没有改变FLASH里面的值,因此没有什么需要特别需要注意的情况。在此不作详细解读。
在包含写和/或擦除FLASH存储器的代码的任何系统中,为了保证FLASH内容的完整性,必须使能VDD 监视器并将其设置为复位源。而且在使能VDD 监视器和将其使能为复位源之间不应有延时。在VDD 监视器被禁止或未被使能为复位源期间,对FLASH 存储器执行任何擦除或写操作都将导致FLASH 错误器件复位。
用软件写和擦除flash时受flash锁定和关键码功能的保护。在进行FLASH 操作之前,必须按顺序向FLASH 锁定和关键码寄存器(FLKEY)写入正确的关键码。关键码为:0xA5,0xF1。写关键码的时序并不重要,但必须按顺序写。如果写关键码的顺序不对或写入了错误的关键码,FLASH 写和擦除操作将被禁止,直到下一次系统复位。如果在正确写入关键码之前进行了FLASH 写或擦除操作,FLASH 写和擦除也将被禁止。每次FLASH 写和擦除操作之后,FLASH 锁定功能复位;在进行下一次FLASH 写或擦除操作之前,必须重新写关键码。
一:擦除FLASH 操作步骤:
FLASH 存储器是以1024 字节的页为单位组织的,擦除操作将擦除一个整页(将页内的所
有字节置为0xFF)。擦除一个1024 字节页的步骤如下:
1. 保存当前中断状态并禁止中断。
2. 置1 程序存储器擦除允许位(PSCTL 中的PSEE)。
3. 置1 程序存储器写允许位(PSCTL 中的PSWE)。
4. 向FLKEY 写第一个关键码:0xA5。
5. 向FLKEY 写第二个关键码:0xF1。
6. 用MOVX 指令向待擦除页内的任何一个地址写入一个数据字节。
7. 清除PSWE 和PSEE 位。
8. 恢复操作前的中断状态。
二:写FLASH操作步骤:
用软件对FLASH 字节编程的步骤如下:
1. 保存当前中断状态并禁止中断。
2. 保证FLASH 字节已经被擦除(值为0xFF)。
3. 置位寄存器PSCTL 中的PSWE 位。
4. 清除寄存器PSCTL 中的PSEE 位。
5. 向FLKEY 写第一个关键码:0xA5。
6. 向FLKEY 写第二个关键码:0xF1。
7. 用MOVX 指令向1024 字节扇区内的目标地址写入一个数据字节。
8. 清除PSWE 位。
9. 恢复操作前的中断状态。
特别注意:写FLASH 存储器可以清除数据位,但不能使数据位置1;只有擦除操作能将FLASH 中的数据位置1。在写入新值之前,必须先擦除待编程的字节地址。