AI8051U的EEPROM读写出错怎么解决?
我用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,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();
}
具体调试遇到什么错误?
addr未初始化
IAP方式访问EEPROM,地址从0开始
ercircle 发表于 2025-5-28 16:20
具体调试遇到什么错误?
addr未初始化
IAP方式访问EEPROM,地址从0开始
我用串口读写EEPROM列子改写,addr我给个初值oxfc00或0,EEPROM设1k;读EEPROM子程序加检查EEPROM错误标志位 while(CMD_FAIL)
{P0=0x66;}写进芯片运行看P0口状态
zjyao 发表于 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函数开始前用代码清零 ercircle 发表于 2025-5-28 17:00
直接跑例程源码是否正常?为什么要这么测呢?
8bit还是32bit?
我用8位;是用8051i替换8052rc改一下产品,现除EEPROM读写有问题,直接跑例程源码我没串口测试,cmd_FALL是IAP_CONTR的一位,检测前已清零。谁能给个8051i读写EEPROM的例子。 认真看下上面回复, 8bit测试你的代码有问题死循环了。
8bit语法:IAP_CONTR & CMD_FAIL 检测CMD_FAIL位
读写例程参考Ai8051U实验箱例程,直接复用读写函数即可。
https://www.stcaimcu.com/data/do ... -DEMO-CODE-V1.2.zip
CMD_FAIL是IAP_CONTR寄存器的第4位,在库文件已定义;我就是用Ai8051U实验箱例程,直接用读写函数调试不成功, zjyao 发表于 2025-5-28 18:21
CMD_FAIL是IAP_CONTR寄存器的第4位,在库文件已定义;我就是用Ai8051U实验箱例程,直接用读写函数调试不成 ...截图看看你的定义
直接下载例程hex的话,频率和指令模式选了没
这些都设置了;我还吧IRC频率往低选,40M到6M都试过。 zjyao 发表于 2025-5-28 18:40
这些都设置了;我还吧IRC频率往低选,40M到6M都试过。
大哥你应该选固定的和代码一致的呀,为什么会试这个~
建议上传使用的工程,并且编译下载操作录屏看看。
页:
[1]
2