问题:用stc的flash模拟eeprom,发现某些位置的数据会莫名其妙的丢失

原因:结果发现flash数据是以页为单位保存的,stc官方的库函数在擦写数据时是将flash整页擦除的,在我写某个字节的数据时,将整个页的数据都擦除了,后面都找不到数据了。

解决:在写数据时先将模拟eeprom的数据全部读出来,然后再将数据逐个的写入。

#include "main.h"
#include <stdlib.h>
#define MAX              255             //随机数最大值
#define MIN              1              //随机数最小值 #define IDCRC_INIT  0xECu8 data MachineIDaddress1,MachineIDaddress2;/*********************************************************
关闭IAP
*********************************************************/
void IapIdle()
{IAP_CONTR          =0;                    //关闭IAP功能IAP_CMD                =0;                    //清除命令寄存器IAP_TRIG           =0;                    //清除触发寄存器IAP_ADDRH          =0x80;         //将地址设置到非IAP区域IAP_ADDRL         =0;
}
/*********************************************************
从ISP/IAP/EEPROM区域读一字节
*********************************************************/
u8 IapReadByte(u16 addr)
{u8 dat;IAP_CONTR       =ENABLE_IAP;   //使能IAPIAP_CMD          =CMD_READ;     //设置IAP命令IAP_ADDRL      =addr;             //设置IAP低地址IAP_ADDRH     =addr>>8;            //设置IAP高地址IAP_TRIG      =0x5a;             //写触发命令(0x5a)IAP_TRIG       =0xa5;             //写触发命令(0xa5)_nop_();                                   //等待ISP/IAP/EEPROM操作完成dat=IAP_DATA;                            //读ISP/IAP/EEPROM数据IapIdle();                               //关闭IAP功能return dat;                                //返回
}
/*********************************************************
从一字节数据到ISP/IAP/EEPROM区域
*********************************************************/
void IapProgramByte(u16 addr,u8 dat)
{IAP_CONTR      =ENABLE_IAP;       //使能IAPIAP_CMD          =CMD_PROGAM;       //设置IAP命令IAP_ADDRL      =addr;                 //设置IAP低地址IAP_ADDRH     =addr>>8;                //设置IAP高地址IAP_DATA      =dat;                      //写ISP/IAP/EEPROM数据IAP_TRIG     =0x5a;                 //写触发命令(0x5a)IAP_TRIG       =0xa5;                 //写触发命令(0xa5)_nop_();                                       //等待ISP/IAP/EEPROM操作完成IapIdle();                                    //关闭IAP功能
}
/*********************************************************
扇区擦除
*********************************************************/
void IapEraseSector(u16 addr)
{IAP_CONTR      =ENABLE_IAP;       //使能IAPIAP_CMD          =CMD_ERASE;        //设置IAP命令IAP_ADDRL      =addr;                 //设置IAP低地址IAP_ADDRH     =addr>>8;                //设置IAP高地址IAP_TRIG      =0x5a;                 //写触发命令(0x5a)IAP_TRIG       =0xa5;                 //写触发命令(0xa5)_nop_();                                       //等待ISP/IAP/EEPROM操作完成IapIdle();                                    //关闭IAP功能
}

STC 模拟eeprom数据丢失相关推荐

  1. 单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

    N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下: eeprom.h 1 #ifndef _EEPROM_H_ 2 #define _EEPROM_H_ ...

  2. freescale S12X微控制器 模拟EEPROM 快速上手指南

    嵌入式开发中常有存储一些下电后不丢失的数据的需求,RAM访问起来很方便,但是下电后数据会丢失,而MC9S12XE提供了D-Flash和EEPROM用于存储非易失性数据.之前一直只是知道这个东西,但是一 ...

  3. N76E003模拟EEPROM读取和保存应用配置

    N76E003模拟EEPROM读取和保存应用配置 N76E003模拟EEPROM读取和保存应用配置的代码参考了文章: https://blog.csdn.net/u014798590/article/ ...

  4. STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码)

    STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码) 优点: 1. 模块化编程,方便移植,集成度高: 2. 拿来直接用 Flash空间定定义 主函数初始化已经Flash ...

  5. EEPROM数据丢失

    第一次在CSDN发文章 EEPROM数据丢失的一点记录 现象描述 查找问题 EEPROM数据丢失的一点记录 上周客户反应一个产品断电后重新上电会出现数据丢失的情况,针对这个问题,我花了一点时间来查找问 ...

  6. STM32F407 内部自带FLASH 模拟 EEPROM

    STM32F407 内部自带FLASH 模拟 EEPROM 一.STM32F407自带FLASH STM32F4 本身没有自带 EEPROM,但是 STM32F4 具有 IAP(在应用编程)功能,所以 ...

  7. STM32F10x Flash 模拟 EEPROM

    STM32F10x芯片本身没有集成EEPROM,替代方案是用片上Flash来模拟EEPROM.Flash与EEPROM的区别主要是:一.EEPROM可以按位擦写,而Flash只能按块(页)擦除:二.F ...

  8. STM32CubeIDE用Flash模拟Eeprom

    目录 一.简介 1.1.开发环境 1.2.实现功能 二.擦除Flash页 三.写字节到Flash 四.从Flash读字节 一.简介 1.1.开发环境 STM32CubeIDE V1.9. 1.2.实现 ...

  9. 【飞思卡尔 MC9S12】内部D-Flash模拟EEPROM

    上一篇:[飞思卡尔 MC9S12]内部Flash读写 上一篇讲到内部Flash的读写,本篇讲述使用D-Flash模拟EEPROM.其实使用P-Flash也可以模拟,只不过D-Flash的Page更小( ...

最新文章

  1. 移动apn接入点哪个快_移动4g网速最快接入点_2020移动最佳APN接入点
  2. Linux System Programming --Chapter Eight
  3. vba 单元格 一系例操作
  4. PTA团体程序设计天梯赛篇(四)----几何+算法专题
  5. java 读取oracle的blob/clob
  6. java会了还学什么_java都学哪些内容?学完之后可以做哪些工作?
  7. 深度学习可以与大数据分手吗?
  8. 修改system.img的大小限制
  9. ERROR:ModuleNotFoundError: No module named ‘cv2‘
  10. java 汉字区位码表,中文汉字编码知识及各种中文编码对应的编码区间总结
  11. 流行音乐混音风格 流行音乐混音的压缩技巧
  12. C语言使用结构体给另一个同类型结构体赋值
  13. 一、Jmeter总结
  14. 小学期助教感受-Funcode游戏编程
  15. sqlmap之tamper脚本
  16. Qt:C++应用程序开发入门
  17. MagicBook屏幕频闪解决方案(Windows、MacOS)
  18. DedeCms SEO 优化全攻略
  19. vs2015改改编辑器背景颜色
  20. 详解:动态规划算法【Java实现】——背包问题

热门文章

  1. Selenium 键盘事件 操作大全
  2. 【数据库】 关系模式的规范化理论----一文让你轻松理解其中奥秘
  3. php友情链接大于3换行,友情链接11大欺骗方法
  4. 某OA ajax.do 未授权漏洞任意文件上传getshell复现
  5. element ui DatePicker 日期选择器 限制只能选择今天之前或者之后
  6. 如何免费在线破解自己的CS学位
  7. 没了超点,爱优腾日子更煎熬?
  8. CRM百科 | CRM是什么?
  9. 优秀自我简介200字_个人简历自我评价200字优秀范文.doc
  10. 微信小程序——绘制折线图