试了一下华大MCU的用内置Flash模拟EE的功能,还不错
用了下这个Flash模拟EE功能,挺方便的,不用外接EE了。这个EE有防掉电的功能,蛮好!不怕写数据的时候掉电。
目前已进行了200万次擦写,数据都正确。
敲黑板,划重点:附件工程含源码,改一改,还可以用在其它的MCU上。哈哈~
----------------------------------------------------------------------
上干货
----------------------------------------------------------------------
1. 适用芯片uHC32L110系列uHC32F003系列uHC32F005系列
2. 功能特点u通过软件算法使用片内FLASH存储器实现可配置大小的EE存储区,默认为32字节。uEE存储区(32字节)的数据擦写次数不少于600万次。uEE存储区写入操作为原子操作,写数据时断电不会造成数据混乱。u用户只需要调用相应的读写函数即可实现对EE存储区数据的读取与写入。u快速备份区(32字节)适用于即将掉电时快速保存运行参数,仅需1.2ms即可保存32字节。u默认使用的数据存储区为4个Flash Page,即2K字节。u不使用快速备份区时,软件算法占用的ROM区为876字节(IAR最高优化)。u使用快速备份区时,软件算法占用的ROM区为1228字节(IAR最高优化)。
3. EE存储区使用方法3.1在项目工程中添加HDEE5.C文件。3.2在程序的初始化阶段调用HDEE_Ini函数。3.3使用HDEE_Read函数读取EE存储区内的数据。3.4使用HDEE_Write函数将数据写入到EE存储区。
4.1 EE存储区初始化函数原型:void HDEE_Ini( void ); 功能:初始化EE相关的数据存储区域。 参数:无。 条件:需要用户将系统时钟切换为4MHz。
4.2 EE存储区读取函数原型:uint8_t HDEE_Read(uint8_t EeAddr, uint8_t *pRdBuf , uint8_t RdCnt ); 功能:按参数要求读取EE内的数据。 参数:EeAddr – 待读取的数据位于EE内的地址,范围为0-31。 pRdBuf – 读到的数据的存储指针。RdCnt– 需要读取的数据的字节数。返回:返回非0代表成功读取数据,返回0代表读取数据失败。
4.3 EE存储区存储函数原型:uint8_t HDEE_Write(uint8_t EeAddr, uint8_t *pWrBuf , uint8_t WrCnt ); 功能:按参数要求将数据存储到EE。 参数:EeAddr – 待存储的数据位于EE内的目标地址,范围为0-31。 pWrBuf – 待存储的数据的指针。WrCnt– 待存储的数据的字节数。返回:返回非0代表成存储数据,返回0代表存储数据失败。
条件:需要用户将系统时钟切换为4MHz。
flash可以擦除200多万次?真的假的? 2K字节flash,模拟64字节的EE。空间换寿命 官网的MCU板块 都打不开.. 别吹 误导人家 是呀,我们都是工程师,不要拿消费品广告手法来忽悠我们。
这么说来,空间换寿命,我说擦写寿命1万万,可以吗?
我的SSD擦写寿命接近无穷大,可以吗?1个480G的只存1个扇区的数据。 当MCU没有用完所有和程序存储空间时,用空余的空间当个【小EE】来用,有什么不对吗?
难道你的每个项目都能刚好用完程序存储空间? 供应需要的同行。
使用条件:Flash有剩余空间,项目内需要小量存储数据,不愿意接外接EE。
大神请绕道。 2K字节模拟32字节的理论有效次数为:Flash擦写次数 * 2048/32 = 10万 * 64 = 640万次。
找了颗芯片,实测了该模拟出的EE的有效擦写次数。
第2580万9934次的时候失效了。
看来运气不错,这颗芯片比较强壮。
以前测试flash的时候,发现过一个现象,做了压力测试后,过了。
可是过十几分钟,里面的内容就丢了。重新烧进去,还是只能**十几分钟。
后来用台湾某厂家的EEPROM也是这个现象,而且是逐位变化的,几秒丢一位。 围观 学习中 linqing171 发表于 2018-8-19 22:44
以前测试flash的时候,发现过一个现象,做了压力测试后,过了。
可是过十几分钟,里面的内容就丢了。重新烧 ...
寿命到了,漏电 谢谢分享! 这个是IAR?
页:
[1]