STC8H2K08U的iap技术的内部eeprom存储的问题 | 已解决
#include "iap_eeprom.h"#include <STC8H.H>
#include "intrins.h"
#include "main.h"
#include "intrins.h"
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
char IapRead(int addr)
{
char dat;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置等待参数12MHz
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
dat = IAP_DATA; //读IAP数据
IapIdle(); //关闭IAP功能
return dat;
}
void IapProgram(int addr, char dat)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置等待参数12MHz
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写IAP数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
IapIdle(); //关闭IAP功能
}
void IapErase(int addr)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置等待参数12MHz
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
IapIdle(); //关闭IAP功能
}
//main.c
//while(1)循环的上面
uint8_t iap_data_box2;
iap_data_box2=IapRead(0x0400);
//
iap_data_box2+=2;
IapErase(0x0400);
IapProgram(0x0400,iap_data_box2);
iap_data_box2=IapRead(0x0400);
//下面是加了个数码管显示iap_data_box2的代码救不贴出来了
设想是通过每次掉电上电存入iap_data_box2+2来检测是否真的存到eeprom,但是每次上电都是2不知道为什么
每次上电iap_data_box2显示都是2,有种它着eeprom存了但是又好像没存的感觉,挺没有头绪的 烧录附件的例子到芯片试试,每次上电串口打印一次EEPROM读写数据。 乘风飞扬 发表于 2024-4-12 13:17
烧录附件的例子到芯片试试,每次上电串口打印一次EEPROM读写数据。
接收←00 00 FE
接收←69 71 FC CA 8E FE
接收←00
接收←72 69 8E C6 86
接收←00 FF
接收←E9 E9 71 CA 86
接收←00 FF
接收←73 E9 E9 CE 86
接收←00
接收←69 E9 E9 C2 86 86
接收←00 00
接收←E9 E9 CE 86 86
接收←00 DC
接收←00 FE
接收←00
接收←00
接收←69 E9 CA 8E FC
接收←00
接收←E9 E9 E9 86 86
接收←00
接收←E9 E9 E9 8E 8E FC
接收←00 FF
接收←80 FD F8 C2 FF
接收←E9 E9 E9 CA 8E FC
接收←00
接收←71 71 E9 CA CE 86
接收←00 FE
接收←73 72 8E CA C6 FC
接收←00 00 00 FF
接收←72 E9 E9 8E 82
接收←00 FF
接收←00 FF
接收←69 71 F9 8E FE
接收←00
接收←E9 E9 FC 86 C6
大佬,这是上电收到的信息看样子是能存储的,不过我暂时还不知道原因 shuyuan 发表于 2024-4-12 15:07
接收←00 00 FE
接收←69 71 FC CA 8E FE
接收←00
下载时, 选择IRC频率 11.0592MHz。
打印时串口波特率设置 115200,使用文本模式打印。 乘风飞扬 发表于 2024-4-12 15:38
下载时, 选择IRC频率 11.0592MHz。
打印时串口波特率设置 115200,使用文本模式打印。 ...
Read1=0x00 0x01 0x02 0x03 0x04 0x10 0x09 0xe8 0xf9 0xcb
Read2=0x01 0x02 0x03 0x04 0x05 0x11 0x0a 0xe9 0xfa 0xcc
这是输出的报文属于正常吗 shuyuan 发表于 2024-4-12 15:48
Read1=0x00 0x01 0x02 0x03 0x04 0x10 0x09 0xe8 0xf9 0xcb
Read2=0x01 0x02 0x03 0x04 0x05 0x11 0x0a...
例子是将EEPROM读取的数据+1后重新写入,如果读数是FF的话赋初值。
看起来你读取的后面几个地址原本就有内容,就没有赋初值。
不过+1后写入,再次读取出来的结果是对的。 乘风飞扬 发表于 2024-4-12 16:01
例子是将EEPROM读取的数据+1后重新写入,如果读数是FF的话赋初值。
看起来你读取的后面几个地址原本就有 ...
谢谢大佬,能正常存储是我的代码问题应该是,现在已经好了,谢谢大佬
页:
[1]