HCS08单片机使用Flash模拟EEPROM技术详解

需积分: 10 10 下载量 64 浏览量 更新于2024-08-02 收藏 193KB PDF 举报
"在HCS08微控制器上使用Flash模拟EEPROM的实践与理论" 在微控制器领域,EEPROM(电可擦可编程只读存储器)常常用于存储需要在断电后仍能保留的数据,如系统配置、过程数据和计算结果。Freescale HCS08系列单片机虽然没有内置的EEPROM,但其高效的Flash存储器提供了模拟EEPROM功能的可能性。通过使用特定的编程技巧和管理策略,开发者可以充分利用Flash的特性来实现类似EEPROM的功能。 HCS08系列的Flash存储器基于0.25微米工艺,以512字节为一页进行组织。表1列出了Flash的一些关键性能指标: - 内部FCLK(时钟频率)范围为150kHz至200kHz,决定了编程和擦除操作的速度。 - 字节编程时间在随机地址下为9个FCLK周期,突发模式下为4个周期。 - 页擦除时间为4000个FCLK周期,全芯片擦除为20000个周期。 - Flash的编程电流约为4mA,页擦除电流约为6mA。 - 擦写寿命高达10万次,数据保持时间超过100年。 在实际应用中,如果将fFCLK设置为200kHz,那么编程一个字节需要45us,突发模式下每个字节编程时间降低到20us,页擦除需要20ms,而全芯片擦除则需要100ms。这样的速度对于大多数实时应用来说是可接受的。 模拟EEPROM的实现通常涉及以下几个步骤: 1. 数据备份:在修改Flash前,将现有数据复制到安全的位置,如SRAM。 2. 数据写入:执行Flash编程操作,这可能包括擦除和写入步骤。 3. 错误检查与恢复:确保写入操作成功,如果失败,则从备份恢复。 4. 地址管理:为了延长Flash的寿命,需要一个机制来均衡使用不同区域,避免某些位置过度擦写。 在HCS08上模拟EEPROM的四个封装好的函数可能包括: 1. 初始化函数:设置Flash控制器,准备编程操作。 2. 读取函数:从Flash中安全读取数据,处理可能的干扰。 3. 写入函数:处理数据写入流程,包括备份、编程和验证。 4. 擦除函数:擦除指定页或整个芯片,根据需要进行。 通过这些函数,开发者可以轻松地将EEPROM功能集成到他们的HCS08应用中,而无需深入理解底层Flash操作的复杂性。这样的模拟方法既经济又灵活,适应了多种存储需求,同时也充分利用了HCS08单片机的资源。
388 浏览量
该程序移植注意事项:1.注意时钟的配置 2.PRM文件的配置 //========================================================== FLASH时钟配置: 文件“S08_Flash.h”中 “#define BUS_CLOCK 20000000”这句要根据自己所用的总线频率设定 //========================================================== PRM文件配置注意如下: SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */ Z_RAM = READ_WRITE 0x0070 TO 0x00FF; RAM = READ_WRITE 0x0170 TO 0x086F; ROM = READ_ONLY 0x18D0 TO 0xFFAF; ROM1 = READ_ONLY 0x0870 TO 0x17FF; ROM2 = READ_ONLY 0xFFC0 TO 0xFFC5; FLASH_TO_RAM = READ_ONLY 0x1860 TO 0x18CF RELOCATE_TO 0x0100;//!!! /* INTVECTS = READ_ONLY 0xFFC6 TO 0xFFFF; Reserved for Interrupt Vectors */ END //注:RAM地址0x0100 to 0x016F预留,用于存放擦写FLASH的程序; //========================================================== 在移植时由于新建工程所以经常忘记下面这3段的调整 1 Z_RAM = READ_WRITE 0x0070 TO 0x00FF; RAM = READ_WRITE 0x0170 TO 0x086F; 2 ROM = READ_ONLY 0x18D0 TO 0xFFAF; ROM1 = READ_ONLY 0x0870 TO 0x17FF; FLASH_TO_RAM = READ_ONLY 0x1860 TO 0x18CF RELOCATE_TO 0x0100; 3 FLASH_ROUTINES INTO FLASH_TO_RAM; //========================================================== 在移植过程中有可能出现下面的编译报错: Link Error:L1102 Out allocation space in segment FLASH_TO_RAM at address 0xXXXX 这是因为 FLASH_TO_RAM = READ_ONLY 0x1860 TO 0x18CF RELOCATE_TO 0x0100; 这里分配的空间不够,适当扩大就可以了 注:这个例程的缺点在于直接分配了RAM给擦写FLASH的程序,使这写RAM大部分时间浪费掉而不能用于其他用途 参考文献中介绍了一种较好的实现方式。 参考文献: “在HCS08微控制器上使用FLASH存储器模拟EEPROM”和 “HCS08系列单片机FLASH模拟EEPROM的应用”(请自行在网上搜所这些文档) 免责声明: 这段程序并非本人所写,也是摘自别处。 这段程序只是经过MC9S08AC60demo板简单的测试,未经过大批量和长时间的验证,所以若用在产品当中应谨慎,若出现因引用本程序而出现任何问题本人将不承担任何责任! jjj_sun 2009-3-28 23:24