野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23095|回复: 3

不能向AT24C02中重复写数据

[复制链接]
发表于 2014-5-24 14:51:35 | 显示全部楼层 |阅读模式
int main(void)
{
        LED_Config();                                             /*LED初始化*/

        USART1_Config();                                          /* USART1 配置模式为 9600 8-N-1,中断接收 */
                                                              
        I2C_EE_Config();                                                                        /* I2C 外设初(AT24C02)始化 */
               
        while(1)
        {
                if(RecCard_Ok_Flag == 1 )                             /*如果串口接收到IC卡的数据*/   
                {
                        printf("IC卡已插入,卡号为: ");
                        for(Count=0;Count<5;Count ++)
                        {
                                printf("%d" , RecCardData_Buf[Count]);
                        }
                        printf("\r\n");
                        Count = 0;
                        RecCard_Ok_Flag = 0;

                        printf("将读取的卡号存储到EE中去:\r\n");
                        I2C_EE_BufferWrite(RecCardData_Buf, BASE_ADDR, sizeof(RecCardData_Buf));
                        printf("数据存储成功!\r\n");
                        printf("\r\n");
                        printf("读出EE中的卡号\r\n");
                        I2C_EE_BufferRead(I2C_ReadFromEE_Buff, BASE_ADDR, sizeof(RecCardData_Buf));
                        for(Count = 0 ; Count < sizeof(RecCardData_Buf); Count ++)
                        {
                                if(RecCardData_Buf[Count] != I2C_ReadFromEE_Buff[Count])
                                {
                                        printf("数据读取错误!\r\n");
                                        return 0;
                                }
                        }
                        printf("%d" , I2C_ReadFromEE_Buff[Count]);
                        printf("读出卡号成功!\r\n");
                        memset(I2C_ReadFromEE_Buff , 0 , sizeof(RecCardData_Buf));
                        //memset(I2C_ReadFromEE_Buff , 0 , sizeof(RecCardData_Buf));
                }
        }
               
}


我通过UART1 读取IC卡的卡号 。并通过I2C 存储到AT24C02中,进行第一次while()是可以正常存储并读出 。但是当我再一次刷IC卡 IC卡的卡号是可以的读出的。但是并不能存储到AT24C02中去的。通过串口调试工具的现象如下:

IC卡已插入,卡号为: 10529104157129
将读取的卡号存储到EE中去:
数据存储成功!
读出EE中的卡号
0读出卡号成功!
IC卡已插入,卡号为: 10529104157129
将读取的卡号存储到EE中去:
IC卡已插入,卡号为: 10529104157129
将读取的卡号存储到EE中去:
数据存储成功!


读出EE中的卡号
0读出卡号成功!
IC卡已插入,卡号为: 10529104157129
将读取的卡号存储到EE中去:




回复

使用道具 举报

发表于 2014-5-24 14:53:17 | 显示全部楼层
使用jtag单步调试,看看卡在哪句代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 15:00:54 | 显示全部楼层
主函数到 I2C_EE_BufferWrite(RecCardData_Buf, BASE_ADDR, sizeof(RecCardData_Buf)); 这段代码不能运行
进入I2C_EE_BufferWrite()中发现是 I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); 不能运行
最后跟踪I2C_EE_PageWrite()发现程序停在如下while()中。
  /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 15:05:34 | 显示全部楼层
/* Check whether the last event contains the I2C_EVENT */
  if ((lastevent & I2C_EVENT) == I2C_EVENT)
  {
    /* SUCCESS: last event is equal to I2C_EVENT */
    status = SUCCESS;
  }
  else
  {
    /* ERROR: last event is different from I2C_EVENT */
    status = ERROR;
  }
  /* Return status */
  return status;
跟踪结果是第二刷IC卡 运行到此处返回的是  status = ERROR;

回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:10 , Processed in 0.026985 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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