找回密码
 立即注册
查看: 109|回复: 19

AI8051U的EEPROM读写出错怎么解决?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-05-29 14:10:08
已绑定手机

2

主题

9

回帖

40

积分

新手上路

积分
40
发表于 5 天前 | 显示全部楼层 |阅读模式
我用8051u的列子串口读写EEPROM的读EEPROM一段,写进芯片调试出错,哪位大侠帮看看什么原因。



    P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    UART1_config(1);    // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
    EA = 1; //ÔÊÐí×ÜÖжÏ

//    PrintString1("AI8051UϵÁе¥Æ¬»úEEPROM²âÊÔ³ÌÐò£¬´®¿ÚÃüÁîÉèÖÃÈçÏÂ:\r\n");    //UART1·¢ËÍÒ»¸ö×Ö·û´®
//    PrintString1("W 0x000040 1234567890  --> ¶Ô0x000040µØÖ·Ð´Èë×Ö·û1234567890.\r\n");   //UART1·¢ËÍÒ»¸ö×Ö·û´®
//    PrintString1("R 0x000040 10          --> ¶Ô0x000040µØÖ·¶Á³ö10¸ö×Ö½ÚÄÚÈÝ.\r\n"); //UART1·¢ËÍÒ»¸ö×Ö·û´®

    while(1)
    {
        delay_ms(1);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//        EEPROM_SectorErase(addr);           //²Á³ýÉÈÇø
//        i = EEPROM_write_n(addr,&RX1_Buffer[11],j);      //дN¸ö×Ö½Ú
                        while(1)
                        { addr=0xFFFC00;
                                j=1;
//                                tmp=0xF0;
                                EEPROM_read_n(addr,tmp,j);
                        }
     }
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
void EEPROM_read_n(u32 EE_address,u8 *DataAddress,u8 length)
{
    IAP_ENABLE();                           //ÉèÖõȴýʱ¼ä£¬ÔÊÐíIAP²Ù×÷£¬ËÍÒ»´Î¾Í¹»
    IAP_READ();                             //ËÍ×Ö½Ú¶ÁÃüÁÃüÁî²»Ðè¸Ä±äʱ£¬²»ÐèÖØÐÂËÍÃüÁî
    do
    {
        IAP_ADDRE = (u8)(EE_address >> 16); //Ë͵ØÖ·¸ß×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
        IAP_ADDRH = (u8)(EE_address >> 8);  //Ë͵ØÖ·ÖÐ×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
        IAP_ADDRL = (u8)EE_address;         //Ë͵ØÖ·µÍ×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
        EEPROM_Trig();                         //´¥·¢EEPROM²Ù×÷
/////////////////////////////////////////////////////////////////////////
        while(CMD_FAIL)
                                {P0=0x66;
                                }
                        //////////////////////////////////////////////////////////////////////////////                       
                        *DataAddress = IAP_DATA;            //¶Á³öµÄÊý¾ÝËÍÍù
        EE_address++;
        DataAddress++;
    }while(--length);

    DisableEEPROM();
}

       

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-06-02 15:17:32
已绑定手机

62

主题

1678

回帖

3774

积分

荣誉版主

无情的代码机器

积分
3774
发表于 5 天前 | 显示全部楼层
具体调试遇到什么错误?
addr未初始化
IAP方式访问EEPROM,地址从0开始
截图202505281620126074.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-05-29 14:10:08
已绑定手机

2

主题

9

回帖

40

积分

新手上路

积分
40
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2025-5-28 16:20
具体调试遇到什么错误?
addr未初始化
IAP方式访问EEPROM,地址从0开始

我用串口读写EEPROM列子改写,addr我给个初值oxfc00或0,EEPROM设1k;读EEPROM子程序加检查EEPROM错误标志位       while(CMD_FAIL)
                                {P0=0x66;}写进芯片运行看P0口状态
                               

点评

