STC 模拟eeprom数据丢失
问题:用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数据丢失相关推荐
- 单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动
N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下: eeprom.h 1 #ifndef _EEPROM_H_ 2 #define _EEPROM_H_ ...
- freescale S12X微控制器 模拟EEPROM 快速上手指南
嵌入式开发中常有存储一些下电后不丢失的数据的需求,RAM访问起来很方便,但是下电后数据会丢失,而MC9S12XE提供了D-Flash和EEPROM用于存储非易失性数据.之前一直只是知道这个东西,但是一 ...
- N76E003模拟EEPROM读取和保存应用配置
N76E003模拟EEPROM读取和保存应用配置 N76E003模拟EEPROM读取和保存应用配置的代码参考了文章: https://blog.csdn.net/u014798590/article/ ...
- STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码)
STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码) 优点: 1. 模块化编程,方便移植,集成度高: 2. 拿来直接用 Flash空间定定义 主函数初始化已经Flash ...
- EEPROM数据丢失
第一次在CSDN发文章 EEPROM数据丢失的一点记录 现象描述 查找问题 EEPROM数据丢失的一点记录 上周客户反应一个产品断电后重新上电会出现数据丢失的情况,针对这个问题,我花了一点时间来查找问 ...
- STM32F407 内部自带FLASH 模拟 EEPROM
STM32F407 内部自带FLASH 模拟 EEPROM 一.STM32F407自带FLASH STM32F4 本身没有自带 EEPROM,但是 STM32F4 具有 IAP(在应用编程)功能,所以 ...
- STM32F10x Flash 模拟 EEPROM
STM32F10x芯片本身没有集成EEPROM,替代方案是用片上Flash来模拟EEPROM.Flash与EEPROM的区别主要是:一.EEPROM可以按位擦写,而Flash只能按块(页)擦除:二.F ...
- STM32CubeIDE用Flash模拟Eeprom
目录 一.简介 1.1.开发环境 1.2.实现功能 二.擦除Flash页 三.写字节到Flash 四.从Flash读字节 一.简介 1.1.开发环境 STM32CubeIDE V1.9. 1.2.实现 ...
- 【飞思卡尔 MC9S12】内部D-Flash模拟EEPROM
上一篇:[飞思卡尔 MC9S12]内部Flash读写 上一篇讲到内部Flash的读写,本篇讲述使用D-Flash模拟EEPROM.其实使用P-Flash也可以模拟,只不过D-Flash的Page更小( ...
最新文章
- 移动apn接入点哪个快_移动4g网速最快接入点_2020移动最佳APN接入点
- Linux System Programming --Chapter Eight
- vba 单元格 一系例操作
- PTA团体程序设计天梯赛篇(四)----几何+算法专题
- java 读取oracle的blob/clob
- java会了还学什么_java都学哪些内容?学完之后可以做哪些工作?
- 深度学习可以与大数据分手吗?
- 修改system.img的大小限制
- ERROR:ModuleNotFoundError: No module named ‘cv2‘
- java 汉字区位码表,中文汉字编码知识及各种中文编码对应的编码区间总结
- 流行音乐混音风格 流行音乐混音的压缩技巧
- C语言使用结构体给另一个同类型结构体赋值
- 一、Jmeter总结
- 小学期助教感受-Funcode游戏编程
- sqlmap之tamper脚本
- Qt:C++应用程序开发入门
- MagicBook屏幕频闪解决方案(Windows、MacOS)
- DedeCms SEO 优化全攻略
- vs2015改改编辑器背景颜色
- 详解:动态规划算法【Java实现】——背包问题