找回密码
 立即注册
查看: 73|回复: 3

屠龙刀3,EEPROM读写的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-12 11:10
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    8

    回帖

    98

    积分

    注册会员

    积分
    98
    发表于 2024-4-6 14:41:13 | 显示全部楼层 |阅读模式
    unsigned long t1;
      unsigned long t2;
    unsigned long i;
      unsigned long i2;
    复制stc32G手册内容
    void IapIdle()
    {
            IAP_CONTR = 0;
            IAP_CMD = 0;
            IAP_TRIG = 0;
            IAP_ADDRE = 0x00;
            IAP_ADDRH = 0x00;
            IAP_ADDRL = 0x00;
    }

    char IapRead(unsigned long addr)
    {
            char datt;
            
            IAP_CONTR = 0x80;
            IAP_TPS = 24;
            IAP_CMD = 1;
            IAP_ADDRL = addr;
            IAP_ADDRH = addr>>8;
            IAP_ADDRE = addr>>16;
            IAP_TRIG = 0x5a;
            IAP_TRIG = 0xa5;
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            datt = IAP_DATA;
            IapIdle();
            
            return datt;
    }

    void IapProgram(unsigned long addr,char datt)
    {
            IAP_CONTR = 0x80;
            IAP_TPS = 24;
            IAP_CMD = 2;
            IAP_ADDRL = addr;
            IAP_ADDRE = addr>>16;
            IAP_ADDRH = addr>>8;
            IAP_DATA = datt;
            IAP_TRIG = 0x5a;
            IAP_TRIG = 0xa5;
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            datt = IAP_DATA;
            IapIdle();        
    }

    void IapErase(unsigned long addr)
    {
            IAP_CONTR = 0x80;
            IAP_TPS = 24;
            IAP_CMD = 3;
            IAP_ADDRL = addr;
            IAP_ADDRE = addr>>16;
            IAP_ADDRH = addr>>8;
            IAP_TRIG = 0x5a;
            IAP_TRIG = 0xa5;
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            IapIdle();        
    }

    void main(void)
    {
            
      i = 1;
      i2 = 2;

    IapErase(0x8000);
    IapProgram(0x8000,i);
    t1 = IapRead(0x8000);
            
    IapErase(0x9000);
    IapProgram(0x9000,i2);
    t2 = IapRead(0x9000);
    }
    先写进EEPROM然后读出是对的。
    void main(void)
    {
    t1 = IapRead(0x8000);
    t2 = IapRead(0x9000);
    }
    然后改成这样再读  t1,t2都是 0,是不是没写进去?
    请问是什么原因呢?
    我是自学新手,论坛的其它例子还不会转换。
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-12 11:10
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    8

    回帖

    98

    积分

    注册会员

    积分
    98
     楼主| 发表于 2024-4-6 15:19:43 | 显示全部楼层
    会不会这地址不是EEPROM的地址? 没断电读出是正确的,断电再读就是 0 了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:29
  • 签到天数: 97 天

    [LV.6]常住居民II

    9

    主题

    556

    回帖

    817

    积分

    高级会员

    积分
    817
    发表于 2024-4-6 16:46:16 | 显示全部楼层
    第二次的main是后来又重新下载了一次吧?STC-ISP下载hex到MCU时默认时清除EEPROM缓冲区的,第二次下载时取消清除EEPROM缓冲区就可以读出了。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-12 11:10
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    8

    回帖

    98

    积分

    注册会员

    积分
    98
     楼主| 发表于 2024-4-6 17:02:38 | 显示全部楼层
    我试验了 STC-ISP设置用户EEPROM大小为8K以上就正常了。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 10:17 , Processed in 0.057119 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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