七 FLASH 存储器的一般描述
P89C669的FLASH具有可擦除可编程的功能,FLASH可按字节进行读写,芯片的擦除操作将删除所有的内容,块擦除可以就内存的字节块进行擦除操作。系统内编程和并行编程都是有效的。片内擦写时序为用户提供于友好的接口。P89C669支持10000次有效的擦写。存储单元采用了优化的擦写和编程技术,利用更先进的通道氧化处理技术和低电压擦写操作提供可靠的多次擦写处理。P89C669只要提供5v的电压就可以进行擦写操作了。
7.1系统可编程和现场可编程的特点
1. FLASH内部程序支持块擦除
2. 内部4K字节的boot flash包含了一个低级的可在系统的编程程序和默认的UART装载程序。用户可以调用来实现现场编程IAP,也可以关闭BOOT FLASH来访问8M的外部拓展空间。
3. BOOT矢量允许用户将程序代码放入FLASH的任意地方,大大提高了应用的灵活性。
4. 默认的BOOT FLASH装载通过UART0接口实现可编程,不需要用户提供装载程序。
5. 如果内部程序存储被禁止使用EA=0,那么就可以使用8M的外部存储器
6. +5v的电压可擦写
7. 字节编程(20us)
8. 块(8K)擦除时间为<1秒,整个FLASH96K擦除为<1秒
9. 利用87C51的接口实现与编程器连接实现并行编程
10. 每个字节支持10000次擦除至少
11. 数据至少可以保存10年
7.2 基于FLASH的P87C51处理器处理能力
7.2 .1存储器分配
P89C669含有96K字节的Flash(MX通用扇区范围:80:0000-81:7FFFH)和2K字节的片内RAM。
FIGURE75
7.2.2flash可编程擦除
有三种擦写FLASH的方法,第一方法通过对最终用户提供一个使用低级的编程程序通过BOOTFLASH的公共入口点。最终用户必须使用正在擦除的块以外的空间执行代码。第二种片内的UART0的ISP boot loader被启动,最终用户可以通过调用低级的编程程序通过BOOT FLASH的公共入口点来应用。第三点擦除可以通过使用商业有用的EPROM程序,并行编程可以和EPROM 87C51类似的使用这些设备,但是这是不合法的,现有的商用软件必须支持这些设备。
7.2.3 BOOT FLASH
当微处理器编写自己的FLASH内存时,所有低级的详细信息由FLASH分离的FLASH的称为BOOTFLASH的4KB内存中的代码来处理 。用户程序只要调用对应公共的入口点就可以完成需要的操作了。BOOTFLASH处理包含下面一些事情: 块擦除,字节编程,校验字节,编写安全的锁定位,等等。BOOTFALSH覆盖地址从00:F000H到00:FFFFH,当他被激活后,默认的程序开始的boot向量设置是00:FC00H开始,BOOTFLASH可能需要关闭(ENBOOT=0)使得高4KB的地址也可以被访问执行。
:注意:为了使用BOOTFLASH,使用LCALL/CALL指令调用00:F000H处地址,当然使用RET来返回其调用。此外这个固定的调用BOOTFLASH的入口地址可以被放到64K的内存映射表中。
图75
7.2.4 上电执行复位代码
P89C669有包含两个特殊FLASH元素,一个是BOOTVECTOR一个是状态字节,BOOTVECTOR是16位寄存器由高位BVH和中间位BVM组成。在产生复位下降沿后,P89C669会检测所有状态字节的内容,如果状态字节内容全为0,那么程序开始由00:0000H
处开始执行,这是平常一般的用户应用程序的执行的起始地址。如果状态字节不为0那么地址将会由 BVH + BVM(FCH)+ A7-0(0)组成,对应于00:FC00H 地址 BOOT FLASH ISP BOOT LOADER执行。用户BOOT LOADER可以由BOOTVECTOR来设置用户BOOTLOADER。
注意:在擦除bootvector和状态位时候,这三个字节同时被擦除,用户有必要重新编写bootvector在擦除之后并且重新更新状态位。
7.3 硬件激活BOOT LOADER
BOOTLOADER同样可以执行通过在下降沿来复位时保持PSEN LOW , EA > Vih(如+5v)和ALE HIGH,这对于设置状态字节一个非0内容同样起效果。如果厂商起始BOOTVECTOR向量不是00:FC00H时,将不会在指向ISP的BOOTFLASH的装载代码。如果是这样,只有通过并行编程来改变BOOTVECTOR的内容,不提供给最终用户应用一个可擦除和编程bootvector和状态字节的客户装载程序。在刷写完FLASH 后,状态字节需要清零并且bootvector需要置零来保证客户程序下次从00:0000H用户起始地址开始执行。
7.4ISP
ISP不需要通过移动系统的微控制器来完成操作,ISP简单通过一系列内部硬件资源和固件联合来通过UART串行接口更方便的对P89C669进行编程。这个固件由PHIPH提供并且镶嵌在每个669设备中间。PHILIP的ISP工具使用电路内嵌入编程以尽可能小的另外增加器件和电路板的费用。ISP功能需要使用5个引脚:TXD0,DXD0,Vss,Vcc,Vpp(FIGURE 76),需要一个连接器有效的连接应用程序和外部电路来使用这些特征。Vpp提供适当的减弱并且Vpp不允许执行数据表限制。
7.4.1使用ISP
使用UART0进行ISP系统给用户提供一些特征,在特征中使用特殊定义协议来通过UART0进行和主机的通话。大多数的PC兼容于计算机会成为主机通过串行口发送数据然后等待微控制器的回答。
7.4.2IAP方法
有些IAP利用应用程序擦除或重新编写FLASH部分,所有的调用都使用一个公共接口,PGM_MTP,通过设置微处理器寄存器来选择可编程功能在调用00:FFF0地址PGM_MTP之前,结果返回在寄存器中。IAP调用在表25中表示
7.4.3使用WDT
P89C669支持使用WDT来进行IAP,用户详细指定WDT由R1设置功能位优先于PGM_MTP,在IAP期间请求WDT的装载只能在应用期间进行,因为一旦WDT被装载就要启动WDT如果WDT没有被启动的话。