找回密码
 立即注册
查看: 1038|回复: 8

STC32G12K128 Eprom读写操作失败 !已解决

[复制链接]

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-8 11:19:12 | 显示全部楼层 |阅读模式
我按照手册的例子,

#define MAIN_Fosc                12000000L        //主时钟


void DisableEEPROM(void)
{
    IAP_CONTR = 0;          //关闭 IAP 功能
    IAP_CMD = 0;            //清除命令寄存器
    IAP_TRIG = 0;           //清除触发寄存器
    IAP_ADDRH = 0x80;       //将地址设置到非 IAP 区域
    IAP_ADDRL = 0;
}


void IapProgram(uint addr, uchar dat)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数30MHz
    IAP_CMD = 2;                                //设置IAP写命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_DATA = dat;                             //写IAP数据
          EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
          EA=1;
    DisableEEPROM();                                  //关闭IAP功能
}
uchar IapRead(uint addr)
{
    uchar dat;

    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数30MHz
    IAP_CMD = 1;                                //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
           EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
                EA=1;
        dat = IAP_DATA;                             //读IAP数据
        
    DisableEEPROM();                                  //关闭IAP功能
    return dat;
}
void IapErase(uint addr)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                              //设置等待参数30MHz
    IAP_CMD = 3;                                //设置IAP擦除命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
          EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();  
          EA=1;
    DisableEEPROM();                                 //关闭IAP功能
}


void main()
{
        uchar i[5],j[5];
        initPort();
        Delay1ms(500);
        IapErase(EE_ADDRESS);
        Delay1ms(500);
        j[0]=IapRead(EE_ADDRESS);
        if(j[0]==0xFF)//如果正确,ok灯亮
                okLight=0;
        else
                falseLight=0;

       while(1);
}
以上为测试程序,但运行结果都是falseLight灯亮,检查发现,j[0]的值为0x00,显然与手册中所说不同,不知这是什么原因引起的?
回复

使用道具 举报 送花

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-8 11:31:29 | 显示全部楼层
另外:我将程序改为如下:
uchar i[5],j[5];
        initPort();
       
        i[0]=0x01;
        i[1]=0x02;
        i[2]=0x03;
        EEPROM_SectorErase(EE_ADDRESS);
        EEPROM_write_n(EE_ADDRESS,i,3);
       
        EEPROM_read_n(EE_ADDRESS,j,3);
        if(j[2]==0x03)
                warnLight=0;
        else
                temptureLight=0;
  while(1);
写入3个不同的数据:0x01,0x02,0x03,再读出,结果是三个数据都是最后一个数据:0x03,请问楼主这是什么原因?
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-8-8 13:16:30 来自手机 | 显示全部楼层
ISP烧录的时候要选择EEPROM大小。
如果是huge模式,需要在工程设置里面把那个ROM区开始位置和大小改一下
回复 支持 反对

使用道具 举报 送花

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-8 17:06:33 | 显示全部楼层
熊*** 发表于 2023-8-8 13:16
ISP烧录的时候要选择EEPROM大小。
如果是huge模式,需要在工程设置里面把那个ROM区开始位置和大小改一下 ...

如何改呢?谢谢
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-8-8 17:44:40 | 显示全部楼层
新手最好参考实验箱的例子。
回复 支持 反对

使用道具 举报 送花

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-9 22:32:56 | 显示全部楼层
熊*** 发表于 2023-8-8 17:44
新手最好参考实验箱的例子。

我上面写的内容就是从试验箱中读写的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2025-05-09 08:54:03
已绑定手机

39

主题

2015

回帖

6877

积分

论坛元老

积分
6877
发表于 2023-8-10 09:31:24 | 显示全部楼层
138083*** 发表于 2023-8-9 22:32
我上面写的内容就是从试验箱中读写的

看你写的代码与实验箱例程包里面的例子有所不同,所以建议最好先用实验箱里的例子测试。
测试正常后再进行移植、修改,避免移植过程中出错导致功能不正常。
回复 支持 反对

使用道具 举报 送花

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-10 18:08:47 | 显示全部楼层
搞定了
回复

使用道具 举报 送花

0

主题

1

回帖

14

积分

新手上路

积分
14
发表于 2023-11-23 15:55:38 来自手机 | 显示全部楼层
13808369317 发表于 2023-8-10 18:08
搞定了

楼主,我现在也遇到这个问题,存123进去,读出来全是3,你是咋解决的呀。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 16:34 , Processed in 0.128130 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表