找回密码
 立即注册
查看: 132|回复: 1

关于AI8H4K32TLCD 中内部EEPROM的问题

[复制链接]

3

主题

7

回帖

35

积分

新手上路

积分
35
发表于 2024-12-2 09:53:18 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-12-2 10:00 编辑

在使用关于AI8H4K32TLCD时, 用到写内部EEPROM, 发现写一次并不能成功, 要连续写两三次才可以成功.

代码如下:

char WriteFlash(unsigned char *p,unsigned int addr,unsigned int length)
{
        unsigned int i;

        
   IAP_CONTR=0x80;
         IAP_TPS=12;

//写
  for(i=0;i<length;i++)
  {

           IAP_CMD=EEPROM_WRITE;        
         IAP_ADDRL=        (unsigned char)(addr%256);               
         IAP_ADDRH=        (unsigned char)(addr/256);
                        
               
                 IAP_DATA = *p;
        
                 IAP_TRIG=0x5a;
                 IAP_TRIG=0xa5;
     _nop_();               
     _nop_();                        
     _nop_();        
     _nop_();                        
           p++;
                 addr++;


   }


         IAP_CONTR=0x00;
         IAP_CMD=EEPROM_NOP;
         IAP_TRIG=0;         
         IAP_ADDRL=        0x00;                        
         IAP_ADDRH=        0x80;
   return 1;
}

在主程序中调用WriteFlash(unsigned char *p,unsigned int addr,unsigned int length)不能写入数据, 当连续调用3次就可以.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-2 10:21:37 | 显示全部楼层
  1. void Iap_Idle(void)
  2. {
  3.         IAP_CONTR&=~IAPEN;
  4.         IAP_CMD=IAP_IDL;
  5.         IAP_TRIG=0x00;
  6.         IAP_ADDRH=0x80;
  7.         IAP_ADDRL=0x00;
  8. }
  9. unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
  10. {
  11.         return *(CBYTE+IAP_OFFSET+sector*0x0200+addr);
  12. }
  13. //unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
  14. //{
  15. //        unsigned char dat;
  16. //        unsigned int add;
  17. //        add=sector*0x0200+addr;
  18. //        IAP_CONTR|=IAPEN;
  19. //        IAP_TPS=IAP_TPS_;
  20. //        IAP_CMD=IAP_READ;
  21. //        IAP_ADDRL=add;
  22. //        IAP_ADDRH=add>>8;
  23. //        IAP_TRIG=0x5A;
  24. //        IAP_TRIG=0xA5;
  25. //        _nop_();
  26. //        dat=IAP_DATA;
  27. //        Iap_Idle();
  28. //        return dat;
  29. //}
  30. void Iap_Program_Byte(unsigned char sector,unsigned int addr,unsigned char dat)
  31. {
  32.         unsigned int add;
  33.         add=sector*0x0200+addr;
  34.         IAP_CONTR|=IAPEN;
  35.         IAP_TPS=IAP_TPS_;
  36.         IAP_CMD=IAP_WRITE;
  37.         IAP_ADDRL=add;
  38.         IAP_ADDRH=add>>8;
  39.         IAP_DATA=dat;
  40.         IAP_TRIG=0x5A;
  41.         IAP_TRIG=0xA5;
  42.         _nop_();
  43.         Iap_Idle();
  44. }
  45. void Iap_Erase_Sector(unsigned char sector)
  46. {
  47.         unsigned int add;
  48.         add=sector*0x0200;
  49.         IAP_CONTR|=IAPEN;
  50.         IAP_TPS=IAP_TPS_;
  51.         IAP_CMD=IAP_ERASE;
  52.         IAP_ADDRL=add;
  53.         IAP_ADDRH=add>>8;
  54.         IAP_TRIG=0x5A;
  55.         IAP_TRIG=0xA5;
  56.         _nop_();
  57.         Iap_Idle();
  58. }
复制代码


DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 00:12 , Processed in 0.113756 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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