一、为什么要仿E2
1、首先从IO引脚占用方面比较,EEPROM只需占用两个IO引脚,时钟(clk)和数据(data)引脚,外加电源三个引脚即可,符合I2C通讯协议。而FLASH需要占用更多IO引脚,有并行和串行的,串行的需要一个片选(cs)引脚(可用作节电功耗控制),一个时钟(clk)引脚,FLASH读出和写入引脚各一个,也就是四个。并行的需要8个数据引脚,当然比串行的读写速度要快。
目的:操作方便。
2、从功能方面比较,EEPROM即电可擦除可编程只读存储器,它的突出优点是在线擦除和改写.它既具有ROM的非易失性的优点,又能像RAM一样随机的读写。EEPROM可以单字节读写,FLASH部分芯片只能以块方式擦除(整片擦除),部分芯片可以单字节写入(编程),一般需要采用块写入方式;FLASH比EEPROM读写速度更快,可靠性更高。但比单片机片内RAM的读写还要慢。
目的:一般存取数据量有限,要字节操作,有效地利用存储空间。
3、从使用角度比较,EEPROM可以1个字节1个字节的写,写的时候没有限制。FLASH写只能把1写为0,不能把0写为1。要想把0变成1,只能按块擦除,擦除后整块全为0xff。
目的:存储的数据,随时有可能改变。
4、价格方面比较,FLASH应该要比EEPROM贵。(这个就没什么了,我们是在把贵的变成便宜的来用。)
最主要的区别: Flash存储器是分页管理的,而EEPROM按字节管理。
二、如何仿E2
首先,有库文件:lib78k0.rar
libf.lib和libfsm.lib为自编程库,eee.lib eeen.lib
eeeb.lib eeenb.lib
为仿E2库,仿E2时这两种库都需要,但没必要全加上,我用的是uPD78F0527DA,是有BANK的,选了libf.lib
eeen.lib和eeenb.lib三个库文件,说实在的,这几个仿E2库我也搞不清哪个是适用有BANK的,哪个适用无BNAK的,我一个个试的
其次,头文件:smp78k0.rar
内有C和汇编两个版本,在使用以上库文件里的函数时,注意要包含这些头文件,根据需要调用。
三、注意事项
1、sreg
UINT8 SELF_EntryRAM[100];是为仿E2开辟一个空间,其他地方尽量避免再声明sreg型的变量,否则,ucResult
= ucEEPROMInitEx_A(&eep_par);初始化函数就会返回0xFD/* Device error */.
这个本人以身试法过,最后终于发现了这个问题。我在其他.c文件中声明并定义过sreg变量,当时是速度和空间的考虑,将其声明为sreg类型,并使用其位变量。后来将这个sreg变量改成结构体就解决了。
2、原则上,调用库函数之前要FLMD0置1,完事后,再置0,但是我试了,不操作FLMD0的电平也可以正常的仿E2,数据写入和读出都正确。这个额就不明白为什么了
四、最后,再附上整个仿EEPROM的工程EEE78K0Type01.rar
五、欢迎大家踊跃讨论,有问题都说出来。