本发明专利技术公开了一种Flash存储器在线编程控制方法,包括擦除操作和写入操作,其特征在于:在RAM中预置Flash存储器加高压期间运行语句以及返回语句的机器码,所述Flash存储器加高压期间运行语句包括向状态寄存器写入中断标志以启动对应命令的语句,以及判断等待命令完成的语句;在擦除操作和写入操作过程中,在加高压期间转向RAM中进行程序运行。本发明专利技术将加高压期间引起的不稳定因素与Flash存储器的擦除、写入操作独立开来,控制方法具备通用性,编程方便,并确保了Flash存储器在线编程的稳定性。
【技术实现步骤摘要】
本专利技术涉及一种用于对存储器进行在线编程的控制方法,具体涉及一种 Flash存储器在线编程稳定性控制方法。
技术介绍
理想的存储器应该具备存取速度快、不易失、存储密度高(单位体积存储 容量大)、价格低等特点。现有技术中,常见的存储器通常具备这些特点中的 一个或几个。近几年,Flash存储器技术趋于成熟,Flash存储器具有电可擦 除、无需后备电源来保护数据、可在线编程、存储密度髙、低功耗、成本较低 等特点,是目前比较理想的存储器。Flash存储器的编程模式有写入器模式(或 监控模式)和在线编程模式(或用户模式)两种。写入器模式是指,主机通过写入 器向MCU发送相关命令来调用监控ROM中的擦除或写入子程序,从而实现 Flash存储器的擦除或写入。在线编程模式,主要是利用Flash存储器的电可 擦除特性,允许用户程序在运行过程中,调用驻留在Flash存储器内部的擦除 或写入子函数,对Flash存储器内的数据或程序进行修改。Flash在线编程技术是计算机技术的重要分支,是嵌入式系统最新发展的 产物,是实现嵌入式应用产品程序的在线更新、重要参数的掉电保护与恢复、 静态参数的在线修改等功能的重要技术手段。程序的在线更新提髙了嵌入式系 统应用产品的可扩展性与升级性能;参数的掉电保护与恢复及静态参数的在线 修改可以使用Flash存储器的一部分取代传统EEPROM,提髙了系统的稳定性o然而由于Flash在线编程时需要对Flash阵列加上髙于电源的电压,这个 高电压会导致对Flash区域读取不稳定。而Flash在线编程是通过运行Flash 存储器内部的函数去擦除和编程另一些Flash区域,加髙电压导致读取的不稳 定,使得运行擦除和编程程序也会不稳定,给Flash存储器在线编程带来了技 术上的困难。虽然飞思卡尔公司是在Flash技术发展比较成熟时才将Flash技术引入到MCU内部,但仍无法解决该问题。目前这个问题只能由用户在设计 Flash在线编程底层驱动程序时加以解决。常见的解决Flash擦写不稳定的方 法有两种其一是将擦除和写入程序(以下简称EW程序)放在不包含要擦写区 域的Flash块中,这样进行擦写操作时,擦写程序可以直接在Flash中运行, 不需要移到RAM中运行。由于在擦写时,只对Flash存储器中的l个块加高 电压,并不影响另外的块,所以可以把擦写程序放在不包含要擦写区域的Flash 块,这样就可以避免程序代码的移动。但这种方法只适用于含有超过2块或2 块以上Flash存储器的MCU,对于像NE64和UF32这种只有1块Flash的芯 片,这种方法不适用,需要寻求其他的解决方法,因而存在编程上的不统一性。 其二是在进行擦除与写入操作之前将EW程序复制到RAM区,PC指针定位 到RAM中,从而实际执行RAM中EW程序。这样给Flash加髙电压时,不 再从Flash中运行程序,因而解决了读取不稳定的问题。这种做法,需要另外 编写程序复制Flash中的EW程序到RAM之中,随后转向RAM中程序执行。 因此入口参数难以定位,程序的可重用性较差,编程复杂度提髙。显然,如果能够找到一种简便可行的、适合于多种需求的Flash存储器在 线编程控制的方法,保证在线编程的稳定性,既能解决Flash擦写程序的统一 性问题,又能回避程序全部移入RAM的难题,以提髙程序运行的效率,则对 于Flash存储器的在线编程具有重要的意义。
技术实现思路
本专利技术目的是提供一种,在保证在线编程 的稳定性的同时,既能实现程序的统一性,又能提髙程序运行的效率。为达到上述目的,专利技术人发现,在Flash擦写(Eff)流程中,仅有加髙压 期间需要运行的几条指令会引起Flash存储器读取不稳定,因而,本专利技术的总 体构思是,将EW程序中涉及不稳定的相关语句的机器码预先放入RAM中,以 解决Flash存储器在线编程的稳定性问题。由此,本专利技术采用的技术方案是 一种, 包括擦除操作和写入操作,其中在RAM中预置Flash存储器加髙压期间运行语句以及返回语句的机器码,所述Flash存储器加髙压期间运行语句包括向状态寄存器写入中断标志以启 动对应命令的语句,以及判断等待命令完成的语句; 所述擦除操作包括(1) 预操作(2) 定位要擦除的扇区,向要擦除的扇区中每一地址写入任意值;(3) 向命令寄存器写扇区擦除命令;(4) 转向RAM中的预置机器码,并执行(5) 命令执行完成时,从RAM转回Flash程序,完成所述擦除操作; 所述写入操作包括(1) 预操作;(2) 将源地址的一个字写入目标地址;(3) 向命令寄存器写字写入命令;(4) 转向RAM中的预置机器码,并执行;(5) 命令执行完成时,从RAM转回Flash程序,如果有下一待写数据,重 复步骤(2)至(5),否则完成所述写入操作。上文中,所述Flash存储器加髙压期间运行语句,对于飞思卡尔的CPU 来说,包括,向状态寄存器FSTAT寄存器的命令缓冲区空中断标志位CBEIF 位写l,以清除该位来启动上一步确定的Flash操作命令;等待直到命令执行 完成,状态寄存器FSTAT的命令完成中断标志位CCIF位为1标志命令执行 完成。具体运行的两条语句可以是FSTAT=0x80;(启动命令执行)和 while(!(FSTAT&0x40));(等待命令完成)。这两条语句自身的机器码,可以通 过LST文件获得,为180B800105F601058787C4408C000027F4,'c由于在RAM 中仅仅预置有限语句的机器码,执行结束后还需要返回。因此预置在RAM中 的机器码由运行的两条语句本身的机器码加上返回指令RTS的机器码3D构 成,为180B800105F601058787C4408C000027F43D 实验表明,在向要擦除的扇区任意地址写任意值时,最好选择除0x0000 外的其他值写入,写0x0000可能导致访问错误。上述技术方案中,所述预操作包括,设置时钟分频,清除相关错误标志位, 设置块号、页号。这些操作可以作为擦除和写入流程开始部分的公共操作被封装成子函数,擦除时直接调用即可。上述技术方案中,所述擦除操作和写入操作分别封装为擦除子函数和写入 子函数,通过引用擦除子函数和写入子函数实现Flash存储器的在线编程控 制。进一步的技术方案是,在Flash擦写流程中,第一设置时钟分频,清相关 错误标志位,设置块号、页号,这些操作作为擦除和写入流程开始部分的公共 操作被封装成子函数,擦除时直接调用即可。第二定位要擦除的扇区。向要擦 除的扇区任意地址写任意值(最好选择除0x0000外的其他值写入,因为实验发 现写0x0000会导致访问错误)。第三向命令寄存器FCMD写扇区擦除命令 0x40。第四向状态寄存器FSTAT寄存器的命令缓冲区空中断标志位CBEIF位 写l,以清除该位来启动上一步确定的Flash操作命令。最后等待直到命令执 行完成,状态寄存器FSTAT的命令完成中断标志位CCIF位为1标志命令执 行完成。对于向指定地址写若干字数据的操作,首先设置时钟分频,清相关错 误标志位,设置块号、页号,然后向指定地址写若干字数据。其具体的写入过 程是首先将源地址的一个字写入目标地址。然后向命令寄存器FCMD写本文档来自技高网...
【技术保护点】
一种Flash存储器在线编程控制方法,包括擦除操作和写入操作,其特征在于: 在RAM中预置Flash存储器加高压期间运行语句以及返回语句的机器码,所述Flash存储器加高压期间运行语句包括向状态寄存器写入中断标志以启动对应命令的语句, 以及判断等待命令完成的语句; 所述擦除操作包括: (1)预操作; (2)定位要擦除的扇区,向要擦除的扇区中每一地址写入任意值; (3)向命令寄存器写扇区擦除命令; (4)转向RAM中的预置机器码,并执行; (5)命令执行完成时,从RAM转回Flash程序,完成所述擦除操作; 所述写入操作包括: (1)预操作; (2)将源地址的一个字写入目标地址; (3)向命令寄存器写字写入命令; (4)转向RAM中的预置机器码 ,并执行; (5)命令执行完成时,从RAM转回Flash程序,如果有下一待写数据,重复步骤(2)至(5),否则完成所述写入操作。
【技术特征摘要】
1.一种Flash存储器在线编程控制方法,包括擦除操作和写入操作,其特征在于在RAM中预置Flash存储器加高压期间运行语句以及返回语句的机器码,所述Flash存储器加高压期间运行语句包括向状态寄存器写入中断标志以启动对应命令的语句,以及判断等待命令完成的语句;所述擦除操作包括(1)预操作;(2)定位要擦除的扇区,向要擦除的扇区中每一地址写入任意值;(3)向命令寄存器写扇区擦除命令;(4)转向RAM中的预置机器码,并执行;(5)命令执行完成时,从RAM转回Flash程序,完成所述擦除操作;所述写入操作包括(1)预操作;(2)将源地址的...
【专利技术属性】
技术研发人员:朱巧明,王宜怀,刘纯平,张云坤,章建民,
申请(专利权)人:苏州大学,
类型:发明
国别省市:32[中国|江苏]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。