直接跑例程源码是否正常?为什么要这么测呢? 8bit还是32bit? addr由0开始,CMD_FAIL看下定义,32bit是位操作,8bit下是宏定义常量while必进 #define CMD_FAIL 0x10 另外这个CMD_FAIL函数开始前  详情 回复 发表于 5 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-06-02 15:17:32
已绑定手机

62

主题

1678

回帖

3774

积分

荣誉版主

无情的代码机器

积分
3774
发表于 5 天前 | 显示全部楼层
zjy*** 发表于 2025-5-28 16:45
我用串口读写EEPROM列子改写,addr我给个初值oxfc00或0,EEPROM设1k;读EEPROM子程序加检查EEPROM错误标 ...

直接跑例程源码是否正常?为什么要这么测呢?

8bit还是32bit?

addr由0开始,CMD_FAIL看下定义,32bit是位操作,8bit下是宏定义常量while必进
#define CMD_FAIL                0x10

另外这个CMD_FAIL函数开始前用代码清零
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-05-29 14:10:08
已绑定手机

2

主题

9

回帖

40

积分

新手上路

积分
40
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2025-5-28 17:00
直接跑例程源码是否正常?为什么要这么测呢?

8bit还是32bit?

我用8位;是用8051i替换8052rc改一下产品,现除EEPROM读写有问题,直接跑例程源码我没串口测试,cmd_FALL是IAP_CONTR的一位,检测前已清零。谁能给个8051i读写EEPROM的例子。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-06-02 15:17:32
已绑定手机

62

主题

1678

回帖

3774

积分

荣誉版主

无情的代码机器

积分
3774
发表于 5 天前 | 显示全部楼层
认真看下上面回复, 8bit测试你的代码有问题死循环了。
8bit语法:IAP_CONTR & CMD_FAIL 检测CMD_FAIL位

读写例程参考Ai8051U实验箱例程,直接复用读写函数即可。
https://www.stcaimcu.com/data/do ... -DEMO-CODE-V1.2.zip
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-05-29 14:10:08
已绑定手机

2

主题

9

回帖

40

积分

新手上路

积分
40
发表于 5 天前 | 显示全部楼层
CMD_FAIL是IAP_CONTR寄存器的第4位,在库文件已定义;我就是用Ai8051U实验箱例程,直接用读写函数调试不成功,

点评

直接下载例程hex的话,频率和指令模式选了没 [attachimg]101806[/attachimg]  详情 回复 发表于 5 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-06-02 15:17:32
已绑定手机

62

主题

1678

回帖

3774

积分

荣誉版主

无情的代码机器

积分
3774
发表于 5 天前 | 显示全部楼层
zjy*** 发表于 2025-5-28 18:21
CMD_FAIL是IAP_CONTR寄存器的第4位,在库文件已定义;我就是用Ai8051U实验箱例程,直接用读写函数调试不成 ...
截图看看你的定义
截图202505281827473153.jpg


直接下载例程hex的话,频率和指令模式选了没
截图202505281826233343.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-05-29 14:10:08
已绑定手机

2

主题

9

回帖

40

积分

新手上路

积分
40
发表于 5 天前 | 显示全部楼层
这些都设置了;我还吧IRC频率往低选,40M到6M都试过。

点评

大哥你应该选固定的和代码一致的呀,为什么会试这个~ 建议上传使用的工程,并且编译下载操作录屏看看。  详情 回复 发表于 5 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-06-02 15:17:32
已绑定手机

62

主题

1678

回帖

3774

积分

荣誉版主

无情的代码机器

积分
3774
发表于 5 天前 | 显示全部楼层
zjy*** 发表于 2025-5-28 18:40
这些都设置了;我还吧IRC频率往低选,40M到6M都试过。

大哥你应该选固定的和代码一致的呀,为什么会试这个~

建议上传使用的工程,并且编译下载操作录屏看看。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-2 20:55 , Processed in 0.162611 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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